見出し画像

Power BI- リレーションシップの方向がわからんから整理した#1

とりあえず結論から、
・「矢印」は「マスターテーブル(ディメンションテーブル)」から「データテーブル(ファクトテーブル)」の方向!
・「単一」でも「マスターテーブル(ディメンションテーブル)」を軸に入れてグラフを作れば「データテーブル(ファクトテーブル)」と連動する!
・「双方向」だと「データテーブル(ファクトテーブル)」だけでグラフを作っても連動する。(けどテーブルが増えてくるとエラー多発の原因になるのでお勧めしない)

リレーションシップはPower BIに限った話ではなく、AccessやPower Query(Excel)も共通の話、
Accessや、2016年以降(?)にExcelに標準搭載されたPower Queryは、これまであまり触ってこなかった。なので、基礎的な理解ができていないから、サンプルデータを作成して、どんな挙動になるか確認する

<<Tips>>
リレーションシップは、(確か)Power BIとExcelのPower Queryでは、リレーションシップのイメージ画面で表示される「矢印(▲▼)」の向きが「逆」になっていて、混乱しやすい。

このあたりをどうやって覚えれば、間違わずに確実に整理できるのかも、データサンプルを作って確認したい(Excelの方は今回は急ぎではないので、後日暇があればサンプルを作って確認する)。

0-1. マスタテーブル(ディメンションテーブル)の準備

確認用のサンプルデータを作る前に、以下のマスタテーブル(ディメンションテーブル)を作った
それぞれ一意の値しかもたないMECEなテーブル。

画像1


0-2. サンプルデータの準備

小売店で「店舗別の来店人数」と「店舗別の売上金額」の独立したデータテーブル(ファクトテーブル)があったとする。(こんなデータが存在するのかはわからんが、自分の会社で存在するデータのコンセプトだけ抽出しようと思ったら、こんなデータを用意することになった)
こちらは、日付と店舗名に重複や漏れがあるテーブル。

画像2

(来店しているけど売り上げがない、とか違和感のある状況になっているが、、、RANDBETWEEN関数で適当に作ったデータなので現実離れしている点は気にしない。今回はリレーションが確認できればそれでいい。)


1. Power BIへの取り込み

Power BI Desktopを立ち上げて…

画像3

<<Tips>> Power BI Desktopが基本的な操作を行うアプリになる。Power BI Serviceは基本的に、「閲覧と微修正」と思って作業したらいい。


「無題」のpbixファイルが開いたら…

画像4


さっき作ったサンプルデータはExcelで作成したものだから、
「ホーム」タブ>「Excel」からデータを取り込む

画像5


2. 取り込んだデータ間のリレーションシップを何パターンか作って試してみる

リレーションシップを設定・編集する画面は2つ用意されている。
(Query編集画面ではない(当然か…)。Query編集画面は、「ホーム」タブの「データの変換」から入る画面。Queryの編集と「データ」画面から「列」を操作することの違いについては、また誰かからリクエストがあれば書きます)

a. 「レポート」画面の「モデリング」タブ、もしくは「モデル」画面の「ホーム」タブにある「リレーションシップの管理」→ 個別のリレーションシップを設定・編集するときは、慣れたらこっちの方が速いと思う

b.「モデル」画面
→ 線と矢印で関係性が見える状態で編集できる。初心者はこっちの方がやりやすく感じるが、リレーションをやたら作りすぎてぐちゃぐちゃになりがち。

そんな時は、この「モデル」画面の一番下にある「+」でタブをもう一つ作って、「自動で整列」をすれば、Power BI Desktopが勝手に見やすくしてくれる機能がある。

画像6


2-1. 「クロスフィルターの方向」を全て「単一」にした場合

画像7

<Tips>マスタテーブル(ディメンションテーブル)とデータテーブル(ファクトテーブル)の、どっちからデータを重ねていこうが、「矢印」は一方向にしか向けられない。(無理に「カーディナリティ」を多対一から一体多にしようとすると、エラーメッセージがでて「OK」ボタンがグレーアウトして押せなくなる)

<Tips>「矢印」の向きは「一」→「多」になっている。

つまり、矢印の向きは、「マスターテーブル(ディメンションテーブル)」から「データテーブル(ファクトテーブル)」へ、という向きになるようにPower BI desktopでは設定されている(Power BI desktopでは、と書いたのは、Excel のPower Queryでは確かこれが逆だったと思うから。また今度確認)。


この設定で、とりあえず適当にレポートを作ってみる。


レポートを作る際は、2つの「視覚化」(棒グラフとか線グラフのこと)を作成して、

片方の特定の「日付」や「店舗名」を選択したときに、他方の「視覚化」にどのような影響を与えるか確認することにする(「クロスフィルターの方向」を「双方向」にする確認の場合も同じ)


2-1-1. (「クロスフィルター=単一」) 「日付」も「店舗名」も全て「データテーブル(ファクトテーブル)」からとってきた場合

結論:2つのグラフは全く連動しない

画像8

↑ 左側の棒グラフの一部を選択しても、右側の棒グラフは反応なし

画像9

↑ 右側の棒グラフを触っても、同様に、左側の棒グラフは反応なし

理由:片方のグラフで選択された「日付」や「店舗名」は、「クロスフィルター」が「マスターテーブル(ディメンションテーブル)」から「データテーブル(ファクトテーブル)」の方向に「単一」であるため、その「日付」や「店舗名」が"選択されている"という情報を、「データテーブル(ファクトテーブル)」から「マスターテーブル(ディメンションテーブル)」の方向に逆流させることができない。したがって、他方のグラフに"選択されている"「日付」や「店舗名」の情報が流れず、結果として2つのグラフは全く連動しなくなっている。

▼「売上高」の分析用グラフの一部を選択しても、「来店人数」の分析用グラフが反応(連動)しない理由のイメージ

画像10

①売上高の分析用グラフの一部をクリック
②"クリックされた情報"が「カレンダーテーブル」と「店舗テーブル」(いずれもマスターテーブル(ディメンションテーブル))に流れない(1.✖)
③情報が流れない(1.✖)から、来店人数の分析用グラフに"クリックされた情報"が下りて行かない(2.✖)
④"クリックした情報"が下りてこない(2.✖)から、来店人数の分析用グラフは全く反応しない


2-1-2 (「クロスフィルター=単一」) 「日付」も「店舗名」も全て「マスターテーブル(ディメンションテーブル)」からとってきた場合

結論:2つのグラフは連動する

画像11

↑ どちらのグラフの一部を選択しても、他方のグラフの一部が反応する

理由:グラフを作成する際に、マスターテーブル(ディメンションテーブル)にある「日付」と「店舗名」を使って両方のグラフを作成したため、そもそも両方のグラフが共通の情報(各マスターテーブル(ディメンションテーブル)の「日付」と「店舗名」情報)で連携されているため。

<Tips> 「クロスフィルターの方向」が「単一」で、「マスターテーブル(ディメンションテーブル)」から「データテーブル(ファクトテーブル)」の方向に「矢印」が見えているが、片方のグラフの一部が「クリックされた情報」は、そもそも「マスターテーブル(ディメンションテーブル)」の一部がクリックされたという2つのグラフの共通情報であるため「矢印」の方向に関係なく、2つのグラフは連動する

画像12




2-2. 「クロスフィルターの方向」を全て「双方向」にした場合

結論:2つのグラフは連動する

※書こうと思ったけど、説明過多な気がしたのでやめる


概要だけ書くと、


2-1-1で2つのグラフが連動しない理由は、

一方のグラフで「データテーブル(ファクトテーブル)」の「日付と店舗名」の「クリックされた情報」が、「マスターテーブル(ディメンションテーブル)」まで「逆流」して、他方のグラフまでたどり着かないことが原因だった。

「クロスフィルターの方向」を「双方向」にするというのは、
この「逆流を許可するということを意味する。

なので、「データテーブル(ファクトテーブル)」の「日付と店舗名」の「クリックされた情報」が、「マスターテーブル(ディメンションテーブル)」まで「逆流」して、他方のグラフまで届くので、他方のグラフもその「クリックされた情報」に基づき、反応することになる。



また基礎的なことからぼちぼち書いていきます。


この記事が気に入ったらサポートをしてみませんか?