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

Power BI多条件场景下Units与Revenue求和计算求助

Power BI 分类求和解决方案

核心思路

先按ID维度判断所属分类,再基于分类分别计算Units(取ID唯一值求和)和Revenue(ID下所有行金额总和)。


步骤1:创建ID分类表

先生成一个中间表,给每个ID标记对应的分类,后续聚合更清晰。将代码中的'你的表名'替换为实际表名:

ID Category = 
SUMMARIZE(
    '你的表名',
    '你的表名'[D],
    "Category",
    VAR HasA = CALCULATE(COUNTROWS('你的表名'), '你的表名'[Code] = "a") > 0
    VAR HasB = CALCULATE(COUNTROWS('你的表名'), '你的表名'[Code] = "b") > 0
    VAR HasC = CALCULATE(COUNTROWS('你的表名'), '你的表名'[Code] = "c") > 0
    VAR HasD = CALCULATE(COUNTROWS('你的表名'), '你的表名'[Code] = "d") > 0
    -- 判断是否存在规则要求的"其他任意Code"
    VAR OtherCodesExist = 
        CALCULATE(DISTINCTCOUNT('你的表名'[Code])) > 
        IF(HasA,1, IF(HasB && (HasC || HasD),2,1))
    RETURN
        SWITCH(
            TRUE(),
            HasA && OtherCodesExist, "Category1",
            HasB && (HasC || HasD) && NOT(HasA) && OtherCodesExist, "Category2",
            HasB && NOT(HasA) && NOT(HasC) && NOT(HasD) && OtherCodesExist, "Category3",
            BLANK()
        )
)

步骤2:计算分类Units总和

Units取每个ID的唯一值求和,用MAX提取ID对应的唯一Units值:

Total Units by Category = 
SUMX(
    'ID Category',
    CALCULATE(MAX('你的表名'[Units]), '你的表名'[D] = 'ID Category'[D])
)

步骤3:计算分类Revenue总和

Revenue统计每个ID下所有行的金额总和,再按分类汇总:

Total Revenue by Category = 
SUMX(
    'ID Category',
    CALCULATE(SUM('你的表名'[Revenue]), '你的表名'[D] = 'ID Category'[D])
)

示例数据验证结果

根据你提供的数据,最终汇总结果如下:

分类总Units总Revenue
Category122890
Category232273
Category35245

替代方案:直接创建度量值(无需中间表)

如果不想生成中间表,可直接写包含分类判断的度量值:

Units度量值

Total Units by Category = 
VAR IDList = VALUES('你的表名'[D])
RETURN
SUMX(
    IDList,
    VAR CurrentID = [D]
    VAR HasA = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "a") > 0
    VAR HasB = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "b") > 0
    VAR HasC = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "c") > 0
    VAR HasD = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "d") > 0
    VAR OtherCodesExist = CALCULATE(DISTINCTCOUNT('你的表名'[Code]), '你的表名'[D] = CurrentID) > IF(HasA,1,IF(HasB && (HasC || HasD),2,1))
    VAR IsValid = 
        SWITCH(
            TRUE(),
            HasA && OtherCodesExist, TRUE,
            HasB && (HasC || HasD) && NOT(HasA) && OtherCodesExist, TRUE,
            HasB && NOT(HasA) && NOT(HasC) && NOT(HasD) && OtherCodesExist, TRUE,
            FALSE
        )
    RETURN
        IF(IsValid, CALCULATE(MAX('你的表名'[Units]), '你的表名'[D] = CurrentID), 0)
)

Revenue度量值

Total Revenue by Category = 
VAR IDList = VALUES('你的表名'[D])
RETURN
SUMX(
    IDList,
    VAR CurrentID = [D]
    VAR HasA = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "a") > 0
    VAR HasB = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "b") > 0
    VAR HasC = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "c") > 0
    VAR HasD = CALCULATE(COUNTROWS('你的表名'), '你的表名'[D] = CurrentID, '你的表名'[Code] = "d") > 0
    VAR OtherCodesExist = CALCULATE(DISTINCTCOUNT('你的表名'[Code]), '你的表名'[D] = CurrentID) > IF(HasA,1,IF(HasB && (HasC || HasD),2,1))
    VAR IsValid = 
        SWITCH(
            TRUE(),
            HasA && OtherCodesExist, TRUE,
            HasB && (HasC || HasD) && NOT(HasA) && OtherCodesExist, TRUE,
            HasB && NOT(HasA) && NOT(HasC) && NOT(HasD) && OtherCodesExist, TRUE,
            FALSE
        )
    RETURN
        IF(IsValid, CALCULATE(SUM('你的表名'[Revenue]), '你的表名'[D] = CurrentID), 0)
)

内容的提问来源于stack exchange,提问作者Sea Breeze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:44:53