如何将DAX中三个独立列的IF语句嵌套到同一列?
整合DAX计算列逻辑的实现方案
当然可以通过嵌套IF语句把这三个独立计算列的逻辑整合到同一列中,甚至用SWITCH函数实现会让代码可读性更强、更易维护。
嵌套IF版本
直接把三个逻辑按顺序嵌套,逐层判断measure_check_type的取值,匹配对应条件后执行内部判断:
Combined_Column = IF( RELATED(dim_verification_measure5[measure_check_type]) = "min", IF([measure_value] < RELATED(dim_verification_measure5[measure_target_value_min]), 20, 10), IF( RELATED(dim_verification_measure5[measure_check_type]) = "max", IF([measure_value] > RELATED(dim_verification_measure5[measure_target_value_min]), 20, 10), IF( RELATED(dim_verification_measure5[measure_check_type]) = "between", IF([measure_value] > RELATED(dim_verification_measure5[measure_target_value_min]) && [measure_value] < RELATED(dim_verification_measure5[measure_target_value_max]), 20, 10), BLANK() // 可根据需求修改未定义类型的返回值,比如返回10或其他 ) ) )
SWITCH版本(推荐)
当存在多条件分支时,SWITCH比多层嵌套IF结构更清晰,后续新增校验类型也更容易扩展:
Combined_Column = SWITCH( RELATED(dim_verification_measure5[measure_check_type]), "min", IF([measure_value] < RELATED(dim_verification_measure5[measure_target_value_min]), 20, 10), "max", IF([measure_value] > RELATED(dim_verification_measure5[measure_target_value_min]), 20, 10), "between", IF([measure_value] > RELATED(dim_verification_measure5[measure_target_value_min]) && [measure_value] < RELATED(dim_verification_measure5[measure_target_value_max]), 20, 10), BLANK() // 处理未匹配到的校验类型,可自定义返回值 )
注意事项
- 完全保留了你原代码中的所有判断逻辑,包括
max类型校验时使用measure_target_value_min的设定(若此处是笔误,可自行替换为measure_target_value_max) - 末尾的
BLANK()是处理未定义的measure_check_type场景,可根据实际需求改为固定值(比如10)或其他逻辑
内容的提问来源于stack exchange,提问作者stuart
相关产品推荐
相关产品推荐

