Power Query 第12回目。「クエリのマージ」については7回目です。
今回は、マージクエリの「右アンチ結合」(右反)についてサンプルデータを操作しながら詳しく勉強してみたいと思います。
今日は「右アンチ結合」です。マージダイアログのプルダウンでは「右反(2番目の行のみ)」となっています。それでは詳しくみていきましょう。
「左アンチ結合」の反対ということですよね。「右外部結合」のときと同じような感じになるのかなぁ。 今日もよろしくお願いしますm(__)m
【この記事でわかることは】
・「右アンチ結合」とはどんなものか、その使い方がわかります
前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ
・前回の内容は「左アンチ結合」によるマージについてです。
・「クエリのマージ」全般の概要についての記事リンクはこちらです。
記事作成にあたっては次の Microsoft office のサポートの情報などを参照しています。
・Power Query for Excel のヘルプ
・Excel の Power Query について
・マージクエリの概要
なお、この記事の画像は Microsoft 365 で取得した画像です。Excel2016 のリボンやメニューなどバージョンによって違うようなので、適宜読み替えをお願いします(^^)/
「右アンチ結合」とは
・「右アンチ結合」は「右側テーブル」の行のみで「左側テーブル」にある行は除いて表示されます。
・「マージ」ダイアログのプルダウンでは「右反(2番目の行のみ)」という表記になっています。
・この処理をイメージした図がこちらです。
・右側の重なっていない部分だけ青く塗りつぶされている状態です。
・KEYとなる照合列が合致している(重なった)部分も含め左側部分がすべて表示されません。
「右アンチ結合」でマージしてみます
今回も使用するデータは、違いが比較できるように今までと同じものを使うことにします。
・「左テーブル」は[ID][名前][販売数]のテーブルで、個人の販売数データです。
・「右テーブル」は[ID][所属店舗][販売数]という店舗別販売数データのテーブルです。
・それでは、この状態で「右アンチ結合」でマージしてみます。
「マージ」処理を実行します
・[データ]→[データの取得]→[クエリの結合]→[マージ]でマージダイアログボックス呼び出します。
対象テーブル選択・配置・列のペア選択まで
・用意できた「マージ」ダイアログボックスの画像を先にお見せします。
・それでは、順を追って説明します。
対象テーブルを配置します
・上側に「左テーブル」を選択・配置します。
・下側に「右テーブル」を選択・配置します。
「列のペア」を選択します
・[ID]列をKEYとしてマージ処理を行いたいと思います。
・「左テーブル」「右テーブル」それぞれの [ID]列 を「列のペア」として選択します。
「結合の種類」を選択します
・今回は「右反(2番目の行のみ)」を選択します。
・読み替えると、右アンチ結合(右側のテーブルの行のみ、左側テーブルにある行は除く)です。
・ダイアログ最下部には、テーブルの除外数は、「右(2番目)テーブル」の4行中3行 と表示されています。
・最後に「OK」選択でマージ結合を実行します。
マージされたテーブル列の展開
・マージ実行後、下図のように 結合後のクエリが Power Query エディター に表示されます。
・ベーステーブルには左テーブルのすべての列に加えて、新しい列 [右テーブル](テーブル名)が追加されています。[右テーブル]列には右テーブルに対応する値が行単位で格納されています。
・「左テーブル」はすべて「null」表示となっています(IDは表示されていません)。
・[右テーブル]の列見出しの をクリックすると次のような展開用のダイアログ(右図)が表示されます。
・ここで表示したい列の選択ができます。
・列名に元の列名をプレフィックスとして表示するかどうか ☑ 選択できます。
・ここではわかりやすいようにチェックして[OK]を選択します。
・すると、下図のような「右テーブル」のフィールド列がすべて展開されました。
・「右テーブル」は、ID「1004」の行のみ表示されています。
・「左テーブル」部分は不要なのでここで列削除しても良いでしょう。
・でもここでは、削除せずそのままシートに「テーブル」で表示してみます。
・「閉じて読み込む…」でシートの場所にもとのテーブル下部を選択して、テーブルで表示してみたのが下の画像です。
・「左テーブル」と合致していない「右テーブル」のID1004 だけが表示されています。
・合致していたほかの「右テーブル」の行と、「左テーブル」のすべてが表示されていません。
詳細エディターでM言語のコードを確認します
「右アンチ結合マージ」の M関数(テーブル関数)
Table.NestedJoin(左テーブル, {“ID”}, 右テーブル, {“ID“}, “右テーブル”, JoinKind.RightAnti),
・RightAnti = 右アンチ ということですね。
・アンチ【anti】 の意味は、反対・対抗などです。一致の反対だから、一致しないということですね。
「右アンチ結合」ってどんな時に使う?
・では、少し考えてみましょう。
・一例として、左側に基幹の「全顧客リスト」、右側に「月間利用顧客リスト」として「右アンチ結合」します。その結果として表示されるデータ行は、基幹の「全顧客リスト」に登録されていないデータということになります。
・こんな感じです。
「右結合」って必要なのか
・【結論から言います】私の主観ですが「右アンチ結合」と「右外部結合」は必要ない(使わない)と思います。
・【理由1】左右の設定テーブルを入れ替えれば「左結合」で同じ結果が得られます。
・【理由2】「左側テーブル」が基準なので「右結合」では結果を必ず「展開」する必要があります。
・【理由3】「右アンチ結合」の場合、「左テーブル」の列は常に表示されるので、不要列を削除する手間がかかります。対して「左アンチ」の場合は展開しなければ表示されません。
・左右のテーブルを入れ替えずに、左右結合の結果をエディター上で確認するのにはいいと思います。
・エディター上で切り替えるには「ソース」をダブルクリックして「マージ」ダイアログを表示して結合方法を変更することができます。(下の動画を参照ください)
まとめ(おわりに)
・以上で、「右アンチ結合」についての勉強は終了です。
・「右結合」の使いどころは難しく、効率的ではない気がします。
・最後に紹介したGIF画像のようにエディター上で確認するのに使うのが良いと思います。
・確認した後に「テーブル」を左右入れ替えて「左結合」するのが効率的かなと思います。
・以上、参考になったなら幸いです(^^ゞ 使ったデータは一応登録しておきます。
・今までの記事のサンプルも登録していますのでよろしければお使いください(^^)
まとめと感想など
「右アンチ結合」についての勉強でした。いかがでしたか? 「右結合」の使いどころなど少しは参考になりましたか? 次回は、概要のときに少し触れた「クロス結合」CROSS JOIN について勉強してみたいと思います(^^)/
「右アンチ結合」は左右を入れ替えて「左結合」したほうがよさそうですね。
次回もよろしくお願いします(^^)
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
【今後の記事について】
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてる」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にご期待ください(^^)/
過去記事のサンプルファイルをダウンロードできます
今回の記事でも使用したサンプルファイルをリンク先に登録しています!
過去の記事で使用したサンプルファイルもダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください
【今回わかったことは】
・「右アンチ結合」の使い方がわかりました
・「右結合」は左右の「テーブル」を入れ替えて「左結合」した方が同じ結果で効率的ということがわかりました