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