我正在学习使用Power Pivot并编写DAX,我正在编写一本由Rob Collie和Avichal Singh编写的书,名为“Power Pivot and Power BI” .
在早期,它解释了在度量中使用CALCULATE()时会发生什么 . 理解的关键点解释如下:
如果过滤器参数作用于已在枢轴上的列,则它将覆盖该列的轴上下文
因此,在一个名为“GSR”的简单表格中,我有一系列发票,其中包含发票日期,产品和金额 . 我有另一列将所有发票日期转换为该月的最后一天,以便将它们聚集在一起 . 我创建了一个名为“Total orders”的度量,它计算行数 .
我创建了这个数据的一个支点:
-
行中的产品
-
月份在列中结束(但我实际上选择了自动分解Power Pivot在我的Month_End列上完成的月份和年份)
-
值中的订单
此透视正确呈现 .
现在问题是:
我已经创建了两个切片器,它们正在关闭两个断开连接的表;一个包含月份数字,一个包含年份 . 根据每个选项的选择,我有一个使用EOMONTH(DATE(),0)创建月末的度量 . 此度量称为“Comparison_Month_End” .
然后,我有另一个称为“Compare_Orders”的度量,其中包含以下内容:
CALCULATE([Total orders],FILTER(GSR,GSR[Month_End]=[Comparison_Month_End]))
所有这一切的要点 - 这是为了从GSR获得月份和年份与切片机选择匹配的订单 . 我希望这个值出现在所选择的每个月的枢轴中,即不被枢轴过滤 .
但是,它不起作用 . 在我看来,这与本书所说的相反,即如果度量中的过滤器应用于枢轴上的列(在本例中为Month_End),则会重置透视过滤器 . 所以,例如,如果我在我的支点上的一列中有31-Mar-18,而比较月末是31-Jan-18,我希望看到3月订单旁边的“Compare_Orders”中的1月订单, 2月订单,12月订单等,但它只出现在1月份 .
对我而言,这与图书中的示例完全相同,其中行中有年份,第1列中的总销售额,第2列中的2002年销售额 . 第1列显示每年的销售额,第2列显示相同的销售数字(即2002年销售额)对每一行,即使行年份是2001年,2003年或2004年 . 2002年销售指标使用CALCULATE()汇总总销售额,过滤“Sales [Year] = 2002” .
任何人都可以解释为什么我预计会发生什么似乎不会发生吗?
谢谢 .
1 回答
在评估第一个参数时,
CALCULATE
确实会覆盖过滤器上下文;使用提供给其第二个参数的行作为新的过滤器上下文 . 然而;CALCULATE
在评估其第二个参数时不会更改过滤器上下文,因此除非明确删除它们,否则将保留预先存在的过滤器 .在
FILTER(GSR,GSR[Month_End]=[Comparison_Month_End])
中,FILTER
仅迭代预先存在的过滤器上下文(数据透视上下文)中存在的GSR
行 . 要获取所有行,请使用ALL
: