“不包含”文本过滤器过滤器过多

时间:2017-03-07 22:58:44

标签: excel powerquery

通过使用Power Query,我从大约的地址字段创建了一个地址列表。 15000个单独的Excel文件。

我现在有一个包含15143行的列表,但是我遇到了“不包含”文本过滤器的问题。

我希望在特定列中保留不包含搜索字词“foo”的行。

当我第一次使用“Contains”“foo”文本过滤器时,它返回一个150行的列表

但是当我使用“包含”“foo”文本过滤器时,列表缩短为只有3218行。

有点出乎意料的结果......

如果我正确地回忆起我的数学课程15143-150 = 14993,而不是3218。

这让我疯了!

我做错了什么,或者是再一次击中我的全能微软Bug?

1 个答案:

答案 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"})