如何在MDX查询中添加第二个度量,实现双度量滚动12个月数据查询?
MDX查询添加多度量滚动12个月数据的解决方案
问题原因
原查询在WHERE子句(切片器)中指定多个度量成员导致报错,因为MDX的切片器用于筛选多维数据集的单一切片,对Measures维度而言,切片器仅支持指定单个成员作为过滤条件,无法直接通过切片器返回多个度量的结果。
修改后的可行查询
方式1:将度量与时间周期交叉放在列轴
SELECT NON EMPTY CrossJoin( {LastPeriods(12,[Time].[By Fiscal Year].[Period].&[Jul-21])}, {[Measures].[measure1], [Measures].[measure2]} ) ON COLUMNS ,[Customer].[CustomerName].[CustomerName].MEMBERS ON ROWS FROM ( SELECT [CustomerNamedSet] ON COLUMNS FROM [CSIS] WHERE {[Time].[By Fiscal Year].[Period].&[Jul-21]} );
方式2:将度量与客户交叉放在行轴
SELECT NON EMPTY {LastPeriods(12,[Time].[By Fiscal Year].[Period].&[Jul-21])} ON COLUMNS ,NON EMPTY CrossJoin( [Customer].[CustomerName].[CustomerName].MEMBERS, {[Measures].[measure1], [Measures].[measure2]} ) ON ROWS FROM ( SELECT [CustomerNamedSet] ON COLUMNS FROM [CSIS] WHERE {[Time].[By Fiscal Year].[Period].&[Jul-21]} );
关键修改说明
- 移除切片器中的度量集合:将原本放在WHERE子句的多度量移至查询的轴(COLUMNS或ROWS)中,这是MDX展示多度量的标准方式。
- 使用CrossJoin关联维度:通过
CrossJoin函数将时间周期与度量(或客户与度量)进行交叉,确保每个时间周期的两个度量值都能被返回。 - 保留原有筛选逻辑:子查询对
CustomerNamedSet的筛选、时间基准周期的设定均保持不变,保证滚动12个月的计算逻辑正确。
内容的提问来源于stack exchange,提问作者kpsr
相关产品推荐
相关产品推荐

