Power Query|オートフィルターを使わないデータのフィルター処理方法

Power Query

データをフィルターするというと、やり方はオートフィルターと思う方もいるかと思いますが、手段を問わず結果としてフィルターする方法はいくつかありますので、ご紹介します。

この記事はダレ得?
  • Excelワークでフィルターを使っている方
  • フィルター方法をオートフィルターしか知らない方
  • フィルターを動的に行いたい方

コンテンツ

  • リストでフィルター
  • Joinを使ったフィルター

リストでフィルター

これはGUIでは実装ができず、クエリを記述することが求められます。
あらかじめ用意したリストの値に一致するレコードだけにフィルターすると言ったことができます。

リストって何?という方はこちらをご参照ください。

リストを使ったフィルターの具体的なやり方を、非常に単純な例で説明していきます。

営業担当者の売り上げが入力されたデータがあるとして、この中からAさんとBさんの売り上げにフィルターしたい場合を考えます。

この場合、作業として上述の”条件でフィルター”する方が早いと思いますが、リストで管理する対象が増減する場合は、リストの編集を通してフィルターが動的に変わる方が効率が上がることは想像ができるかと思います。

今回、AさんとBさんの売り上げにフィルターするので、AさんとBさんをリストとして用意します。

上述の表を”営業売り上げ”テーブルとして、リストとして用意する内容(Aさん、Bさん)を”対象者”テーブルとして取り込み、”対象者”テーブルはリスト化します。

するとPower Queryエディター上では以下のように表示されるかと思います。

次に”営業売り上げ”テーブルの営業担当者をオートフィルタで”Aさん”のみにフィルターします。

クエリの内容を書き換えます。
数式バーを見ると、このように記述されています。
= Table.SelectRows(変更された型, each ([営業担当者] = “Aさん”))

この後半部分の ([営業担当者] = “Aさん”) を List.Contains(対象者,[営業担当者]) と書き換えます。
以上で、目的のAさんとBさんの売り上げのみにフィルターしたテーブルを取得できます。

考え方として、 ”営業担当者”列で”Aさん”であるもの を “営業担当者”列で対象者を含む(List.Contains)もの に書き換えたということをイメージいただくと、ほかでも応用が利かすことができると思います。

ただし、取り扱うにデータ量が多くなると処理スピードが遅いように感じます。
その場合は次にご紹介するJoinを使った方法が良いかと思います。

Joinを使ったフィルター

クエリのマージを使います。
これが一番、高速で手っ取り早いフィルター方法かと思います。

リストによるフィルタではリストを使いましたが、ここではすべてテーブルを使用します。
ここでも前出の例と同じ例を使ってご説明します。前出の例と異なる部分は”対象者”をリストではなくテーブルで用意していることです。

早速、具体的なやり方をご説明していきます。

”営業売り上げ”を選択(①)し、”ホーム”タブ(②)から”クエリのマージ”をクリック(③)します。

”マージ”という画面が立ち上がりますので、マージするテーブルとして”対象者”を選択(④)し、照合列として、”営業売り上げ”テーブルの”営業担当者”、”対象者”テーブルの”対象者”をクリック(⑤)します。
最後に結合の種類で”右外部”を選択(⑥)し、OKをクリック(⑦)して、作業終了です。
※ここの使い方は使い倒していくと理解できると思うので、ここでは詳細を割愛します。

結果としては以下のようになります。
AさんとBさんのみ売り上げにフィルターできています。
なお、対象者という列が追加になっていますが、Tableの状態で結合されている状態であるため、展開しない限り”営業売り上げ”テーブルの列として表示されることはありません。

コメント

タイトルとURLをコピーしました