Power Query 第13回目。「クエリのマージ」については8回目です。
今回は、マージクエリの「クロス結合」(Cross Join)についてサンプルデータを操作しながら詳しく勉強してみたいと思います。
今日は「クロス結合」(Cross Join)です。マージダイアログのプルダウンには設定がありません。Cross Join については マージクエリの概要の際に少しだけ触れていますが覚えていますか? それでは詳しくみていきましょう。
全然覚えていません(^^ゞ 「クロス結合」って名前から判断すると左右の「テーブル」をクロスして結合するんでしょうか? イメージがつかめません!
今日もよろしくお願いしますm(__)m
【この記事でわかることは】
・「クロス結合」(Cross Join)とはどんなものかがわかります
・「クロス結合」(Cross Join)のやり方がわかります
前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ
・前回の内容は「右アンチ結合」によるマージについてです。
・「クエリのマージ」全般の概要についての記事リンクはこちらです。
記事作成にあたっては次の Microsoft office のサポートの情報などを参照しています。
・Power Query for Excel のヘルプ
・Excel の Power Query について
・マージクエリの概要
なお、この記事の画像は Microsoft 365 で取得した画像です。Excel2016 のリボンやメニューなどバージョンによって違うようなので、適宜読み替えをお願いします(^^)/
「クロス結合」とは
・「クロス結合」は、結合のテーブルから行のデカルト積(Cartesian Product)を返す結合の一種ということらしいです。「直積」とも言うようです。
・デカルト積とは、クエリで指定する二つのテーブルがリレーションシップを制限する条件を持たないときに生じます。この制限がないと、二つのテーブルを結合することで一つのテーブルの各行が、もう一つのテーブルの全ての行とペアになってしまうということです。
・この処理をイメージした図がこちらです。
・左右の「テーブル」列のデータ同士で結びつくものは一つもありません。
・しかし、左右の「テーブル」の各行が相互に連携して、ぐちゃぐちゃになっている状態ですね。
・「左テーブル」×「右テーブル」= ここでは「16」行のクエリができるということになります。
・結合後の「テーブル」が次の画像です。
「クロス結合」のやり方
今回使用するテーブルのデータは、上でも使った簡単な次の二つを使います。
・それぞれ[データの取得と変換]→[テーブルまたは範囲から]で、クエリを作成します。
・各「テーブル」はこの状態では列のデータを照合することができません。
・「あいまい検索」で「しきい値」を「0.00」にしてもダメだったので、Microsoft Docs で紹介されている「カスタム列」を使う方法を参考にして「クロス結合」してみます。
「クロス結合」を実行してみます
・まず最初のテーブル「左テーブル」を Power Query エディターで開きます。
「カスタム列」を追加します
・リボンの [列の追加] タブで、[カスタム列] を選択します。
・「カスタム列」ダイアログボックスが表示されます。
・[使用できる列]には左テーブルだけが表示されています。でも結合したいのは「右テーブル」です。
・「カスタム列の式」横のマークにマウスを乗せると、Ctrl + Space でその他の式の提案を表示できるようですのでやってみましょう。
・一番下に「右テーブル」を発見しました!
・「 = 右テーブル 」と手入力しても OK ですね!
・最後に「OK」ボタンクリックで、「カスタム列」が追加されました。
「カスタム列」を展開します
・では、次は「カスタム列」を展開します。次の動画を参照してください。
・列名の重複はないので、元の列名はプレフィックスしないように ☑ を □ 外して展開しました。
・「左テーブル」×「右テーブル」=「16」行の「クロス結合」クエリができるあがりました。
詳細エディターでM言語のコードを確認してみます
・ M言語のコード の中に SQL や DAX の関数「CrossJoin」に類する関数は存在しません。
・単純に「カスタム列」を追加して、カスタム列の式に(ここでは)「右テーブル」を充てて展開しているだけですね。
・これだけで、すべての可能な組み合わせを使用して「クロス結合」されたテーブルを作成することができちゃうんですね。
「クロス結合」ってどんな時に使う?
・では、使用するケースを少し考えてみましょう。
・うーーーん(^^; Power Query 自体が初心者レベルなので「クロス結合」を実務で直接使用する場面が思いつきません。
・何万行もあるExcelデータに組み合わせデータを追加する場合には、Power Query に読み込んで「クロス結合」後に Excel に戻せばすごく楽なのかなくらいしか思いつかないです。同じことをExcel VBAで処理するより断然早いと思います。
・もっと Power Query の使いこなしレベルが上がってきて、活用方法を思いついたら追記するようにしたいと思います。
まとめ(おわりに)
・以上で、「クロス結合」についての勉強は終了です。
・「クロス結合」は、結合するテーブル同士の全ての組み合わせデータを取得する結合でした。
・以上、参考になったなら幸いです(^^ゞ 使ったデータは一応登録しておきます。
・今までの記事のサンプルも登録していますのでよろしければお使いください(^^)
まとめと感想など
「クロス結合」についての勉強でした。いかがでしたか? SQLでは「クロス結合」は他の結合処理の基本となる操作だそうです。クロス結合後、条件に一致するデータを抽出するというイメージでコードを書くらしいです。
今回で「マージ」についての勉強は一区切りとします。次回以降も Power Query の勉強を継続していきます。楽しみに待っていてね(^^)/
「クロス結合」は、マージのダイアログボックスを使うほかの「マージ」処理とはやり方が違ったのでちょっと戸惑いました。でも意外と簡単でした。もし失敗しても「ステップ」を削除してもとに戻せばやり直せるので Power Query が好きになりました(^^ゞ
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
【今後の記事について】
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてる」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にご期待ください(^^)/
過去記事のサンプルファイルをダウンロードできます
今回の記事でも使用したサンプルファイルをリンク先に登録しています!
過去の記事で使用したサンプルファイルもダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください
【今回わかったことは】
・「クロス結合」とはどんなものかがわかりました
・「クロス結合」のやり方がわかりました