You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI中DAX累计求和遇重复值异常的修复求助

DAX累计求和度量值修复请求

我创建了一个DAX度量值用于计算[total_materiais]度量值的累计求和。初始表格数据如图1所示,插入该度量值后预期得到如图2的正确累计结果,但当行中出现重复值时,公式实际返回结果如图3,存在计算异常。

当前使用的DAX公式:

Acumulado Oficial =

VAR vQtdMaterial = [total_materiais]
VAR vAcumulado =
IF(
    NOT(ISBLANK([total_materiais])),
    CALCULATE(
        [total_materiais],
        FILTER(
            ALLSELECTED(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
            [total_materiais] >= vQtdMaterial
        )
    )
)
RETURN
IF(
    ISINSCOPE(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
        vAcumulado,
        vQtdMaterial
)

问题分析

当前公式的核心问题是:当存在重复的[total_materiais]值时,FILTER条件[total_materiais] >= vQtdMaterial会将所有等于该值的行全部纳入计算,导致累计求和出现重复统计,无法实现按类别顺序的正确累计。

修复方案

需要引入明确的排序逻辑,确保累计是基于稳定的顺序进行,而非单纯依赖数值大小。以下提供两种适配不同场景的修复公式:

方案1:按数值排名累计(重复数值统一纳入)

Acumulado Oficial =
VAR CurrentValue = [total_materiais]
VAR vAcumulado =
    IF(
        NOT(ISBLANK(CurrentValue)),
        CALCULATE(
            [total_materiais],
            FILTER(
                ALLSELECTED(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
                -- 用RANKX生成稳定排名,DENSE确保重复数值获相同排名
                RANKX(
                    ALLSELECTED(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
                    [total_materiais],, DESC, DENSE
                ) <= RANKX(
                    ALLSELECTED(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
                    CurrentValue,, DESC, DENSE
                )
            )
        )
    )
RETURN
    IF(
        ISINSCOPE(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
        vAcumulado,
        CurrentValue
    )

方案2:按类别本身顺序累计(严格按类别排序)

如果你的累计逻辑是基于类别列的固有顺序(而非数值大小),可使用此版本:

Acumulado Oficial =
VAR CurrentClass = SELECTEDVALUE(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe])
VAR CurrentValue = [total_materiais]
VAR vAcumulado =
    IF(
        NOT(ISBLANK(CurrentValue)),
        CALCULATE(
            [total_materiais],
            FILTER(
                ALLSELECTED(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
                f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe] <= CurrentClass
            )
        )
    )
RETURN
    IF(
        ISINSCOPE(f_kssk_atr_objt_classe[d_klah_classe.CLASS_classe]),
        vAcumulado,
        CurrentValue
    )

说明

  • 方案1通过RANKX的DENSE参数,确保重复数值获得相同排名,累计时一次性纳入所有同排名的行,避免重复统计。
  • 方案2直接基于类别列的顺序进行累计,适用于需要严格按类别排序的场景,需确保类别列本身有明确的排序规则。

内容的提问来源于stack exchange,提问作者Humberto Viana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:33:26