この記事では、Power BIのリレーションシップについて、データベース設計の基本と一緒に解説します。
- Power BIのリレーションシップとは何か?
- データベース設計の基本的な考え方
- リレーションシップの設定方法
YouTube動画で見たいかたは、こちらからどうぞ!
リレーションシップとは?
リレーションシップとは、異なるテーブルを紐づけ、テーブル間の関係性を定義する設定です。
例えば、以下のようなスーパーの売上一覧と、商品一覧の2つのテーブル見てみます。

今は2つのテーブルが別々にある状態で、リレーションシップ(データの紐づけ)がありません。
この状態で、テーブル1のスーパーの売上一覧をグラフ化すると、以下のように表示されます。

※X軸:商品コード、Y軸:売上、凡例:原価と売上
この時、X軸は商品コードが表示され、商品名が表示できない状態になっています。
そのため、リレーションシップが必要になるんだよ!
具体的には、テーブル1と、テーブル2を「商品コード」の列で、以下のようにリレーションシップ(紐づけ)します。

商品コードで2つのテーブルをリレーションシップすることで、テーブル1の商品コードから、テーブル2の商品名を参照して、以下のようにグラフを表示できるようになります。

Power BIでのリレーションシップは基本的に1対多の結合になります。
一対多とはどういう意味ですかな?
今回の場合、テーブル2商品一覧の方の商品コードは、同じ商品が複数入っていることはないため、一意のデータになります。
一方で、テーブル1スーパーの売上一覧の商品コードは、重複のあるデータになります。

このとき、テーブル2の商品コード列が一,に対して、テーブル1の商品コード列が多の結合になるから、一対多のリレーションシップと呼ぶんだよ。
Power BIでは、基本的にこの一対多のリレーションシップを使います。
多対多の結合や、複数の列(キー)で結合する方法は、また別の記事で解説します。
データベース設計の基本

ただしこのテーブルには少し問題があるから、それを説明するために、次にデータベース設計の基本的な考え方を説明するよ!
データベースは、データを修正するときに、メンテナンスしやすい設計とするのがよいです。
例えば以下のスーパーの売上一覧を見てみます。

もし商品名の“牛肉”を、“国産牛”に変更したい場合、データは以下のように修正する必要があります。

1/1と1/2の牛肉を国産牛に修正する必要がありますね。
この例では2か所のみの修正ですが、実際は数十か所の修正になるかもしれません。
Excelの場合、データの検索と置換で一気に修正はできますが、基本的に何か所もデータ修正をすると、間違いが起こりやすいので、避けた方がよいです。
では、テーブルを2つに分割した場合を見てみます。

テーブル1スーパーの売上一覧には、商品コードのみデータを残し、テーブル2商品一覧に、商品コードと対応する商品名のデータを分けました。
先ほどと同様、牛肉を国産牛に変える場合、今回はテーブル2商品一覧の1箇所だけ変えればOKです。
テーブル1は商品コードのデータで持ってるから、商品名が牛肉から国産牛に代わっても、商品コードは0002で同じなのですな!
このように、1つのデータを修正するときは、1箇所だけ修正すればよいように、テーブルを分けると、データベースのメンテナンスが楽になるよ。
Power BIのデータモデル設計について、より詳細な内容は以下を参考にしてください。

Power BIでのリレーションシップの操作方法
それでは、Power BIデスクトップでの、リレーションシップの操作方法を解説します。
今回は以下のような、簡単なスーパーの売上一覧(テーブル1)と、商品一覧(テーブル2)をサンプルデータとして使います。


データの取り込み
1.Power BIデスクトップアプリを起動し、Excelブックをクリックして、Excelファイルを取り込みます。

2.ナビゲーターで、テーブル1(スーパーの売上一覧)、テーブル2(商品一覧)の2つにチェックを入れ、「データの変換」をクリックします。

データ変換
1.Power Queryエディタが起動するので、2つのテーブルの商品コードのデータ型を「テキスト型」に変換します。

2.列タイプの変換が表示されたら、「現在のものを置換」をクリックします。

3.以下のように、「ABC」となっていれば、データ型がテキスト型になっています。
もう1つのテーブルも、同様に商品コード列をテキスト型に変換し、閉じて適用をクリックします。

データ型について詳しく知りたい方は、以下の記事を参考にしてください。

リレーションシップ
1.左の「モデル」タブをクリックすると、読み込んだテーブルのリレーションシップが設定できます。
今回は2つのテーブル間が自動で、商品コード列で一対多のリレーションシップの設定がされています。

Power BIでは、各テーブルの列名と、データを見て、自動的にリレーションシップを設定してくれます。
適切なリレーションシップとなっていない場合もあるので、必ず確認しましょう。
2.手動でリレーションシップの設定をする場合、紐づけたい列を、もう一方のテーブルの列の上にドラッグ&ドロップします。

レポート作成
1.レポートタブに戻り、レポートを作成します。
例えば「積み上げ棒グラフ」を選び、以下のようにデータを入れてみます。
X軸:商品一覧の「商品名」列
Y軸:売上一覧の「売上数」列

2.正しくグラフが表示されています。
3.試しにモデルタブに戻り、リレーションシップを削除してみます。
リレーションシップを削除する場合、2つのテーブルを紐づける矢印の上で右クリック>削除を選択します。

4.レポートタブに戻りレポートを見てみると、リレーションシップの設定を削除したため、このようにグラフが適切に表示できなくなりました。


最後に
この記事では、Power BIのリレーションシップと、データベース設計の基本的な考え方について解説しました。
リレーションシップとは、異なるテーブルを紐づけ、テーブル間の関係性を定義する設定です。
そもそも1つのテーブルにすべてのデータを格納すれば、リレーションシップは必要ありません。
しかしデータベースは、データを修正等、メンテナンスしやすさを考えて設計する必要があり、そのために複数のテーブルに分けることが多いです。
Power BIでリレーションシップを使いこなせば、色々な異なるデータを紐づけて相関関係を見るなど、データ分析の幅が更に広がります。

