我有一个表,其中包含前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
,无论使用了什么分切器,因此我对此问题感到困惑。
答案 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权威指南》中有整整一章专门介绍了这一点,并且有一些网站/博客也有不错的读物。