Excel Power Query マージ【左アンチ結合】とは

Power Query 第11回目。「クエリのマージ」については6回目です。
今回は、マージクエリの「左アンチ結合」(左反)についてサンプルデータを操作しながら詳しく勉強してみたいと思います。

くるみこ
くるみこ

今日は「左アンチ結合」について勉強をしましょう。マージダイアログのプルダウンでは「左反(最初の行のみ)」となっています。それでは詳しくみていきましょう。

「アンチ」というのがどんなものかすごく気になります。
よろしくお願いしますm(__)m

【この記事でわかることは】
・「左アンチ結合」とはどんなものか、その使い方がわかります

前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ

・前回の内容は「内部結合」によるマージについてです。
「クエリのマージ」全般の概要についての記事リンクはこちらです。

記事作成にあたっては次の Microsoft office のサポートの情報などを参照しています。
Power Query for Excel のヘルプ
Excel の Power Query について
マージクエリの概要

なお、この記事の画像は Microsoft 365 で取得した画像です。Excel2016 のリボンやメニューなどバージョンによって違うようなので、適宜読み替えをお願いします(^^)/

「左アンチ結合」とは

「左アンチ結合」は「左側テーブル」の行のみで「右側テーブル」にある行は除いて表示されます。
・「マージ」ダイアログのプルダウンでは「左反(最初の行のみ)」という表記になっています。
・この処理をイメージした図がこちらです。

・左側の重なっていない部分だけ青く塗りつぶされている状態です。
KEYとなる照合列が合致している(重なった)部分も含め右側部分がすべて表示されません。

「左アンチ結合」でマージしてみます

今回も使用するデータは、違いが比較できるように今までと同じものを使うことにします。

・「左テーブル」は[ID][名前][販売数]のテーブルで、個人の販売数データです。
・「右テーブル」は[ID][所属店舗][販売数]という店舗別販売数データのテーブルです。

・それでは、この状態で「左アンチ結合」でマージしてみます。

「マージ」処理を実行します

・[データ]→[データの取得]→[クエリの結合]→[マージ]でマージダイアログボックス呼び出します。

対象テーブル選択・配置・列のペア選択まで

・用意できた「マージ」ダイアログボックスの画像を先にお見せします。

・それでは、順を追って説明します。

対象テーブルを配置します

・上側に「左テーブル」を選択・配置します。
・下側に「右テーブル」を選択・配置します。

「列のペア」を選択します

・[ID]列をKEYとしてマージ処理を行いたいと思います。
・「左テーブル」「右テーブル」それぞれの [ID]列 を「列のペア」として選択します。

「結合の種類」を選択します

・今回は「左反(最初の行のみ)」を選択します。
・読み替えると、左アンチ結合(左側のテーブルの行のみ、右側テーブルにある行は除く)です。

・ダイアログ最下部には、テーブルの除外数は、「左テーブル」の4行中3行 と表示されています。

・最後に「OK」選択でマージ結合を実行します。

マージされたテーブル列の展開

・マージ実行後、下図のように 結合後のクエリが Power Query エディター に表示されます。
・ベーステーブルには左テーブルのすべての列に加えて、新しい列 [右テーブル](テーブル名)が追加されています。[右テーブル]列には右テーブルに対応する値が行単位で格納されています。

「左テーブル」の ID「1003」の行だけが表示されています。

・[右テーブル]の列見出しの をクリックすると次のような展開用のダイアログ(右図)が表示されます。

・ここで表示したい列の選択ができます。

・列名に元の列名をプレフィックスとして表示するかどうか ☑ 選択できます。

・ここではわかりやすいようにチェックして[OK]を選択します。


・すると、下図のような「右テーブル」のフィールド列がすべて展開されました。

「右テーブル」は、全部「null」表示です。これは展開する必要はないということですね!

「適用したステップ」に表示されている「展開された右テーブル」左側の ✘ をクリックしてステップを削除しちゃいましょう。

・「閉じて読み込む…」でシートの場所にもとのテーブル下部を選択して、テーブルで表示してみたのが下の画像です。

確かに「左テーブル」のID1003 だけが「右テーブル」と合致していません。
・合致していたほかの「左テーブル」の行と、「右テーブル」のすべてが表示されていません。

詳細エディターでM言語のコードを確認します

・今回は「右テーブル」を展開していないので、「展開ステップ」はありません。

「左アンチ結合マージ」の M関数(テーブル関数)

Table.NestedJoin(左テーブル, {“ID”}, 右テーブル, {“ID“}, “右テーブル”, JoinKind.LeftAnti),

LeftAnti = 左アンチ ということですね。アンチって何?

・アンチ【anti】 の意味は、反対・対抗などです。一致の反対だから、一致しないかな。

「左アンチ結合」ってどんな時に使うの?

・いったいどんなところで使うんだろう? 考えてみましょう。

・例えば、二つ(XとY)のプロジェクトがあって、それぞれの参加者リストから「Xプロジェクト」だけに参加しているリストを抽出する場合に使えそうです。

・左側に「全顧客リスト」右側に「月間利用顧客リスト」とすれば、当月利用のなかった顧客が取り出せますね。抽出できたリストに対して販促を打つなどに使えそうです。

・いろいろ工夫してみればすれば使えそうです。


スポンサーリンク

まとめ(おわりに)

・以上で、「左アンチ結合」についての勉強は終了です。

・使いどころによっては活躍するかもしれませんね。

・参考になったなら幸いです(^^ゞ 使ったデータは一応登録しておきます。

今までの記事のサンプルも登録していますのでよろしければお使いください(^^)

まとめと感想など

くるみこ
くるみこ

「左アンチ結合」についての勉強でした。いかがでしたか?

次回は「右アンチ結合」について勉強します(^^)/

「左アンチ結合」使えそうな気がしなかったんですが、よく考えれば使える場面はあるんだということがわかりました。次回もよろしくお願いします(^^)

【今回わかったことは】
・「左アンチ結合」の使い方がわかりました
・「左アンチ結合」の使いどころの例がわかりました

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

【今後の記事について】

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてる」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にご期待ください(^^)/

過去記事のサンプルファイルをダウンロードできます

今回の記事でも使用したサンプルファイルを登録しています
過去の記事で使用したサンプルファイルもダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください