在Slicer和PARALLELPERIOD中使用不同的列破坏了我的测量

时间:2018-07-11 16:50:24

标签: powerbi

我有一个表,其中包含前13个月底的数据以及最近的工作日的数据。我的大多数报告一次只查看一个时段,因此我在每个报表上都有一个限幅器,以允许用户选择他们要查看的时段,通常是最近的工作日。每当刷新数据时,我都必须手动转到选择了最近工作日的每个切片器,然后选择新的最近工作日(不幸的是,我的组织尚未更新为允许切片器同步的版本)。随着我们转向生产和计划的刷新,这将是一件令人讨厌的事情,因此我添加了第二列称为REPORTING_DATE,该列与原始DATA_DATE字段相同,不同之处在于最近的日期已替换为“最近的日期”,因此任何选择了该切片器的切片机都可以刷新后保持其选择。

这是我的数据的简化示例:

DATA_DATE   REPORTING_DATE  ACCOUNT_NO
7/10/2018   Most Recent     1001
7/10/2018   Most Recent     1002
7/10/2018   Most Recent     1003
7/10/2018   Most Recent     1004
7/10/2018   Most Recent     1005
7/10/2018   Most Recent     1006
7/10/2018   Most Recent     1007
6/30/2018   6/30/2018       1001
6/30/2018   6/30/2018       1002
6/30/2018   6/30/2018       1003
6/30/2018   6/30/2018       1004
6/30/2018   6/30/2018       1005
6/30/2018   6/30/2018       1006
5/31/2018   5/31/2018       1001
5/31/2018   5/31/2018       1002
5/31/2018   5/31/2018       1003
5/31/2018   5/31/2018       1004

我的问题是,当我更改切片器以使用DATA_DATE而不是REPORTING_DATE时,它破坏了我用来计算每个期间的计数变化的度量。

Change in Count (Month) = DISTINCTCOUNT(MyData[ACCOUNT_NO])-CALCULATE(DISTINCTCOUNT(MyData[ACOUNT_NO]),PARALLELPERIOD(MyData[DATA_DATE],-1,MONTH))

当切片器具有DATA_DATE = 7/10/2018时,度量正确返回1(7月10日的计数为7减去6月30日的计数为6)。当我将切片器与REPORTING_DATE = Most Recent一起使用时,我得到7,因为DISTINCTCOUNT(MyData[ACCOUNT_NO])返回7,这是正确的,但是CALCULATE(DISTINCTCOUNT(MyData[ACOUNT_NO]),PARALLELPERIOD(MyData[DATA_DATE],-1,MONTH))返回(Blank)。看起来PARALLELPERIOD(MyData[DATA_DATE],-1,MONTH)返回相同的值6/30/2018,无论使用了什么分切器,因此我对此问题感到困惑。

1 个答案:

答案 0 :(得分:1)

之所以不起作用,是因为PARALLELPERIOD中的CALCULATE过滤器仅替换了[DATA_DATE]列的上下文过滤器,但切片器过滤仍然有效,因为在另一列上。如果您在Most Recent切片器上选择[REPORTING_DATE],则您的度量将尝试查找不重复计数,其中[REPORTING_DATE]Most Recent,并且[DATA_DATE]也在上个月。由于不存在此类行,因此它将返回空白。

要解决此问题,您可以告诉度量直接忽略来自[REPORTING_DATE]切片器的过滤,而仅使用[DATA_DATE]列(从切片器间接获取过滤器)上的过滤。

Change in Count (Month) =
    DISTINCTCOUNT(MyData[ACCOUNT_NO]) - 
    CALCULATE(
        DISTINCTCOUNT(MyData[ACOUNT_NO]),
        ALL(MyData[REPORTING_DATE]),
        PARALLELPERIOD(MyData[DATA_DATE], -1, MONTH))

此功能与[DATA_DATE]上的切片器一起使用的原因是PARALLELPERIOD过滤器替换了该列的切片器过滤器。在[REPORTING_DATE]上切片时,不会替换切片器过滤器,因为您没有在CALCULATE过滤器参数内引用该列。


如果这仍然没有道理,我建议您阅读一下CALCULATE函数的工作方式。 《 DAX权威指南》中有整整一章专门介绍了这一点,并且有一些网站/博客也有不错的读物。