PowerBI DAX:基于临时表用SUMX保留Company列并计算子组总量问题
DAX解决方案:跨表计算与保留分组列
核心思路
- 跨表筛选问题:利用表间关联关系(假设Table1与Table2已通过关联键如Company建立关系),在
CALCULATE中直接指定跨表筛选条件,替代无法跨表使用的ALLEXCEPT。 - 保留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
相关产品推荐
相关产品推荐

