DAX中IF函数模糊匹配失效问题求助
问题分析与解决方案
嘿,我立刻就发现你遇到的问题根源了——DAX里的普通相等运算符=是精确匹配,它完全不认识你用的*通配符!你想实现的“包含指定文本就匹配”,得用专门的文本搜索函数才行。
先拆解你原公式里的几个小问题:
- 通配符
*不能直接跟=一起用,DAX不支持这种用法 - 最后面的
(na)应该是DAX的内置函数NA(),少了括号和大写 - 虽然
and()写法没问题,但DAX里更常用的是用&&逻辑运算符替代,可读性更强
修正后的DAX公式(两种可选写法)
写法1:用SEARCH函数(支持不区分大小写搜索)
SEARCH函数会查找指定文本在目标字符串中的位置,如果找不到就返回0,我们可以利用这一点判断是否包含:
IF( SEARCH("titan tidge", [product_code_name],, 0) > 0 && SEARCH("BURN-in", [task_name],, 0) = 0, "CMT 263", NA() )
- 第三个参数留空表示从第一个字符开始搜索
- 第四个参数
0表示找不到时返回0(默认是错误值,所以我们指定返回0避免报错) SEARCH默认不区分大小写,刚好匹配你示例里的大写TITAN TIDGE
写法2:用CONTAINSSTRING函数(更直观的布尔判断)
如果觉得SEARCH的返回值判断有点绕,可以用CONTAINSSTRING,它直接返回布尔值(包含就返回TRUE,不包含返回FALSE):
IF( CONTAINSSTRING([product_code_name], "titan tidge") && NOT(CONTAINSSTRING([task_name], "BURN-in")), "CMT 263", NA() )
这个写法更贴近你原本的逻辑思路,可读性更高,推荐优先使用。
为什么原公式始终返回FALSE?
因为你用[product_code_name] = "*titan tidge*"时,DAX会把*titan tidge*当成精确的字符串内容去匹配,而你的单元格数据是TITAN TIDGE HOST DP,完全不等于带星号的这个字符串,所以这个条件永远是FALSE,自然整个IF就返回NA()了。
内容的提问来源于stack exchange,提问作者Avi22
相关产品推荐
相关产品推荐

