MDX计算成员使用属性T过滤无效,如何确保始终显示T2数据?
MDX计算成员在Date切片器下失效的解决方案
问题背景
维度表结构如下:
ID T Date 2 T2 2022-11-18 3 T1 2022-11-21
- 主事实表包含ID为2和3的交易数据
- Date属性可在Excel数据透视表的切片器里正常使用,T属性仅用于计算成员,不对外可见
遇到的问题:
- 用T做过滤的计算成员在Date切片器启用时完全失效:
([Date].[T].&[T2], [Measures].[Notional_SUM]) - 但用ID写的测试计算成员能正常运行:
([Date].[ID].&[2], [Measures].[Notional_SUM]) - 后续测试发现:移除Date切片器/顶部筛选后,T的计算成员恢复正常。原因是切片器相当于给Date加了WHERE筛选,当前数据范围内找不到对应T2的数据。
需求:创建始终显示T2数据的MDX计算成员,用于搭建SSAS副本(需和原有Java内存型OLAP Cube的维度、度量完全一致)
解决方案
要让计算成员不受切片器的Date筛选影响,需要显式忽略当前的筛选上下文,直接关联T2对应的所有数据。推荐两种写法:
方法1:通过EXISTS直接关联事实表
CREATE MEMBER CURRENTCUBE.[Measures].[T2_Notional_SUM] AS SUM( EXISTS( [Date].[T].&[T2].Children, NULL, "你的事实表名称" ), [Measures].[Notional_SUM] ), VISIBLE = 1;
EXISTS会直接从指定事实表中获取所有关联T2的成员,完全不受当前切片器的Date筛选限制
方法2:用AllMembers覆盖Date筛选
CREATE MEMBER CURRENTCUBE.[Measures].[T2_Notional_SUM] AS SUM( [Date].[T].&[T2], ([Measures].[Notional_SUM], [Date].[Date].AllMembers) ), VISIBLE = 1;
- 这里通过
[Date].[Date].AllMembers强制忽略切片器对Date维度的筛选,计算所有日期中属于T2的Notional总和
原理说明
Excel切片器会在MDX查询的上下文里自动添加WHERE条件,限制Date维度的范围。直接写([Date].[T].&[T2], [Measures].[Notional_SUM])会继承这个上下文,只能计算当前筛选日期内的T2数据。上面两种方法要么直接从事实表拉取T2的关联数据,要么显式覆盖Date的筛选,从而实现始终计算全量T2数据的效果。
内容的提问来源于stack exchange,提问作者TilleyTech
相关产品推荐
相关产品推荐

