我正在学习使用Power Pivot并写DAX,我正在编写一本我买的书由Rob Collie和Avichal Singh编写,名为" Power Pivot和Power BI"。
早期它解释了在度量中使用CALCULATE()时会发生什么。理解的关键点解释如下:
如果过滤器参数作用于已在枢轴上的列,则为 将覆盖该列的数据透视上下文
所以在一个名为" GSR"的简单表中我有一系列发票,包括发票日期,产品和金额。我有另一列将所有发票日期转换为该月的最后一天,以便将它们收集在一起。我创建了一个名为" Total orders"这是计算行数。
我用以下方法创建了这个数据的一个支点:
此透视图正确呈现。
现在问题:
我创建了两个切片器,它们正在关闭两个断开连接的表;一个包含月份数字,一个包含年份。根据每个选项的选择,我有一个使用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,我希望看到1月份的订单在" Compare_Orders"坐在3月订单旁边,2月订单,12月订单等等,但它只出现在1月份旁边。对我而言,这与图书中的示例完全相同,其中行中有年份,第1列中的总销售额,第2列中的2002年销售额。第1列显示每年的销售额,列2显示了相对于每一行的相同销售数字(即2002年销售额),即使行年份是2001年,2003年或2004年。2002年销售指标使用CALCULATE()汇总总销售额,过滤"销售额[年份] = 2002"。
有人可以解释为什么我预计会发生的事情似乎不会发生吗?
谢谢。
答案 0 :(得分:1)
CALCULATE
确实覆盖了过滤器上下文;使用提供给其第二个参数的行作为新的过滤器上下文。然而; CALCULATE
在评估其第二个参数时不会更改过滤器上下文,因此除非明确删除它们,否则将保留预先存在的过滤器。
在FILTER(GSR,GSR[Month_End]=[Comparison_Month_End])
中,FILTER
仅迭代预先存在的过滤器上下文(数据透视上下文)中存在的GSR
行。要获取所有行,请使用ALL
:
CALCULATE([Total orders],FILTER(ALL(GSR),GSR[Month_End]=[Comparison_Month_End]))