2017-03-07 92 views
1

通过使用Power Query,我从地址字段中创建了一个地址列表, 15000个独立的excel文件。“不包含”文本过滤器过滤器太多

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

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

当我第一次使用“包含”“富”文本过滤器返回的150行

但列表时,我使用了“无法加含有”“富”内容过滤器,而不是名单被缩短只有3218行。

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

如果我还记得我的数学课正确15143-150 = 14993,而不是3218

这是推动我疯了!

难道我做错事或者是全能微软的Bug已经打我,再一次?

+1

我敢打赌,你过滤柱有很多的空白,并且“不包含”过滤器排除这些。你可以做标识(C:C,“”)(或者你的列是什么),看看有多少个单元格是空白的? –

+0

谢谢@WillJobs!你真是太棒了! 11775的细胞是空白的! – MrDark

+0

我首先提取使用PQ列表并将其保存为一个单独的excel文件解决了这个问题。然后,我将该文件作为PQ数据源添加到新文档中,并从那里进行了其余的过滤和处理。然后,我能够做到所需的“不包含”过滤没有问题。你知道为什么工作时,它在第一种方式没有工作? @WillJobs? – MrDark

回答

1

此行为与为空预期的SQL逻辑:如果行字段为空,它不包含“富”,但它也不会不包含“富”。换言之,WHERE过滤器会跳过评估为空的行,并且not null也为空。

您可以在电源查询看到:

let 
    Source = Table.FromColumns({{null, "foo", "bar"}}), 
    FilteredRows = Table.SelectRows(Source, each 
     not Text.Contains([Column1], "foo") or Text.Contains([Column1], "foo")) 
in 
    FilteredRows 

...只是返回的最后两行。

在电源查询,如果你想避免这种离奇的一种逻辑的,你可以用空字符串替换空,然后你会得到更好的行为:

= Table.ReplaceValue(Source,null,"",Replacer.ReplaceValue,{"Column1"}) 
+0

有道理!感谢@carl为你解释这个看似奇怪的行为。 – MrDark