DAX多IF语句问题求助:公式全部返回Main Plant
DAX公式错误排查与修正
问题根源
你的公式逻辑运算符使用错误。DAX中,||(OR)两侧必须是完整的布尔判断表达式,不能直接写字符串值。单独的非空字符串(比如"201")会被DAX解析为TRUE,导致第一个IF条件[Department] = "200" || "201" || ...等价于([Department] = "200") || TRUE || TRUE || ...,结果永远为TRUE,所以所有行都会返回"Main Plant"。
修正方案
方案1:补全完整的OR判断表达式
把每个OR分支都写成[Department] = "XXX"的形式:
Shop v2 = IF( [Department] = "200" || [Department] = "201" || [Department] = "202" || [Department] = "203" || [Department] = "205" || [Department] = "206" || [Department] = "207", "Main Plant", IF( [Department] = "250" || [Department] = "254", "Mt. Athos Plant", IF( [Department] = "300" || [Department] = "301" || [Department] = "302" || [Department] = "303" || [Department] = "305" || [Department] = "306" || [Department] = "307", "South Plant", IF( MID(TRIM([Account]),4,3) = "600" || MID(TRIM([Account]),4,3) = "601" || MID(TRIM([Account]),4,3) = "602" || MID(TRIM([Account]),4,3) = "603" || MID(TRIM([Account]),4,3) = "604" || MID(TRIM([Account]),4,3) = "605" || MID(TRIM([Account]),4,3) = "606" || MID(TRIM([Account]),4,3) = "607", "Rock Hill Plant", "Not Available" ) ) ) )
方案2:使用IN函数简化逻辑(推荐)
DAX的IN函数可以直接判断值是否在指定列表中,代码更简洁易读:
Shop v2 = IF( [Department] IN {"200","201","202","203","205","206","207"}, "Main Plant", IF( [Department] IN {"250","254"}, "Mt. Athos Plant", IF( [Department] IN {"300","301","302","303","305","306","307"}, "South Plant", IF( MID(TRIM([Account]),4,3) IN {"600","601","602","603","604","605","606","607"}, "Rock Hill Plant", "Not Available" ) ) ) )
额外优化建议
如果判断逻辑后续可能调整,建议创建一个映射表(比如包含Department/AccountSegment和PlantName的表),然后用LOOKUPVALUE或关系匹配来获取工厂名称,比嵌套IF更易维护。
内容的提问来源于stack exchange,提问作者SneakyKeys1025
相关产品推荐
相关产品推荐

