首页 文章

DAX CALCULATE()似乎没有覆盖数据透视过滤器

提问于
浏览
0

我正在学习使用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月份 .

enter image description here

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

enter image description here

任何人都可以解释为什么我预计会发生什么似乎不会发生吗?

谢谢 .

1 回答

  • 0

    在评估第一个参数时, 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]))
    

相关问题