一位朋友在群里问,PowerQuery 不包含筛选在判断空值的时候是不是有 bug
聊天记录
用两行数据模拟一下这个问题
现在我们对 value 列设置一个筛选条件,不包含 q,看看返回什么结果
最终结果,只返回了一行,空值被排除了。
难道空值里藏了 q?显然不可能
搜索条件换成包含 q 再试试,这回结果正确了。
实际上,带”不”的筛选条件中,凡是用函数表达式进行判断的,空值都被排除了。(”不等于”用的是逻辑判断符)
为什么会出现这种情况,我们回来看一下这些函数的怎么定义的
Text.StartsWith(string as nullable text, substring as text, optional comparer as nullable function) as nullable logical
Text.Contains(string as nullable text, substring as text, optional comparer as nullable function) as nullable logical
最后都有一句 as nullable logical ,说明他们都可以返回空值。当输入空值的时候,这些函数也返回空值。新建一列模拟这个过程,可以看到 null 依然返回 null,而只有 True 才会被保留,这就解释了最终的结果。
所以,当你要在包含空值的文本列使用带不的筛选时,要么先将 null 替换为””,要么把判断逻辑修改为
each (not Text.Contains([value], “q”)) or [value] is null)
说点什么