仕事効率化

Power BI:多対多リレーションシップについて基本から解説

スポンサーリンク

 

この記事はこんな方におススメです
  • データ分析を始めたいが特に使うツールが決まっていない方
  • Power BIでどんなことができるか知りたい方
  • Power BIを使い始めたばかりで基本から学びたい方

▶ 中間テーブルを作ってリレーションシップの設定をする方法はこちらをご覧ください

▶ カレンダーテーブルの作成方法はこちらの投稿をどうぞ

はじめに

今回は「多対多」のリレーションシップの設定について基本から解説します。「多対多」のリレーション設定の方法は2つあります。1つは「多対多カーディナリティのリレーションシップを使う」方法、もう一つは「中間テーブルを介して設定する」方法です。順にみていきましょう。

多対多リレーションシップの設定

多対多リレーションシップとは2つのテーブルでリレーションシップ設定する際に、「結合のキーとする列がどちらのテーブルでも重複する値を持つ場合のリレーションシップ設定」です。この表現だけだと少しわかりにくいですね。実際の例を示しましょう。

以下のような2つのテーブルで「支店名」をキーとしてリレーション設定するケースを「多対多のリレーションシップ」といいます。

サンプルデータ(多対多)
  • 「売上テーブル」ではA支店が3つ、B支店が1つ、C支店が2つ、D支店が1つ
  • 「来客数テーブル」ではA支店が2つB支店が2つ、C支店が1つ、D支店が1つ

のようにキーとする「支店名」がそれぞれのテーブルで重複がある状態です。

多対多カーディナリティを設定する方法

多対多カーディナリティの設定

以前は推奨されていませんでしたが、MicroSoftの公式ドキュメントにも掲載があるので、気を付けて使いましょう、ということなんでしょうね。もともとリレーションシップの設定は1対多を基本としていて、「多対多」のリレーション設定時にはいくつか制限事項があります。設定事項とともに制限事項についても確認していきましょう。

まずはPower BIの実際の画面で設定方法をみていきましょう。

多対多のリレーションシップ設定

まずは「モデル」を選択して、Power BIに取り込まれているテーブルを確認しましょう。この例では「売上テーブル」と「来客数テーブル」が取り込まれています。この2つのテーブルに共通の項目である「支店名」をキーとしてリレーションシップの設定をおこないます。

操作は簡単で一方の項目を選択して、もう一方のテーブルにドラッグ&ドロップします。すると、「リレーションシップの設定」ダイアログが表示されます。

多対多リレーションシップの設定:カーディナリティ、クロス フィルター

カーディナリティは「多対多」、クロス フィルターの方向は「双方向」に設定します。クロス フィルターを「双方向」にするとは、テーブルでデータを絞り込んだ(フィルターした)場合に、お互いにフィルターを適用する、という意味です。

上記の設定後、「OK」をクリックすると、以下のように多対多のリレーションシップ設定ができます。

多対多リレーションシップの設定:完了

自動でリレーションシップが確立されました。正しくリレーションシップされない場合は、手動で設定しましょう。(列名を同じにしておくと自動でリレーションシップが確立されます)

多対多カーディナリティ設定時の制限事項

多対多のリレーションシップ設定した際に、キーに設定した列がどちらかのテーブルにしかない値がある場合には注意が必要です。これは実例をみながら確認した方がわかりやすいでしょう。

「レポート」画面で集計してみましょう。

「売上」テーブルから「支店名」を指定

まず「レポート」画面(①)を表示して「テーブル」を選択(②)します。次に列の設定ですが、「売上」テーブルから「支店名」「売上」、「来客数」テーブルから来客数を指定(③)します。「支店名」を「売上」テーブルから指定したことに注意してください。

結果をみると、A支店、B支店、D支店の集計結果がありますが、C支店の集計がありません。これは「売上」テーブルにはC支店がなかったため、「支店名」を「売上」テーブルから指定した場合には集計対象とならないのです。

反対に「支店名」を「来客数」テーブルから指定してみましょう。

「来客数」テーブルから「支店名」を指定

今度の結果は、A支店、B支店、C支店の集計結果はありますが、D支店はありません。これは「来客数」テーブルにはD支店がなかったため、集計対象になりません。

これが注意事項になります。指定したテーブルの方に存在するキー列の値のみが集計対象になる、ということを覚えておきましょう。

中間テーブルを介して設定する方法

次に中間テーブルを介して設定する方法です。中間テーブルを手動で作ったり、カレンダーテーブルを作る方法は過去にも紹介しました。ここでは選択した複数のテーブルから中間テーブルを作る方法をご紹介します。

まずはPower Query エディタを起動しましょう。「ホーム」メニューの「クエリ」リボンから「データの変換」をクリックします。

データの変換

Power Queryエディタが起動します。「ホーム」メニューの「結合」リボンの「クエリの追加」のプルダウンメニューから「クエリを新規クエリとして追加」をクリックします。

クエリを新規クエリとして追加

すると、「追加」ダイアログが表示されます。

追加ダイアログ

ここでテーブルを選んで「OK」をクリックします。ここでは、2つのテーブルから中間テーブルを作るため、「2つのテーブル」を選択して「最初のテーブル」で「売上」テーブルを、「2つ目のテーブル」で「来客数」を選択して「OK」とします。

クエリが作成された

追加クエリ(①)が作成されます。今回は中間テーブルを作成するだけなので、不要な列は削除(②)しましょう。またクエリの名前は③の箇所で変更することができます。

列の削除とクエリの名前変更

今回は支店名以外を削除して、クエリの名称を「中間テーブル」としましょう。削除したい列を選択して右クリックするとプルダウンメニューが表示されるので、「列の削除」をクリックします。

重複の削除

次に「支店名」列の重複を削除します。列名を選択した状態で「ホーム」メニューの「行の削減」リボンの「行の削除」のプルダウンメニューから「重複の削除」を選択します。最後に「閉じる」リボンの「閉じて適用」を選択すれば中間テーブルの完成です。

中間テーブルを介したリレーションシップの設定

Power BI Desktopに戻るので、「モデル」画面を表示します。次に「売上」テーブルと中間テーブルのリレーション設定(②)、「来客数」テーブルと中間テーブルのリレーション設定をします。これで完成です。

レポート画面で集計してみましょう。

中間テーブルを介してリレーション設定した時の集計

中間テーブルで「支店名」を指定しています。この場合、集計結果には「売上」テーブルにはないD支店や「来客数」テーブルにはないD支店も集計対象となります。

また、このような方法で中間テーブルを作成しておくと、「売上」テーブルや「来客数」テーブルにデータが追加となり、支店名が増えた場合も自動的に集計対象となります。

スポンサーリンク

まとめ

今回は多対多のリレーションシップ設定する2つの方法を扱いました。1つは多対多カーディナリティの設定をする方法で設定自体は簡単ですが、キー列を設定した方のテーブルに存在するキー列の値しか集計対象にならないことに注意が必要です。一方で、中間テーブルを介する方法では初回は少し手間がかかりますが、その後、データが追加されても自動反映されます。前者のような成約がない分、慣れないうちは中間テーブルを使った方法の方が確わかりやすく確実かもしれませんね。

コメント

タイトルとURLをコピーしました