求助:使用MDX查询SSAS服务器无法获取同期对比数据
MDX同期对比查询解决方案
原有写法问题分析
- 原有逻辑通过CASE判断[Hire Date]当前成员的日期范围,行轴未放置[Hire Date]维度时,当前成员默认为维度的"所有成员",条件永远不匹配导致返回空值
- 新增[Hire Date]到行轴后,会按每个入职日期拆分出行,无法按[Employee].[Title]维度聚合分组,不符合预期输出
优化后查询代码
WITH -- 当年数据:聚合指定日期范围内的销售配额 MEMBER [Measures].[current year data] AS SUM( FILTER( [Employee].[Hire Date].[Hire Date].ALLMEMBERS, CDate([Employee].[Hire Date].CurrentMember.MemberValue) >= CDate('2002-01-01') AND CDate([Employee].[Hire Date].CurrentMember.MemberValue) <= CDate('2002-12-31') ), [Measures].[Sales Amount Quota] ) -- 上年同期数据:聚合上一年对应日期范围的销售配额 MEMBER [Measures].[previous year data] AS SUM( FILTER( [Employee].[Hire Date].[Hire Date].ALLMEMBERS, CDate([Employee].[Hire Date].CurrentMember.MemberValue) >= CDate('2001-01-01') AND CDate([Employee].[Hire Date].CurrentMember.MemberValue) <= CDate('2001-12-31') ), [Measures].[Sales Amount Quota] ) SELECT { [Measures].[current year data], [Measures].[previous year data] } ON COLUMNS, -- 行轴仅保留职位维度,按职位名称升序排列,过滤空值行 NONEMPTY( ORDER( [Employee].[Title].[Title].ALLMEMBERS, [Employee].[Title].CurrentMember.Member_Caption, ASC ), {[Measures].[current year data], [Measures].[previous year data]} ) ON ROWS FROM [Sales Targets] CELL PROPERTIES VALUE, FORMATTED_VALUE, FORMAT_STRING
逻辑说明
- 采用
SUM+FILTER组合直接聚合对应日期范围的度量值,不需要将[Hire Date]维度放进行轴,自动按行轴的[Employee].[Title]维度分组 - 日期范围可以直接修改FILTER中的起止日期实现动态调整,适配任意时间段的同期对比需求
- 行轴仅保留[Employee].[Title]成员,通过NONEMPTY过滤掉两年数据均为空的无效行
- 若Cube中存在独立的标准日期维度,可替换为
ParallelPeriod函数进一步简化同期计算逻辑,无需手动编写上年日期范围。
内容的提问来源于stack exchange,提问作者TAMILARASAN R
相关产品推荐
相关产品推荐

