Power BIのリレーションシップの使い方!できない場合の対処法も!

Power BIのリレーションシップの使い方!できない場合の対処法も!
Power BIでテーブルを複数読み込んだのに、グラフがうまく集計できずに困ったことはないでしょうか。

けど、そんな中で悩むことは、

・リレーションシップの作り方がわからない
・テーブル同士をどうつなげばいいのか分からない
・線が引けずにエラーになってしまう
・複数テーブルの集計がうまくいかない

ですよね。

今回は、Power BIのリレーションシップの使い方を紹介します。

・リレーションシップとスタースキーマの考え方
・リレーションシップを作成する手順(STEP1〜STEP4)
・つながらないときの原因と対処法(4パターン)
・モデルビューの線の見方(実線と点線の違い)
・クロスフィルター方向の使い分け

についてまとめます!

Power BIは、テーブルを複数読み込んだだけでは正しく集計できません。
テーブル同士のつながりを定義するのが「リレーションシップ」です。

早速試していきましょう!

完成イメージ

今回作成するのは、1つの売上明細を4つのマスタから取り囲む形のモデルです。

中央の「売上明細」がデータの塊で、その周りを「商品マスタ」「店舗マスタ」「顧客マスタ」「日付マスタ」が囲んでいます。

線の両端には「1」と「*」の印が付いていて、マスタ側が1、明細側が多という関係になっています。

この形を作っておくと、商品マスタのカテゴリで売上を集計する、といった分析ができるようになります。

リレーションシップとスタースキーマ

リレーションシップとは、テーブル同士のつながりのことです。

Power BIでは、つながりを定義してはじめて複数のテーブルをまたいだ集計ができます。

目指すべき形は「スタースキーマ」

理想的な形は、中央に1つの大きなテーブル、その周りにマスタが並ぶ形です。

星のように見えることから「スタースキーマ」と呼ばれます。

売り上げ明細のような実態を記録するテーブルをファクトテーブル、
ファクトテーブルと関連する商品など登録したマスタのことをディメンションテーブルと呼んでいます。

種類 役割 今回の例
ファクトテーブル 数値の記録。行数が多い 売上明細
ディメンションテーブル 切り口になるマスタ。行数が少ない 商品/店舗/顧客/日付マスタ

リレーションの持ち方について、たとえば、売上明細には商品ID「101」しか入っていませんので
人が見てどの商品であるかはわかりません。

一方で、商品IDの意味(商品名やカテゴリ)は商品マスタが持っていますので、
つなげておけば、売上明細の売上高を「カテゴリ別」に集計できるようになるというわけです。

POINT
・1側は重複のないキー列(マスタ側)
・多側は重複のあるキー列(明細側)
・1側から多側へつなぐのが基本

リレーションシップを作成する方法

ここからは、実際の手順をSTEPごとに紹介します。

STEP1. データを用意する

今回は、あらかじめ5つのテーブルを用意しました。

まずは売上の記録です。368行あります(総売上 38,059,700円)。

売上日 商品ID 店舗ID 顧客ID 数量 売上高
2026/7/1 305 202 1022 1 13,800
2026/7/1 405 302 1026 2 55,200
2026/7/1 204 201 1024 2 148,200
2026/7/1 304 302 1003 3 39,300
2026/7/2 404 201 1039 2 52,400
2026/7/2 103 301 1007 2 304,800
2026/7/2 302 502 1040 1 11,600
2026/7/2 304 101 1038 3 39,300
2026/7/3 204 402 1038 2 148,200
2026/7/3 202 302 1034 2 132,000

次に切り口になるマスタです。

商品ID 商品名 カテゴリ 単価
101 ノートPC-A ノートPC 134,700
102 ノートPC-B ノートPC 143,600
103 ノートPC-C ノートPC 152,400
104 ノートPC-D ノートPC 161,300
105 ノートPC-E ノートPC 170,200
201 タブレット-A タブレット 61,900
202 タブレット-B タブレット 66,000
203 タブレット-C タブレット 70,000
204 タブレット-D タブレット 74,100
205 タブレット-E タブレット 78,200
301 周辺機器-A 周辺機器 10,900
302 周辺機器-B 周辺機器 11,600
303 周辺機器-C 周辺機器 12,400
304 周辺機器-D 周辺機器 13,100
305 周辺機器-E 周辺機器 13,800
401 ソフトウェア-A ソフトウェア 21,800
402 ソフトウェア-B ソフトウェア 23,300
403 ソフトウェア-C ソフトウェア 24,700
404 ソフトウェア-D ソフトウェア 26,200
405 ソフトウェア-E ソフトウェア 27,600
店舗ID 店舗名 地域
101 札幌店 北海道
102 仙台店 東北
201 東京本店 関東
202 横浜店 関東
301 名古屋店 中部
302 静岡店 中部
401 大阪店 関西
402 神戸店 関西
501 福岡店 九州
502 熊本店 九州

顧客マスタは40行あります(抜粋)。

顧客ID 顧客名 年代 性別
1001 顧客01 20代 男性
1002 顧客02 10代 男性
1003 顧客03 60代 男性
1004 顧客04 20代 男性
1005 顧客05 50代 男性
1006 顧客06 60代 女性
1007 顧客07 10代 女性
1008 顧客08 60代 男性

上の表をExcelのシートに貼り付けて読み込めば、同じ手順で試せます。

STEP2. モデルビューを開く

データを読み込んだら、画面左側の「モデルビュー」のアイコンをクリックします。

読み込んだテーブルがカードとして並び、関連付けの状態が見えるようになります。

STEP3. キー列をドラッグしてつなぐ

つなぐときは、1側(マスタ)のキー列を、多側(明細)のキー列へドラッグします。

たとえば「商品マスタ」の「商品ID」をつかんで、「売上明細」の「商品ID」へドロップします。

これだけで1対多(1対*)のリレーションシップが作成されます。

同じように、次の4本をつなぎます。

1側(マスタ) 多側(明細)
商品マスタ.商品ID 売上明細.商品ID
店舗マスタ.店舗ID 売上明細.店舗ID
顧客マスタ.顧客ID 売上明細.顧客ID
日付マスタ.日付 売上明細.売上日

列名が同じでなくてもかまいません(日付マスタの「日付」と売上明細の「売上日」など)。

意味が同じ列であればつなげられます。

STEP4. クロスフィルター方向を確認する

作成した線をダブルクリックすると、設定画面が開きます。

ここで「クロスフィルター方向」を確認します。

方向 動き 使いどころ
単一 1側から多側へ絞り込みが流れる 既定。ほとんどの場合はこれでOK
双方向 お互いに絞り込みが流れる 多対多の中間テーブルなど特別な場合

双方向にすると便利に見えますが、集計が意図しない結果になることもあります。

迷ったら単一のままにしておくのがおすすめです。

リレーションシップができないときの対処法

ここからは、つながらないときの原因と対処を4つ紹介します。

どれも実際に手を動かして確認した内容です。

原因1. キー列に重複がある

「1」側の列に同じ値が複数あると、1対多として認識できません。

実際に重複のある商品IDを用意して確認してみました。

商品ID 101が3件ある重複テーブル
商品ID「101」が3件、「205」が2件あり、23行になっています。

この状態でつなごうとすると、線が引けても点線(非アクティブ)になり、集計に使われません。

対処法は、Power Queryで重複を削除してキーを一意にすることです。

「ホーム」タブの「データの変換」をクリックします。

データの変換ボタン
Power Query エディターが開くので、左側で対象のクエリを選び、商品IDの列を右クリックします。

右クリックメニューの「重複部分の削除」
「重複部分の削除」をクリックすると、同じ値の行が1つにまとまります。

重複を削除して20行になった状態
23行あった商品が20行になり、商品IDが一意になりました。

「ホーム」タブの「閉じて適用」をクリックすると、モデルに戻って線が有効になります。

原因2. データ型が一致していない

片方が数値、もう片方が文字列になっていると、リレーションシップを作成できません。

商品IDを文字列として用意して確認してみました。

商品IDが文字列「0101」になっているテーブル
商品IDが「0101」のように、文字列として入っています。

見た目は数値でも、Power BIでは別の型として扱われるためつなげられません。

対処法は、Power Queryでデータ型を合わせることです。

商品IDの列ヘッダーにある型アイコンをクリックします。

データ型のメニュー
「整数」をクリックすると、文字列から数値に変換されます。

整数に変換された商品ID
「0101」が「101」になり、数値として扱われるようになりました。

つなぐ予定の列は、かならず両方のテーブルで同じ型にしておきましょう。

原因3. 空白や一致する値がない

データ型が合っていても、値そのものが噛み合っていないと正しくつながりません。

たとえば、明細の商品IDが「101」なのに、マスタ側が「9101」になっているような場合です。

この場合、線を引くことはできても、集計結果がすべて空白になります。

対処法は、元データを見直して共通のコードに合わせることです。

Power Queryで両方のテーブルを並べ、値がそろっているかを目で確認するのが確実です。

先頭に空白が入っている、全角と半角が混ざっている、といった小さな違いも見つかります。

タカヒロ
タカヒロ
「つながっているのに集計が空っぽ」のときは、値の食い違いを疑ってください。
型が合っていても、中身が違えばPower BIは別物として扱います。

原因4. 多対多でうまく集計できない

両方のテーブルに重複があると、多対多の関係になってしまいます。

多対多は行の数が思わぬ形で増え、集計がおかしくなることがあります。

対処法は、中間テーブル(ブリッジテーブル)を間にはさむことです。

中間テーブルはキーが一意になるように作り、それぞれと1対多でつなぎます。

構成 つなぎ方
売上明細(多) → 中間テーブル(1)
中間テーブル(多) → マスタ(1)

これで、直接つないだときのような集計の乱れを避けられます。

モデルビューの線の見方

線の見方を覚えておくと、トラブルに早く気づけます。

見た目 意味
実線 有効なリレーションシップ
点線 非アクティブ(集計には使われない)
線の中央の矢印 クロスフィルターの方向
端の「1」と「*」 1対多の向き

点線(非アクティブ)になっているリレーションシップ
上の画像の点線は、重複があるために非アクティブになった線です。

実線になっていない線は集計に使われないので、原因をつぶして有効にしてください。

タカヒロ
タカヒロ
以前、リレーションが非アクティブになっているのに気づかず、グラフのフィルター処理がうまくいかないことがありまして、原因を見つけるまで数日かかったことがありましたね…

RELATED関数で関連先の値を引く

つないだ関係は、DAXの計算式からも使えます。

「ホーム」タブの「新しい列」をクリックし、次のように入力します。

カテゴリ =
    RELATED('商品マスタ'[カテゴリ])

入力したら、数式バーの左にある「✓」をクリックするか Enter キーで確定します。

RELATEDは「多側から1側の値を引く」関数です。

リレーションシップが正しく張られていれば、明細にマスタのカテゴリが並びます。

逆に1側から多側を引くときは、RELATEDTABLEを使います。

うまくいかないときの確認ポイント

線が引けないときは、まず3つを確認する

次の順に確認すると、ほとんど原因が見つかります。

1. 1側のキー列に重複がないか
2. 両方の列のデータ型が同じか
3. 値そのものが一致しているか

「テーブル間にリレーションシップを作成できません」と出た

同じ2つのテーブルに、すでに有効な線が引かれていないかを確認してください。

1組のテーブルにつき、有効な線は1本までです。

2本目を引くと、先に引いた線が点線(非アクティブ)になります。

集計が明らかにおかしい

クロスフィルター方向が「双方向」になっていないかを確認してください。

双方向は一見便利ですが、集計が増殖することがあります。

特別な理由がなければ「単一」に戻しましょう。

日付テーブルとつながらない

日付マスタは、1行1日で抜けのないデータにしてください。

飛び飛びの日付が入っていると、正しく集計できません。

Power Queryの「日付」列から「日付テーブル」を作る機能を使うと確実です。

まとめ

今回は、Power BIのリレーションシップの使い方を紹介しました。

手順をまとめると次のとおりです。

1. 1つの明細と複数のマスタを用意する(スタースキーマ)
2. モデルビューでマスタのキー列を明細へドラッグする
3. 1対多になっているかを線の「1」「*」で確認する
4. 必要に応じてクロスフィルター方向をそろえる
5. 重複・型・値の3点をチェックして、線を実線にする

リレーションシップは、Power BIで分析するための土台になる設定で、

ここが正しく組めていれば、あとはフィールドを置くだけで複雑な集計ができますので

ぜひ押さえてもらえばと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image