如何创建CALCULATE度量值,获取当前行日期前最后存在日期的数值总和
解决方案
首先明确你的数据表格(记为'table')结构如下:
| rounds_bot_date | values | |
|---|---|---|
| 1 | 2024-04-09 | 10 |
| 2 | 2024-04-10 | 20 |
| 0 | 2024-04-11 | 30 |
| 3 | 2024-04-15 | 40 |
| 4 | 2024-04-16 | 50 |
| 5 | 2024-04-17 | 60 |
要实现你需要的筛选逻辑,创建以下DAX度量值即可:
LastPriorValueSum = VAR CurrentDate = MAX('table'[rounds_bot_date]) VAR LastPriorDate = CALCULATE( MAX('table'[rounds_bot_date]), 'table'[rounds_bot_date] < CurrentDate ) RETURN CALCULATE( SUM('table'[values]), 'table'[rounds_bot_date] = LastPriorDate )
度量值逻辑说明
CurrentDate:获取当前行上下文对应的日期(比如表格可视化中每一行的rounds_bot_date)。LastPriorDate:筛选出所有早于CurrentDate的日期,取其中最大的那个(即当前日期之前最后一个存在的日期)。- 最终计算:匹配
LastPriorDate对应的values总和。
验证结果
- 针对
2024-04-15,LastPriorDate为2024-04-11,对应SUM(values)结果为30,符合需求。 - 针对
2024-04-10,LastPriorDate为2024-04-09,对应SUM(values)结果为10,符合需求。
边界情况处理
如果是表格中最早的日期(比如2024-04-09),由于没有更早的日期,LastPriorDate会返回空白,最终度量值结果也为空白。若需要将这种情况返回0,可修改RETURN部分:
RETURN IF( NOT ISBLANK(LastPriorDate), CALCULATE(SUM('table'[values]), 'table'[rounds_bot_date] = LastPriorDate), 0 )
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

