Power BIで「売上データ」と「商品マスタ」「顧客マスタ」など複数のテーブルを使おうとすると、リレーションシップという概念が必要になります。

リレーションシップとは、テーブル同士を共通のキー列で紐づける設定です。正しく設定することで、ExcelのVLOOKUPなしで複数テーブルをまたいだ集計・分析ができるようになります。この記事では、設定方法から設計の考え方まで初心者向けに解説します。

この記事でわかること
・リレーションシップとは何か(VLOOKUPとの違い)
・リレーションシップの設定手順(モデルビューでの操作)
・カーディナリティ(1対多・多対1・1対1・多対多)の違いと使い分け
・スタースキーマの考え方(ファクトテーブルとディメンションテーブル)
・クロスフィルター方向(単方向・双方向)の違い
・よくある失敗と対処法

リレーションシップとは何か

Power BIのリレーションシップとは、2つのテーブルを共通のキー列で紐づける設定です。たとえば「売上データ」テーブルの「商品コード」列と「商品マスタ」テーブルの「商品コード」列を紐づけると、売上データから商品名や単価を自動的に参照できます。

VLOOKUPとの違い

比較項目 ExcelのVLOOKUP Power BIのリレーションシップ
設定方法 各セルに関数式を記入 モデルビューでテーブル間を線で結ぶ
データ更新時 手動で範囲を確認・修正 更新ボタン1つで自動反映
大量データへの対応 行数が多いと動作が重くなる 数百万行でも高速に処理
複数テーブルの組み合わせ ネストが深くなり複雑化 リレーションシップを設定するだけ
💡 リレーションシップは「テーブル同士の接続配線」のイメージです。一度配線してしまえば、その後は意識しなくてもPower BIが自動的にデータを紐づけてくれます。VLOOKUPのように毎回式を書く必要がありません。

リレーションシップの設定手順

モデルビューを使った設定(推奨)

  1. Power BI Desktop の左側アイコンから「モデルビュー(人が集まったアイコン)」をクリック
  2. 取り込んだテーブルが四角いボックスとして表示されている
  3. 紐づけたい一方のテーブルのキー列(例:商品コード)をドラッグして、もう一方のテーブルのキー列(例:商品コード)の上にドロップ
  4. 2つのテーブルの間に線(リレーションシップ)が表示される
  5. 線をダブルクリックすると設定を編集できる

「リレーションシップの管理」ダイアログを使う方法

  1. ホーム」タブ → 「リレーションシップの管理」をクリック
  2. 新規作成」をクリック
  3. 左テーブル・右テーブルとキー列を選択
  4. カーディナリティとクロスフィルター方向を設定
  5. 「OK」をクリック
自動検出機能について:Power BI Desktopはデータ読み込み時に列名が同じテーブル間のリレーションシップを自動的に設定しようとします。正しく設定されることも多いですが、意図しない関係が作られることもあるため、モデルビューで必ず確認する習慣をつけましょう。

カーディナリティ(関係の種類)を理解する

カーディナリティとは、2つのテーブル間のデータの対応関係の種類です。

種類 意味 具体例 使用頻度
多対一(多:1) Aテーブルの同じ値が複数行あり、Bテーブルには1行だけある 売上データ(多)← 商品マスタ(1) ◎ 最もよく使う
一対多(1:多) 多対一の逆 商品マスタ(1)→ 売上データ(多) ◎ 多対一と同じ関係を逆方向から表現
一対一(1:1) 両テーブルで値が一意(重複なし) 社員マスタ ↔ 社員詳細テーブル △ あまり使わない
多対多(多:多) 両テーブルに同じ値が複数行ある 生徒テーブル ↔ 授業テーブル(1人が複数授業受講・1授業に複数生徒) △ 設計を見直すことが多い
🔴 多対多は可能な限り避けましょう。多対多リレーションシップは設定できますが、集計結果が意図しない値になることがあります。多対多が発生した場合は、中間テーブルを作成して「多対一+一対多」に分解するのが推奨の対処方法です。

スタースキーマ:Power BIのデータモデルの基本形

Power BIで複数テーブルを扱うとき、スタースキーマという設計パターンが推奨されています。中央に「売上データ(ファクトテーブル)」を置き、周囲に「マスタテーブル(ディメンションテーブル)」を配置する星型の構造です。

ファクトテーブルとディメンションテーブルの違い

種類 役割 具体例 特徴
ファクトテーブル トランザクション(実績データ)を格納 売上データ・注文履歴・アクセスログ 行数が多い・各行が1件の取引を表す
ディメンションテーブル マスタ情報を格納 商品マスタ・顧客マスタ・日付テーブル 行数が少ない・各行が1つのエンティティを表す

スタースキーマの構成例

            [商品マスタ]
                 |
                多対一
                 |
[顧客マスタ] ─多対一─ [売上データ(中央)] ─多対一─ [日付テーブル]
                 |
                多対一
                 |
            [地域マスタ]
日付テーブルは必ず作ることを強く推奨します。Power BIで「月別・年別」の分析をするには、専用の「日付テーブル」を作成してファクトテーブルの日付列と紐づけるのがベストプラクティスです。Power BI Desktopの「モデリング」→「日付テーブルとしてマークする」または自動日付テーブルを活用しましょう。

クロスフィルター方向の違いと使い分け

リレーションシップのクロスフィルター方向は、スライサーやフィルターの「どちら向きに絞り込みが伝わるか」を決める設定です。

方向 動作 向いている場面 注意点
単方向(デフォルト) 「1」側のテーブルのフィルターが「多」側に伝わる ほとんどの場合はこれで十分 シンプルで予測しやすい動作
双方向 どちらのテーブルのフィルターも相互に伝わる ディメンションテーブルで件数を集計したいとき 意図しない集計が起きやすい。複数の経路ができると危険
⚠️ 双方向は「必要なときだけ」使う。双方向フィルタリングを多用すると、スライサーの動作が不安定になったり、パフォーマンスが低下したりすることがあります。「単方向で意図した集計ができない」ときにだけ双方向に切り替え、理由をコメントとして残しておきましょう。

よくある失敗と対処法

症状・失敗 原因 対処法
グラフの値が全て同じ数値になる リレーションシップが設定されていない、または方向が逆 モデルビューで線の向きと一端の「1」と「*」の位置を確認
「循環依存を検出しました」エラー テーブルA→B→C→Aのようにループしている どこかのリレーションシップを削除してループを解消する
自動検出で意図しないリレーションシップが設定された 列名が偶然一致して誤った関係が作られた モデルビューで不要なリレーションシップの線を右クリック→「削除」
多対多エラー・警告が出る 両テーブルに重複する値が存在する 片方のテーブルから重複を除いてマスタ化するか、中間テーブルを作成する
スライサーで絞り込んでも別テーブルが更新されない クロスフィルター方向が単方向で、フィルターが逆向きに伝わっていない リレーションシップの方向を確認するか、双方向に変更する

まとめ:リレーションシップ設定のポイント

  1. モデルビューで視覚的に確認する:線の向き・「1」と「*」の位置が正しいか常に確認
  2. 基本は多対一(ファクト → ディメンション):売上データから商品マスタへ、という向きが最も多いパターン
  3. スタースキーマを意識する:ファクトテーブルを中心に、ディメンションテーブルが放射状に配置される構造を目指す
  4. クロスフィルターは単方向が基本:双方向は必要なときだけ、理由を明確にして使う
  5. 多対多が発生したら設計を見直す:中間テーブルを作成して1対多×1対多に分解する

リレーションシップを正しく設定することで、VLOOKUPなしで複数テーブルをまたいだ集計・分析が可能になります。最初は難しく感じますが、「1のテーブルが主キーを持ち、多のテーブルが外部キーを持つ」という原則を覚えるだけで、ほとんどのケースは対処できます。

ABOUT ME
IT解決チャンネル編集部
ExcelやWord、Windows、Googleスプレッドシートなど、ビジネスで使うITツールの使い方を初心者にもわかりやすく解説しています。関数の使い方から実務で役立つ応用テクニックまで、画像付きでていねいに紹介。パソコン操作で困ったときの頼れる情報源を目指しています。