Power BI

【Power BI】データのつながりを構築するリレーション機能

はじめに

データ分析において、異なるデータセット間の関係を理解し、適切に結びつけることはとても重要です。

以前の記事で、異なるデータテーブルをある列をキーにしてひとつのテーブルに連結する方法を紹介しました。この方法では、Power Query上で、テーブルの連結処理を行うため、データの行数が多かったり、データベースからデータを読み込んでいたりすると更新に時間がかかったりします。単純に複数のテーブルを連携させてグラフやテーブルをレポートに描画したい場合はリレーション機能で十分な場合もあります。

Power BIのリレーション機能を活用することで、手軽に異なるデータセット間のデータを関連付けることができます。それによって、異なるテーブル間の情報をひとつのグラフやテーブル上で使用することができます。この記事では、Power BIのリレーション機能について詳しく解説していきます。

リレーションとは?

リレーションとは、異なるテーブル間のデータの関係を定義するものです。これにより、複数のデータソースからの情報を統合し、ひとつのグラフやテーブル上で分析を行うことができます。リレーションには主に以下の種類があります。

  • 1対多(One-to-Many):一つのテーブルの一つのレコードが、他のテーブルの複数のレコードに対応する関係。
  • 多対多(Many-to-Many):複数のテーブルの複数のレコードが相互に対応する関係。

それぞれ詳しく解説します。

1対多(One-to-Many)

関連付けるテーブルのある一方のKeyが一意になっていて、もう一方のテーブルのKeyが一意になっていないケースです。基本的には、この形を使用することが多いと思います。Power BIもデータの保持にはスタースキーマを推奨しており、そのための基本的なリレーションの構築方法です。以下の例では、テーブル1とテーブル2を製品名列を使用してリレーションを構築することを想定します。テーブル1の製品名列は一意になっていますが、テーブル2の製品名列は一意になっていません。これが1対多の関係です。このとき、テーブル1とテーブル2を製品名列でリレーションを構築するとテーブル2の各行で、テーブル1の製品カテゴリーが何だったかをグラフやテーブルに表現することができます。テーブル2の1行目の 2023-01 の 売上 12345 の製品名は a ですから、その製品カテゴリは、テーブル1の情報を使用して、Aであるといったようなイメージです。

1対多の説明図
1対多の関係のイメージ

多対多(Many-to-Many)

上記の流れからイメージできると思いますが、多対多は、どちらのテーブルもKey列が一意ではないケースです。これは、実際は両者の関係性が曖昧となる(連携すべき両者のレコードが一意に定まらない)ため推奨はされません。それでも問題ない場合は、多対多のリレーションを構築すればよいですが、基本的にはKey列が一意となる中間テーブルを作成して、中間テーブルとそれぞれのテーブルが一対多の関係となるようなリレーションを構築することを推奨します。それぞれのイメージは以下の通りです。

多対多の直接リレーション

以下の例は、製品の入荷情報を記したテーブル1と製品の売り上げ情報を記したテーブル2が存在します。ある製品が、いつ入荷されて、いつ販売されたかの関係性を見たい場合は、製品名をKeyとしてテーブルのリレーションを構築します。ただこの場合は、テーブル1にもテーブル2にも同一の製品名のデータが複数存在するため、リレーションを構築したレコードが複数存在することになり、正しいデータを参照できないことも考えられます。

多対多の関係性の説明
多対多の関係のイメージ

中間テーブルを用いた多対多のリレーション

そのため、製品名が一意になった中間テーブルであるテーブル3を用意して、テーブル1とテーブル3、テーブル2とテーブル3の間にそれぞれ一対多の関係になるリレーションを構築することで、その問題を回避することができます。以下のようなイメージです。

中間テーブルを用いた多対多のリレーション構築の説明
中間テーブルを用いた多対多のリレーション構築のイメージ

Power BIでのリレーションの設定方法

2つのテーブルの間にリレーションを設定する

  1. Power BI Desktopにリレーションを構築したいテーブルを読み込んだ状態で、①モデルビュー → ②リレーションシップの編集、追加、削除 の順で選択します。
リレーションシップ作成画面の説明
リレーションシップの作成画面

2. リレーションシップの管理で「+新しいリレーションシップ」を選択

リレーションシップの管理画面の説明
リレーションシップの管理画面

3. リレーションの設定をします。リレーションを構築したいテーブルをそれぞれ選択し、Keyとする列を選択します。また「カーディナリティ」でテーブルの関係性を選択します。以下は、「多対多」の例ですが、一対多の場合は、「一対多」または「多対一」を選択してください。「クロスフィルターの方向」は、各テーブルの変数でフィルタ等を設定したときに、両テーブルのデータをどう制御するかを意味しますが、基本的には「双方向」で良いと思います。設定が完了したら「保存」を押します。

リレーションシップの設定画面の説明
リレーションシップの設定画面

以下のように、それぞれのテーブルが接続されたような状態になれば完了です。

リレーションシップ完了の説明
リレーションシップ構築が完成した状態

中間テーブルを作成してリレーションを設定する

多対多のリレーションで、中間テーブルを作成する場合の例を紹介します。先ほどの「多対多」で示したテーブルを例に説明します。

1. ホームペインでPower Queryエディターを選択します。

クエリエディタを選択する説明
クエリエディタを選択

2. 「クエリの追加」から「クエリを新規クエリとして追加」を選択します。

クエリの追加の説明
クエリの追加で「新規クエリとして追加」を選択する

3. 「2つのテーブル」を選択し、「最初のテーブル」に「テーブル1」、「2つ目のテーブル」に「テーブル2」を選択します。

クエリの追加の操作の説明
追加するテーブルを選択し、OKを押す

4. 「製品名」以外の列を削除して、「製品名」の重複を削除します。

他の列の削除の説明
「製品名」列を選択した状態で右クリック→「他の列の削除」で「製品名」以外の列を削除できる
重複の削除方法
製品名列を選択し右クリック→「重複の削除」

5. テーブル名を「テーブル3」として、「閉じて適用」を押します。

閉じて適用の説明
テーブル名を変更し閉じる

6. 「モデルビュー」→ 「リレーションシップの編集、追加、削除」でリレーションシップを作成します。

リレーションシップの設定画面の説明
リレーションシップの設定画面

7. 新しいリレーションシップから「テーブル1」と「テーブル3」、「テーブル2」と「テーブル3」にそれぞれ「多対一」のリレーションシップを作成します。

リレーション構築の説明
テーブル1,2 とテーブル3のリレーションを構築する

8. 以下のようになっていれば中間テーブルを用いたリレーションシップの構築の完了です。

リレーションシップの完成状態の説明
リレーションの完成状態

リレーションを設定したデータを可視化してみる

先ほどリレーションを構築したデータを可視化してみます。「視覚化」で「テーブル」を選択して、テーブル3の「製品名」、テーブル1の「入荷数量」、テーブル2の「販売数量」を変数として使用します。テーブル1とテーブル2では、製品名のレコードが複数存在していましたが、中間テーブルを使用することで、一意の製品名としてまとめられ、入荷数量、販売数量も集約されているのが確認できると思います。これでうまく集約することができました。

データ可視化の説明
リレーションを構築したデータの可視化例

リレーション構築のトラブルシューティング

リレーションの構築でよくあるトラブルと解決策です。

  • Keyに使用するデータ型の不一致
    Keyに使用するデータ型が異なるとリレーションをうまく構築できないケースがあります。Power Queryエディター等でデータ型を統一するようにしましょう。
  • リレーションをアクティブにできない
    リレーションを設定したい相手先のテーブルに既にリレーションが設定されている場合などは、リレーションをアクティブにできないケースがあります。各テーブル間の関係性に矛盾が生じていないかなどテーブルの構成を見直しましょう。
  • 意図しないリレーションが構築されている
    Power BIでは基本的にリレーションが自動で構築されます。レポート作成時に意図したデータ表示にならない場合は、リレーションが意図していない形で構築されていないかを確認するようにしましょう。

まとめ

この記事ではPower BIでのリレーション機能の構築方法を紹介しました。リレーション機能を活用することで、データのつながりを理解し、より深い洞察を得ることができます。リレーションの設定方法や活用例、トラブルシューティングの方法を理解し、効果的に活用することで、データ分析の精度と効率を向上させることができます。この記事を参考にぜひリレーション機能の構築にトライしてみてください。

-Power BI
-,