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
相关产品推荐
相关产品推荐

