在DAX计算列中实现Excel SUMIFS功能的技术咨询
SUMIFS逻辑的DAX计算列实现
你需要的DAX计算列要复刻Excel中按CustomerType、Family、MPF分组,计算每行Qty占分组年度总量百分比的逻辑,对应Excel公式为:=E2/SUMIFS($E$2:$E$25,$A$2:$A$25,A2,$B$2:$B$25,B2,$C$2:$C$25,C2)。
方案1:使用ALLEXCEPT(推荐)
创建计算列时使用以下DAX表达式:
Allocation = DIVIDE( [Qty], CALCULATE( SUM('Table'[Qty]), ALLEXCEPT('Table', 'Table'[CustomerType], 'Table'[Family], 'Table'[MPF]) ) )
ALLEXCEPT会移除除指定分组列之外的所有筛选上下文,确保计算的是当前行所属分组的总Qty。DIVIDE函数自动处理除零场景,避免出现计算错误。
方案2:使用EARLIER引用当前行值
如果你更习惯类似Excel的匹配逻辑,也可以用EARLIER引用当前行的分组字段值:
Allocation = DIVIDE( [Qty], CALCULATE( SUM('Table'[Qty]), 'Table'[CustomerType] = EARLIER('Table'[CustomerType]), 'Table'[Family] = EARLIER('Table'[Family]), 'Table'[MPF] = EARLIER('Table'[MPF]) ) )
EARLIER用于在嵌套上下文里引用外部行上下文的列值,筛选出与当前行分组字段完全匹配的所有行后求和。
效果验证
以下是对应你提供的Excel表格的计算结果示例:
| CustomerType | Family | MPF | Date | Qty | Allocation |
|---|---|---|---|---|---|
| SHR | Family1 | MPF1 | 1-Jan-22 | 18,668 | 7% |
| SHR | Family1 | MPF1 | 1-Feb-22 | 12,917 | 5% |
| SHR | Family1 | MPF1 | 1-Mar-22 | 20,150 | 8% |
| SHR | Family1 | MPF1 | 1-Apr-22 | 20,447 | 8% |
| SHR | Family1 | MPF1 | 1-May-22 | 26,591 | 10% |
| SHR | Family1 | MPF1 | 1-Jun-22 | 26,482 | 10% |
| SHR | Family1 | MPF1 | 1-Jul-22 | 25,398 | 10% |
| SHR | Family1 | MPF1 | 1-Aug-22 | 26,718 | 10% |
| SHR | Family1 | MPF1 | 1-Sep-22 | 23,275 | 9% |
| SHR | Family1 | MPF1 | 1-Oct-22 | 17,357 | 7% |
| SHR | Family1 | MPF1 | 1-Nov-22 | 22,360 | 9% |
| SHR | Family1 | MPF1 | 1-Dec-22 | 15,438 | 6% |
| SUB | Family2 | MPF2 | 1-Jan-22 | 15,407 | 7% |
| SUB | Family2 | MPF2 | 1-Feb-22 | 14,486 | 6% |
| SUB | Family2 | MPF2 | 1-Mar-22 | 19,888 | 9% |
| SUB | Family2 | MPF2 | 1-Apr-22 | 19,238 | 9% |
| SUB | Family2 | MPF2 | 1-May-22 | 21,765 | 10% |
| SUB | Family2 | MPF2 | 1-Jun-22 | 20,367 | 9% |
| SUB | Family2 | MPF2 | 1-Jul-22 | 18,356 | 8% |
| SUB | Family2 | MPF2 | 1-Aug-22 | 23,161 | 10% |
| SUB | Family2 | MPF2 | 1-Sep-22 | 19,623 | 9% |
| SUB | Family2 | MPF2 | 1-Oct-22 | 17,559 | 8% |
| SUB | Family2 | MPF2 | 1-Nov-22 | 18,330 | 8% |
| SUB | Family2 | MPF2 | 1-Dec-22 | 16,175 | 7% |
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

