DAX 计算滚动总和

DAX Calcuate rolling sum

我在计算对前 3 个时期的值求和的度量时遇到问题。 下面我附上示例事实 table 和字典 table 以显示我面临的问题。

date customer segment value
01.01.2021 1 A 10
02.01.2021 1 A 10
03.01.2021 1 A 10
04.01.2021 1 A 10
01.01.2021 2 B 20
02.01.2021 2 B 30
03.01.2021 2 B 40

字典 table:

segment segment_desc
A Name of A
B Name of B

我采用的方法:

last 3 value = 
VAR DATES = DATESINPERIOD(facts[date],LASTDATE(facts[date]), -3,MONTH)
RETURN CALCULATE([sum value], DATES)

只要四月份至少有一条记录,它就会产生正确的结果。 当我在 segment_desc = 'B' 上使用过滤器时 它产生了我附加的结果 - 所以我们看到四月的结果等于 20,这显然不是我想要的。我希望它是 50。

回答主要问题: 像 DATESINPERIOD 这样的时间智能函数需要一个合适的日历 table,因为它们需要连续的日期,没有间隔。

回答后续问题“为什么该度量显示 1 月份的值?”

有点棘手。首先,请注意此过滤器上下文中的 LASTDATE returns 空白:

因此,您的 DAX 指标将变为:

last 3 value = 
VAR DATES = DATESINPERIOD(facts[date], BLANK(), -3,MONTH)
RETURN CALCULATE([sum value], DATES)

空白 - 3 个月没有意义,因此 DAX 解决此问题的方式:它用 table 中的第一个(最小)日期替换空白。在这种情况下,它是 1/1/2021。然后从该日期开始回溯 3 个月。结果,最终措施是:

last 3 value = 
CALCULATE([sum value], {2020-11-01, 2020-12-01, 2021-01-01 })

由于您没有 2021-01-01 之前的数据,因此最终结果仅显示 1 月份的值。