[Power BI Tips] Power BI のクエリのマージとは？～いわゆる Join について～

# ふと思い立って...
ちょっとした **Tips** を書くことにしました。いろいろと理由があって Tips はこれまであまり書いてこなかったのですが、やっぱり必要かなーと思い、ちょっと書いてみようと思いました。

# 今回の記事のキッカケは
Twitter のタイムラインで流れてきたこの記事です

Tableau Prepのライセンス体系と6つの機能を早わかり！
https://data-viz-lab.com/tableauprep-hayawakari

**Tableau** はまるで触ったことがないのですが、よく「**Power BI** と **Tableau** って何が違うんですか？」と聞かれるので、ちょっと知らなきゃマズイかなーって思い始めたところです。なので、グッドタイミングな記事でした。

さて、この記事の中の **Tabuleau Prep** の機能が紹介されているのですが **４ー３ー２　ジョイン** という箇所で、**SQ**L で言うところの**内部結合／外部結合**を取り扱っていたので、同じことを **Power BI Desktop** の **Power Query エディター**でやってみた、というわけです。

**Power BI Desktop** は **BI** で言うところの **Data Prep** 機能を **Power Query** という立派な一つの関数型言語で実現しているのですが、これは言語を書かなくても、マウス操作のみで、データの前処理や整形が非常に高度に行えるものです。余談ですが **Power Query** は **Power BI Desktop** だけのものではなく、**Excel** の **[取得と変換]**、**Azure Data Factory**、**Power Platform dataflows**、**Power BI dataflows**、**Power Automate** の一部のコネクタなど、様々なところで動作します。

# それでは本題
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/04608174-7833-1fce-7f20-e4333e2f3aa3.png)
**Excel** でこんなデータを用意します。左が **[ユーザー]** テーブル、右が **[部署]** テーブルですね。これら２つを結合して、ユーザー名単位のデータに部署名を持たせる。**SQL** でもよくやる処理です。**Excel** で **vlookup** を使ってやる人もいるでしょう。

**Power BI Desktop** ではこの結合を **[クエリのマージ]** という名称で機能として持っています。

今回のタイトルはそういうわけで**「クエリのマージとは？」**になっているわけです。最近出てきた新しい機能、というわけではありません。すんげー昔からあります。
ただただ私が書きたくなったので、この記事を書いています。ご了承ください。

## まずは Excel をダウンロード
以下から **Excel** ファイルをダウンロードしてください
[Excel ファイルのダウンロードはこちら](https://powerbistudy01.blob.core.windows.net/file/Qiita_%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E3%83%9E%E3%83%BC%E3%82%B8.xlsx)

次に以下から **Power BI** テンプレートファイルをダウンロードしてください
[Power BI テンプレートファイル(pbit)](https://powerbistudy01.blob.core.windows.net/file/Qiita_%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E3%83%9E%E3%83%BC%E3%82%B8.pbit)

**pbit** ファイルを開いて、**Excel** ファイルのパスを指定すると今回の記事の完成形ができちゃいますので、オススメは **Excel** ファイルのみダウンロードして、以下の操作を一緒にやってみてください。

## 次に Power BI Desktop でダウンロードした Excel ファイルを読み込んでください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d820e4a9-fcdd-582f-4b19-1a169b5d7581.png)
上記の画面通り、リボンから **Excel** アイコンを選択して、**Excel** ファイルを選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/e65127b2-7fb6-589d-9269-4de2e3db24f9.png)
左側で **[ユーザー]** と **[部署]** にチェックを入れて、右下の **[データの変換]** をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d8dd6f63-477e-f087-9a1a-93e99a64bcfd.png)
はい、ここまでで **Excel** を読み込み、**Power Query** エディターが起動するところまでできました

## 6種類のクエリのマージを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d40126f7-99d3-800a-7af8-841240c5a465.png)
**[クエリのマージ]** は **Power Query エディター** の右上にあります。クリックするとドロップダウンが開き、

- クエリのマージ
- 新規としてクエリをマージ

の2つが表示されます。今回はすべて **[新規としてクエリをマージ]** を選択します。
これら2つの違いは、現在選択しているクエリに結合するのか、完全に別クエリとして作るのか、の違いです。気になる方は試しにクリックしてみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/91a7308e-60fe-2a92-e547-87f4d3fc5345.png)
マージの画面の説明です。
上に**「最初のテーブル」**があり、下に**「2番目のテーブル」**の欄があります。
以降、画面の選択肢で **"最初"** と出てきたらこの最初のテーブル、**"2番目"** と出てきたら2番目のテーブルのことです。
また、

- 最初テーブル＝左
- 2番目のテーブル＝右

を意味します。

1. 最初のテーブルを選択（今回は **[ユーザー]** ）
1. 紐付けるための列を選択（今回は **[部署ID]** ）

次に **[結合の種類]** を見てみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/48adc4f0-52e8-859b-6eec-374d770af11e.png)
結合の種類は全部で 6 種類あります。

- 左外部（最初の行のすべて、および2番目の行のうち一致するもの）
- 右外部（2番目の行すべて、および最初の行のうち一致するもの）
- 完全外部（両方の行すべて）
- 内部（一致する行のみ）
- 左反（最初の行のみ）
- 右反（2番目の行のみ）

冒頭に紹介した **Tableau** の記事と比較すると、**Tableau** はこれ以外に**「不一致のみ」**というのがあるそうです。それぞれのテーブルが持っているもののみを残すということです。内部の反対ということになります。

（心の声：「ぐぬぬぬぬ、それはちょっと欲しいぞ、**Power BI** さんよ…」）

先ほどのマージの画面の状態からそのまま **[OK]** をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/45ea364d-c9c1-5a5a-369d-9957d9489283.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/927022ad-6775-4947-03f0-fdb522e62345.png)
次に **[部署]** の右側の展開ボタンをクリックし、画面の状態で **[OK]** を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c22b7445-5a72-1a96-363f-d2701b2330b8.png)
はい、まずはこれが左外部結合です。

## ということで残りの5種類を順番に試していきましょう
ここまでの手順を繰り返して、結合の種類のところを順に変えてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/0be822da-f09c-7314-b002-61f704dce092.png)
これが右外部結合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/740b8674-b683-8f23-e4be-81a74d134ae1.png)
これが完全外部結合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ee696915-7e0b-66e4-8c9c-7bf39ed9710d.png)
これが内部結合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/1b83d3d0-896f-d403-b38a-8e8ba63b7be3.png)
これが左反

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b0f17659-8edd-3b96-8f29-268110f224b3.png)
これが右反

## 使いどころ
使いどころですが、言わずもがな、一番よく使うのは **左外部結合** です。また **右～** シリーズは使わないでしょう。もちろんデータによるので、一概に言えません。例えば **左反** なんて、どうやって使うんですか？って思う人もいらっしゃると思います。

が、工夫次第です。例えば、**イベント参加者の一覧** があって、**イベントA** と **イベントB** があったとします。**イベントA** と **イベントB** にデータを分けて**「イベントA に参加したんだけど、イベントB に参加しなかった人リスト」**を作るには **左反** が使えたりします。ログを解析するときなんかも使えますよね。

# まとめ
はい、今回はここまでです。
**「知っていると使える、知らないと使えないのが Tips」**

**Tips** を他人に求めすぎると成長を阻害することになりかねないのですが、とは言っても人に伝えたくなる Tips を知っていると、日常がちょっと変わるかもしれませんね、と思いました。

今後も書きたくなったら、書こうと思います。
何かリクエストがあれば、お気軽に～♪♪
リクエストは以下まで

- Twitter: https://www.twitter.com/yugoes1021
- Facebook: https://www.facebook.com/yugoes1021
- LinkeIn: https://www.linkedin.com/in/yugoes1021/

それではまた～🤗