2017-03-07 7 views
1

パワークエリーを使用すると、アドレスフィールドからアドレスリストを作成しました。 15000個の個人ファイルがあります。"含まれていない"テキストフィルタが多すぎます

私は今15143行のリストを持っていますが、 "Does Not Contain"というテキストフィルタに問題があります。

特定の列に検索語 "foo"が含まれていない行を保持したいと考えています。

私が最初に「入って」「foo」というテキストは、それが150行

のリストを返すフィルターしかし、私は使用している場合、「は、リストを短くする代わりに」「foo」というテキストフィルタが含まれていない使用わずか3218行になります。

ビット予期しない結果...

私がいない3218

、正しく= 14993 15143から150を私の数学の授業を思い出した場合はこれが私にナットを運転しています!

私は何か間違っているのですか、それとももう一度私を襲った全能のMicrosoftバグですか?

+1

私の賭けは、あなたがフィルタリングしているカラムがたくさんあるということです空白の "除外"フィルタは除外しています。空白になっているセルの数を確認するには、countifs(C:C、 "")(またはあなたの列が何であれ)を行うことができますか? –

+0

ありがとう@WillJobs!あなたは上にいた! 11775のセルが空白だった! – MrDark

+0

私はまずPQを使ってリストを抽出し、それを別のExcelファイルとして保存して問題を解決しました。次に、ファイルを新しい文書にPQデータソースとして追加し、残りのフィルタリングと処理をそこから行いました。それから、問題なく「希望しない」フィルタリングを実行することができました。最初の方法でうまくいかなかったときにそれがなぜ機能するのか分かりますか? @WillJobs? – MrDark

答えて

1

この動作は、nullのための予想されるSQLロジックに関連しています。行フィールドがnullの場合、 "foo"は含まれませんが、 "foo"も含まれません。言い換えれば、WHEREフィルタはNULLに評価される行をスキップし、not nullも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 

...唯一の最後の2行を返します。

パワークエリで

あなたがロジックのこの奇妙な種類を避けたい場合は、空の文字列とnullを置き換えることができ、その後、あなたはよりよい動作を取得:

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

を使用することもできます。この一見奇妙な挙動のあなたの説明のために@ carlに感謝します。 – MrDark

関連する問題