DAX创建Income计算列时如何新增「All costs」汇总分类项
问题核心说明
你当前写的计算列是逐行计算属性,每行只能归属一个分类,而All costs是汇总级标签,无法直接通过给每行加计算列值的方式实现,需要调整实现方案,以下是可落地的两种解法:
第一步:先修正原有DAX的逻辑错误
你原表达式中逻辑运算符优先级有误,&&优先级高于||,原g2的判断会被DAX解析为account no=2 || account no=3 || (account no=5 && account group <> 20),不符合你期望的「三个账号都满足account group不等于20」的逻辑,需要调整为:
// 修正后的原有分类逻辑(仅用于生成前三个分类的计算列) Income = VAR g1 = '表名'[account number] = 3 VAR g2 = '表名'[account number] IN {2,3,5} && '表名'[account group] <> 20 VAR g3 = '表名'[account group] = 20 RETURN SWITCH( TRUE(), g1, "Group1", g2, "Group2", g3, "Group3" )
第二步:实现All costs汇总行的两种方案
方案1:用计算组实现(最优方案,无需修改原有度量值)
计算组是专门处理自定义分类汇总的DAX功能,实现步骤:
- 打开Power BI/SSAS的模型视图,新建计算组,命名为
Income分类组 - 给计算组依次添加4个计算项,表达式分别为:
- Group1:
CALCULATE(SELECTEDMEASURE(), '表名'[account number] = 3) - Group2:
CALCULATE(SELECTEDMEASURE(), '表名'[account number] IN {2,3,5} && '表名'[account group] <> 20) - Group3:
CALCULATE(SELECTEDMEASURE(), '表名'[account group] = 20) - All costs:
SELECTEDMEASURE()
- Group1:
- 将计算组的默认列(通常命名为
Name,可自行修改为Income分类)放到表格视觉对象的行维度,搭配原有Totalsum度量值即可同时显示4个分类和对应数值,All costs会自动汇总前三者的结果。
方案2:自定义分类表+适配度量值(无需使用计算组)
如果不想使用计算组,可以用独立分类表的方式实现:
- 新建一个无关联的独立表
Income分类表,仅含1列Income分类,值为Group1、Group2、Group3、All costs - 新建适配度量值:
适配后Totalsum = VAR 当前选分类 = SELECTEDVALUE('Income分类表'[Income分类]) RETURN SWITCH( TRUE(), 当前选分类 = "Group1", CALCULATE([Totalsum], '表名'[account number] = 3), 当前选分类 = "Group2", CALCULATE([Totalsum], '表名'[account number] IN {2,3,5} && '表名'[account group] <> 20), 当前选分类 = "Group3", CALCULATE([Totalsum], '表名'[account group] = 20), 当前选分类 = "All costs", [Totalsum], [Totalsum] )
- 将
Income分类表的Income分类列放到表格行维度,搭配上述适配度量值即可显示所需效果。
内容的提问来源于stack exchange,提问作者hana
相关产品推荐
相关产品推荐

