通过使用Power Query,我从大约的地址字段创建了一个地址列表。 15000个单独的Excel文件。
我现在有一个包含15143行的列表,但是我遇到了“不包含”文本过滤器的问题。
我希望在特定列中保留不包含搜索字词“foo”的行。
当我第一次使用“Contains”“foo”文本过滤器时,它返回一个150行的列表
但是当我使用“不包含”“foo”文本过滤器时,列表缩短为只有3218行。
有点出乎意料的结果......
如果我正确地回忆起我的数学课程15143-150 = 14993,而不是3218。
这让我疯了!
我做错了什么,或者是再一次击中我的全能微软Bug?
答案 0 :(得分:1)
此行为与null的预期Sql逻辑有关:如果行字段为null,则它不包含" foo"但它也不包含" foo"。换句话说,WHERE过滤器会跳过评估为null的行,not null
也为空。
您可以在Power Query中看到:
let
Source = Table.FromColumns({{null, "foo", "bar"}}),
FilteredRows = Table.SelectRows(Source, each
not Text.Contains([Column1], "foo") or Text.Contains([Column1], "foo"))
in
FilteredRows
...仅返回最后两行。
在Power Query中,如果你想避免这种奇怪的逻辑,你可以用空字符串替换null然后你得到更好的行为:
= Table.ReplaceValue(Source,null,"",Replacer.ReplaceValue,{"Column1"})