在DAX度量值中使用IF语句实现多条件卡路里计算
修复后的DAX卡路里度量值
你的原公式存在两个关键问题:
- 语法错误:多IF的写法不符合DAX规范,需调整为嵌套结构或使用更简洁的SWITCH函数
- 度量值逻辑错误:不能直接引用列值,必须通过迭代聚合函数(如SUMX)处理,因为度量值是基于筛选上下文计算的
以下是两种可行的正确写法:
方法1:使用SWITCH函数(推荐,可读性更强)
卡路里 = SUMX( 'Nutrition', 'Nutrition'[Grams] * SWITCH( 'Nutrition'[Macro], "Protein", 4, "Carbs", 4, "Fat", 9, 0 // 处理匹配不到的异常值,可按需调整默认值 ) )
方法2:使用嵌套IF函数
卡路里 = SUMX( 'Nutrition', 'Nutrition'[Grams] * IF( 'Nutrition'[Macro] = "Protein", 4, IF( 'Nutrition'[Macro] = "Carbs", 4, IF( 'Nutrition'[Macro] = "Fat", 9, 0 ) ) ) )
关键说明:
SUMX的作用是逐行遍历Nutrition表,判断每行的Macro类型、计算对应卡路里后再求和,完全适配度量值的上下文计算逻辑- 末尾的
0用于处理Macro列出现非指定值的情况,可根据实际业务需求修改为其他默认值或移除(保留更稳妥)
内容的提问来源于stack exchange,提问作者DavidCHughes
相关产品推荐
相关产品推荐

