Power BI

Power BIでファクトテーブルからディメンションテーブルを作る方法

こちらの記事では、Power BIを使ってファクトテーブルからディメンションテーブルを作る方法をご紹介します。

ファクトテーブルとディメンションテーブルとは

ファクトテーブルとは集計・分析の対象となる数値データが含まれたテーブルです。
例えば、売上、原価、粗利といった項目を指し、最終的に数値データだけのテーブルになることが望ましいとされています。
一般的には日付ごとにデータが記録されていることが多く、データ量も数万行以上になります。

ファクトテーブル

また、ディメンションテーブルとは分析の切り口となるデータを持つテーブルです。
いわゆるマスタデータと説明した方が分かりやすいと思いますが、商品マスタや社員マスタなど、一意のデータとして識別するためのキーを持っているテーブルです。

ディメンションテーブル

なぜファクトテーブルとディメンションテーブルに分ける必要があるかというと、スタースキーマと呼ばれるデータ分析における最もポピュラーでシンプルなデータ構造にするためです。
このように中心にファクトテーブル、それを星型で囲うように複数のディメンションテーブルが関連付けられることからスタースキーマと呼ばれています。

引用:https://learn.microsoft.com/ja-jp/power-bi/guidance/star-schema

データ分析に関する知識や経験がなくても、まずはこの形を目指すことを目標にモデリングしていけば間違いはありません。

ファクトテーブルからディメンションテーブルを作る

Power Queryでファクトテーブルを開く

まずは対象のファクトテーブルをPower Queryで開きます。
今回はサンプルとしてMicrosoftから提供されている「Financial Sample.xlsx」のデータを使用します。
「Financial Sample.xlsx」は以下からダウンロードできます。

ファクトテーブルを複製する

Power Queryを開いたらファクトテーブルを複製します。
左側のクエリ一覧から対象のテーブルを右クリックし、[複製]を選択します。

複製後のクエリの名前は分かりやすいものに変えておきましょう。
今回は例としてSegmentをディメンションテーブルにしたいので、名前を「Segment」に変更しました。

不要なデータを削除する

続いて不要なデータを削除し、データを整えていきます。
Segment列以外は不要なので、Segment列を右クリックして[他の列の削除]、さらに重複行を削除するために[重複の削除]を選択します。

これで一意のデータだけのテーブルが出来上がりました。

インデックスの追加

データをさらに区別しやすくするためにインデックスを追加します。
列の追加タブから[インデックス列]を選択。今回は1からインデックスを振っていますが、0からでも問題ありません。

これでインデックス列を追加することができました。
分かりやすいように列名を変更しておきますが、この時に新たにステップを追加するのではなく、インデックス列を追加する際に列名も指定してしまった方がいいです。
少しでもステップを減らすことでPower Queryの処理を早くすることができるからです。

完成するとテーブルがこのような状態になっていると思います。
これでディメンションテーブルの出来上がりです。

ファクトテーブルにキーをマージする

ここからは作成したディメンションテーブルを使ってファクトテーブルも整形していきます。
Segmentテーブルに振ったKeyをfinacialsテーブルにマージするのが完成形です。
まずは[クエリのマージ]を選択。

finacialsテーブルとSegmentテーブルで共通項目となっている「Segment」列をそれぞれ選択して[OK]を選択。

するとSegmentテーブルがマージされますので、Segment Keyだけにチェックを入れて[OK]を選択。
「元の列名をプレフィックスとして使用します」のチェックは入っていても問題ないですが、あとで列名を変更するのが面倒なので外しておいた方がいいです。

するとSegment Keyが展開され、このようなテーブルが出来上がりました。

これでKeyでSegmentの区別ができるようになりましたので、Segment列は消してしまっても問題ありません。
BIに使わない列は基本的に削除してしまった方がいいので、Segment列は削除してしまいましょう。

これでファクトテーブルからディメンションテーブルを作成できました。
あとはPower BIでリレーションを結べばスタースキーマの出来上がりです!