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

PowerBI DAX:基于临时表用SUMX保留Company列并计算子组总量问题

DAX解决方案:跨表计算与保留分组列

核心思路

  1. 跨表筛选问题:利用表间关联关系(假设Table1与Table2已通过关联键如Company建立关系),在CALCULATE中直接指定跨表筛选条件,替代无法跨表使用的ALLEXCEPT。
  2. 保留Company列:放弃GROUPBY,改用ADDCOLUMNS + SUMMARIZE组合,直接在基础汇总表上添加SubGroup级别的汇总列,全程保留所有原始列。

修正后的DAX代码

Table group = 
VAR mTbl = 
    SUMMARIZE(
        'Table1',
        'Table2'[Company],
        'Table1'[Date],
        'Table1'[Main Group],
        'Table2'[SubGroup], -- 直接关联Table2的SubGroup,前提是表间关系正确
        "Quantity", SUM('Table1'[Quantity]),
        "Total Quantity Main Group", 
            CALCULATE(
                SUM('Table1'[Quantity]),
                ALLEXCEPT('Table1', 'Table1'[Date], 'Table1'[Main Group])
            )
    )
VAR mTblWithSubTotal = 
    ADDCOLUMNS(
        mTbl,
        "Total Quantity Sub Group",
            CALCULATE(
                SUM('Table1'[Quantity]),
                -- 锁定Date、Main Group、SubGroup维度的总量
                ALLEXCEPT('Table1', 'Table1'[Date], 'Table1'[Main Group]),
                FILTER(
                    ALL('Table2'),
                    'Table2'[Company] = EARLIER('Table2'[Company]) &&
                    'Table2'[SubGroup] = EARLIER('Table2'[SubGroup])
                )
            )
    )
RETURN mTblWithSubTotal

关键细节说明

  • 跨表SubGroup取值:若Table1与Table2是一对多关联(比如一个Company对应多个SubGroup),SUMMARIZE中直接引用Table2[SubGroup]会自动匹配对应行的值;若存在一个Company对应多个SubGroup的情况,原代码中的MAX会取最大值,如需保留所有关联SubGroup需调整分组逻辑。
  • SubGroup总量计算:用FILTER + EARLIER精准匹配当前行的Company和SubGroup,确保计算的是同一维度下的Quantity总和,避免跨Company的错误汇总。
  • 保留Company列:SUMMARIZE已包含Table2[Company],ADDCOLUMNS是在原表基础上追加列,不会丢失任何原有字段,彻底解决GROUPBY丢列的问题。

备选方案(无表间关系时)

若Table1与Table2未建立关系,先通过关联键合并表再汇总:

Table group = 
VAR CombinedTbl = 
    NATURALINNERJOIN('Table1', 'Table2') -- 内连接合并两张表,确保关联键匹配
VAR mTbl = 
    SUMMARIZE(
        CombinedTbl,
        [Company],
        [Date],
        [Main Group],
        [SubGroup],
        "Quantity", SUM([Quantity]),
        "Total Quantity Main Group", 
            CALCULATE(
                SUM([Quantity]),
                ALLEXCEPT(CombinedTbl, [Date], [Main Group])
            )
    )
VAR mTblWithSubTotal = 
    ADDCOLUMNS(
        mTbl,
        "Total Quantity Sub Group",
            CALCULATE(
                SUM([Quantity]),
                ALLEXCEPT(CombinedTbl, [Date], [Main Group], [SubGroup])
            )
    )
RETURN mTblWithSubTotal

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:26:13