Power Query エディターでテーブルにフィルターを適用するときは、その条件をみっちり確認したほうがよいですよ


テーブルの行に対してフィルタリングをするとき、Excel ワークシート上の操作では気にすることはほぼ皆無なのだけど Power Query エディターの同じような操作ではそうでなかったりするのですよ。

どういうことか

テーブルに対しこのあと必要な行だけを抽出したい。

"A" と "B" と "C" だけを仲間にしたいのでそれらを選ぶ操作をした。

よしよし。

ソーステーブルにあらたな行"F"が現れた。

"F" も仲間に加わった。

なぜなのか

"選択"と"除外"という認識がなされていて、効率が良い方をPower Query エディターが決定している

しきい値は 50%

選択されているアイテム数が半数以下の場合は選択

選択(AかB)
let
    Source = #table(type table [Column1 = text],List.Transform({"A".."E"}, each {_})),
    FilteredRows = Table.SelectRows(
        Source,
        each (
               [Column1] = "A"
            or [Column1] = "B"
        )
    )
in
    FilteredRows

選択されているアイテム数が半数を超える場合は除外

除外(D,Eではない)
let
    Source = #table(type table [Column1 = text],List.Transform({"A".."E"}, each {_})),
    FilteredRows = Table.SelectRows(
        Source,
        each (
                [Column1] <> "D"
            and [Column1] <> "E"
        )
    )
in
    FilteredRows

Table.SelectRows
Table.SelectRows( table as table, condition as function ) as table
条件関数を満たす行を選択します。
選択 condition と一致する行のテーブルを table から返します。
Returns a table of rows from the table, that matches the selection condition.

条件関数 condition が変わるのです。

思ったこと🙄

Excel ワークシートのノリで作業をしたらだめですよ、という話。Power Query はあらかじめ全容を確認できるデータだけを扱うものではないので、得たい結果がどうあるべきなのかきちんと考えながらかな。
ほかにも Power Query エディターには 200 とか 1000 とかしきい値があるのでよーく観察して。

その他

おまけ

選択したいアイテム数が多くて Table.SelectRows の condition がとても長くなる時どうしたらよいのか。
List.Contains とか使うとよい。

List.Containsでおまとめ
let
    Source = #table(type table [Column1 = text],List.Transform({"A".."E"}, each {_})),
    FilteredRows = Table.SelectRows(
        Source,
        each List.Contains({"A", "B", "C"}, [Column1])
        // each (
        //        [Column1] = "A"
        //     or [Column1] = "B"
        //     or [Column1] = "C"
        // )
    )
in
    FilteredRows