DAX CALCULATE()似乎没有覆盖透视滤镜

时间:2018-04-18 21:35:44

标签: powerbi dax powerpivot

我正在学习使用Power Pivot并写DAX,我正在编写一本我买的书由Rob Collie和Avichal Singh编写,名为" Power Pivot和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,我希望看到1月份的订单在" Compare_Orders"坐在3月订单旁边,2月订单,12月订单等等,但它只出现在1月份旁边。

enter image description here

对我而言,这与图书中的示例完全相同,其中行中有年份,第1列中的总销售额,第2列中的2002年销售额。第1列显示每年的销售额,列2显示了相对于每一行的相同销售数字(即2002年销售额),即使行年份是2001年,2003年或2004年。2002年销售指标使用CALCULATE()汇总总销售额,过滤"销售额[年份] = 2002"。

enter image description here

有人可以解释为什么我预计会发生的事情似乎不会发生吗?

谢谢。

1 个答案:

答案 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]))