Power BI DAX无日期场景下按指定列计算累计总和求助
Power BI DAX 按指定列计算累计运行总和方案
核心逻辑
先排除目标数值列中的空值与数值为0的行,仅保留数值≥1的记录,再按该数值列的升序逻辑,计算0/1列的累计求和。
方案一:计算列(适合直接在表中生成累计值)
假设你的数据表为FactTable,0/1列名为FlagColumn,分组排序的数值列名为NumberColumn,创建计算列的DAX公式如下:
累计运行总和 = VAR 当前数值 = [NumberColumn] RETURN CALCULATE( SUM(FactTable[FlagColumn]), FILTER( ALL(FactTable), NOT(ISBLANK(FactTable[NumberColumn])) && FactTable[NumberColumn] >= 1 && FactTable[NumberColumn] <= 当前数值 ) )
公式解释
VAR 当前数值 = [NumberColumn]:捕获当前行的数值列值,作为累计的上限CALCULATE + SUM:计算符合筛选条件的FlagColumn总和FILTER(ALL(FactTable), ...):遍历全表筛选有效行:NOT(ISBLANK(FactTable[NumberColumn])):排除数值列为空的行FactTable[NumberColumn] >= 1:仅保留数值≥1的记录FactTable[NumberColumn] <= 当前数值:仅保留数值不超过当前行的记录,实现累计逻辑
方案二:度量值(适合可视化中动态计算)
如果需要在报表可视化组件中动态展示累计值,使用度量值更灵活:
累计运行总和_度量值 = VAR 选中数值 = MAX(FactTable[NumberColumn]) RETURN CALCULATE( SUM(FactTable[FlagColumn]), FILTER( ALL(FactTable), NOT(ISBLANK(FactTable[NumberColumn])) && FactTable[NumberColumn] >= 1 && FactTable[NumberColumn] <= 选中数值 ) )
特殊情况处理
如果NumberColumn存在重复数值,需要确保累计顺序稳定,可以结合表中的唯一主键(如ID列)调整筛选逻辑,示例:
累计运行总和_去重版 = VAR 当前数值 = [NumberColumn] VAR 当前ID = [ID列] RETURN CALCULATE( SUM(FactTable[FlagColumn]), FILTER( ALL(FactTable), NOT(ISBLANK(FactTable[NumberColumn])) && FactTable[NumberColumn] >= 1 && (FactTable[NumberColumn] < 当前数值 || (FactTable[NumberColumn] = 当前数值 && FactTable[ID列] <= 当前ID)) ) )
内容的提问来源于stack exchange,提问作者MDYETI
相关产品推荐
相关产品推荐

