旧文搬运
整理资料的时候,看到去年学习 Power Pivot 遇到的一个问题,当时刘凯老师的解答基本解决了我的困惑,但是对其中的原理还不是那么理解。今天重新整理一下。
数据源如上,当时认为透视表中EE & HH的单元格值应该为120,因为A列的筛选器清除了,所以只剩B列HH筛选,但实际值却是空值。
其实这是 AutoExists 功能产生的,我们在 PP 里写的 DAX 公式,透视表会将它转换为MDX语言。AutoExists 是MDX的一项功能,可以避免对不存在的集合进行计算。EE & HH 集合并不存在,所以一开始透视表就不会对其计值。
接下来看另一种情况,把A列单独做一个表,然后和原表表1建立关系。
再建立一个度量值2,这次清除的是表2
A列的筛选器,同时新建一个透视表,行标签改成表2 A列,这时候可以看到 EE & HH单元格的值为120。新模型表2的 A列和表1的
B列其实生成一个笛卡尔积,清除表2 A列的筛选器后,EE & HH 变成 HH 筛选器继续对度量值生效。
这个错误非常隐蔽,必要的时候可以对模型非规范化,避免度量值产生奇怪的计算结果。适当的模型,也可以避免编写复杂的DAX函数。