我有一个包含 2 列的表格:ID 和 Numbers;我想创建一个新列 Result ,其中包含 Numbers 列的运行总计,但每次运行总计超过 20 时,都应重新启动运行总计。此外,如果运行总计低于 20,则不应显示结果。这必须仅使用 DAX 来完成。
谢谢您的建议。
注意:条件运行总计列的存在只是为了显示运行总计的工作原理。
身份证 | 数字 | 条件运行总计 | 结果 |
---|---|---|---|
1 | 9 | 9 | |
2 | 7 | 16 | |
3 | 9 | 25 | 25 |
4 | 8 | 8 | |
5 | 9 | 17 | |
6 | 9 | 26 | 26 |
7 | 1 | 1 | |
8 | 0 | 1 | |
9 | 0 | 1 | |
10 | 9 | 10 | |
11 | 9 | 19 | |
12 | 2 | 21 | 21 |
13 | 1 | 1 |
编辑:我添加了更多行来测试解决方案。
我仅在您的示例数据上进行测试,可能存在一些逻辑错误。我将其分成几列,以便更好地理解我在做什么。
Running = var _curID = 'Table'[ID]
var _run = CALCULATE( sum('Table'[Numbers]), FILTER(all('Table'), 'Table'[ID] <= _curID))
return
ceiling(floor(ceiling(_run , 5) -
ceiling(MOD(_run, 5), 20), 15)
, 20) /20
Rung = var _curID = 'Table'[ID]
var _previousDate = CALCULATE( max('Table'[Running]), FILTER('Table', 'Table'[ID] < EARLIER('Table'[ID])))
return
_previousDate+0
Final = var _id = [ID]
var _Rung = [Rung]
var _ret =
CALCULATE( sum('Table'[Numbers]), filter(ALL('Table'), [ID] <= _id && _Rung = [Rung]))
return
if (_ret > 20, _ret, 0)
最终输出:
Result =
VAR RunningTotal =
CALCULATE(
SUM('YourTable'[Numbers]),
FILTER(
ALL('YourTable'),
'YourTable'[ID] <= EARLIER('YourTable'[ID])
)
)
RETURN
IF(
RunningTotal >= 20,
RunningTotal,
BLANK()
)
该DAX表达式计算“Numbers”列到当前行的运行总计,如果运行总计大于或等于20,则显示运行总计;否则,显示空白值。