Powerbi 在切片器和PARALLELPERIOD中使用不同的列会破坏我的度量

Powerbi 在切片器和PARALLELPERIOD中使用不同的列会破坏我的度量,powerbi,Powerbi,我有一个表,其中包含13个月前月末以及最近一个工作日的数据。我的大多数报告一次只查看一个时段,因此我在每个报告上都有一个切片器,允许用户选择他们想要查看的时段,通常是最近的工作日。每当数据刷新时,我必须手动转到选择了最近工作日的每个切片器,并选择新的最近工作日(遗憾的是,我的组织尚未更新到允许同步切片器的版本)。当我们转向生产和计划刷新时,这将是一个麻烦,因此我添加了第二列“REPORTING_DATE”,它与原始数据_DATE字段相等,但最近的日期被替换为“most recent”,因此任何选

我有一个表,其中包含13个月前月末以及最近一个工作日的数据。我的大多数报告一次只查看一个时段,因此我在每个报告上都有一个切片器,允许用户选择他们想要查看的时段,通常是最近的工作日。每当数据刷新时,我必须手动转到选择了最近工作日的每个切片器,并选择新的最近工作日(遗憾的是,我的组织尚未更新到允许同步切片器的版本)。当我们转向生产和计划刷新时,这将是一个麻烦,因此我添加了第二列“REPORTING_DATE”,它与原始数据_DATE字段相等,但最近的日期被替换为“most recent”,因此任何选中该日期的切片器在刷新后都可以保持其选择

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

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\u DATE=7/10/2018
时,度量值正确返回1(7月10日的计数为7减去6月30日的计数为6)。当我使用切片器时,
REPORTING\u DATE=Most Recent
我得到7,因为
DISTINCTCOUNT(MyData[ACOUNT\u NO])
返回7,这是正确的,但是
计算(DISTINCTCOUNT(MyData[ACOUNT\u NO]),并行周期(MyData[DATA\u DATE,-1,MONTH))
返回
(空白)
。它看起来像是
PARALLELPERIOD(MyData[DATA_DATE],-1,MONTH)
返回相同的值
2018年6月30日
,无论使用的切片器是什么,所以我对这个问题感到困惑。

这不起作用的原因是
计算中的
PARALLELPERIOD
过滤器只是在替换
的上下文过滤器[DATA\u DATE]
列,但切片器过滤仍然有效,因为它位于不同的列上。如果您在
[REPORTING\u DATE]
切片器上选择
最近的
,您的度量将尝试查找
[REPORTING\u DATE]
最近的
[DATA\u DATE]的不同计数
位于上个月。由于不存在此类行,因此返回空白

要解决此问题,您可以告诉度量值直接从
[REPORTING\u DATE]
切片器忽略筛选,并且只在
[DATA\u DATE]
列上使用筛选(该列从切片器间接获取筛选)

这在
[DATA\u DATE]
上与切片器一起工作的原因是
PARALLELPERIOD
过滤器替代了该列的切片器过滤。在
[REPORTING\u DATE]上切片时
,切片器筛选不会被替换,因为您没有在
计算
筛选参数中引用该列



如果这仍然没有意义,我建议大家阅读一下
计算
函数是如何工作的。DAX的权威指南中有一整章专门介绍这个函数,还有一些网站/博客也有一些不错的阅读资料。

效果很好,Alexis。我通常怀疑这个问题是因为这两个过滤器ers被应用,因此没有返回任何行,ALL()将成为解决方案,但我自己还没有找到解决方案的经验。您的解释帮助我认识到CALCULATE()中的“Filter”参数不必只过滤/减少正在处理的数据,还可以做相反的事情(包括更多的数据),这是一个非常有用的启示。不用客气!我现在已经有了很多使用DAX的经验,但这对我来说也不是很明显。我必须玩一玩才能弄清楚。
Change in Count (Month) =
    DISTINCTCOUNT(MyData[ACCOUNT_NO]) - 
    CALCULATE(
        DISTINCTCOUNT(MyData[ACOUNT_NO]),
        ALL(MyData[REPORTING_DATE]),
        PARALLELPERIOD(MyData[DATA_DATE], -1, MONTH))