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 月份的值。
我在计算对前 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 月份的值。