【Power BI】データモデル構築からレポート・ダッシュボード作成まで(データモデル編)

本記事では、Microsoft Fabricのウェアハウスに格納された売上・在庫・顧客データを活用し、Power BIで分析環境を構築する実践的なステップをご紹介します。

具体的には、データモデル(リレーションシップ)構築から始め、Power BI Serviceで「売上パフォーマンス」「在庫最適化」の2つの主要な分析レポートページを作成します。

さらに、作成したレポートから重要なKPIを抽出し、日次マネジメントダッシュボードを構築し、ビジネスの異常値をいち早く検知するためのアラート設定を行い、実際に通知が届くことまで確認を行います。

今回は、データモデル編としてデータモデルの構築とメジャーの追加方法について紹介します。

事前準備

今回のPower BI分析環境構築で使用するウェアハウス上に格納されているデータセットは、以下のディメンションテーブルとファクトテーブルで構成されています。

なお、各テーブルは自作したダミーデータを利用します。

テーブル名 タイプ 主要カラム 役割
商品ディメンション ディメンション 商品ID,商品名,カテゴリ,ブランド,標準売価 商品の属性情報を提供
顧客ディメンション ディメンション 顧客ID,顧客名,性別,年齢層,会員ランク,初回購入日 顧客の属性情報を提供
店舗ディメンション ディメンション 店舗ID,店舗名,支店名,店舗タイプ,開店日 店舗の属性情報を提供
日付ディメンション ディメンション 日付キー,日付,年,月,四半期,曜日,休日フラグ 時間軸での分析(トレンド、季節性など)を可能にするカレンダー情報を提供
販売ファクト ファクト 販売ID,店舗ID(大阪支店のデータのみを格納),商品ID,顧客ID,販売日時,販売数量,合計金額,支払い方法 各販売トランザクションの測定値(売上金額、数量など)を記録
在庫ファクト ファクト 在庫ID,店舗ID,商品ID,在庫日時,在庫数量,入庫数量,出荷数量 各時点での在庫状況の測定値(在庫数量、入出庫など)を記録

データモデルの構築

データモデルを構築する理由

Power BIで正確かつ柔軟な分析を行うためには、データモデルの構築が不可欠です。

複数のテーブルに分かれたデータを一貫して扱うには、それぞれのテーブル間の関係性(リレーションシップ)を定義し、意味のある構造にまとめる必要があります。

今回構築するデータモデル(リレーションシップ)

今回の分析では、以下のリレーションシップを構築します。これにより、販売データと在庫データを、店舗、商品、顧客、日付といった様々な切り口で柔軟に分析できるようになります。

ファクトテーブル ディメンションテーブル 結合キー リレーションシップ
販売ファクト 日付ディメンション 販売日時 → 日付 多対一(* : 1)
販売ファクト 店舗ディメンション 店舗ID 多対一(* : 1)
販売ファクト 商品ディメンション 商品ID 多対一(* : 1)
販売ファクト 顧客ディメンション 顧客ID 多対一(* : 1)
在庫ファクト 日付ディメンション 在庫日時 → 日付 多対一(* : 1)
在庫ファクト 店舗ディメンション 店舗ID 多対一(* : 1)
在庫ファクト 商品ディメンション 商品ID 多対一(* : 1)

データモデルの構築(リレーションシップの作成)

実際に、リレーションシップを作成する手順を以下に示します。

データセットが格納されているウェアハウスを表示し、「モデル レイアウト」をクリックします。

対象の列をドラッグして、マッピングを行います。

結合キーとリレーションシップが正しいことを確認し、リレーションシップを作成します。

同様の手順で、全てのリレーションシップを作成します。

作成後、リレーションシップの整合性を確認するために、リレーションシップの確認を行います。

販売ファクトテーブルの「…」 > 「リレーションシップの管理」を順にクリックします。

リレーションシップの管理では、設定した全てのリレーションシップを一覧で確認できます。

メジャーの追加

メジャーの役割

Power BIで柔軟な計算を行うために、DAX式を適応してメジャーを作成します。

DAXには200を超える関数・演算子・およびコンストラクトから成るライブラリが含まれているため、柔軟性の高い計算を行うことができます。

本記事で使用する主要なメジャー一覧

「売上パフォーマンス」「在庫最適化」のレポートにおいて利用するメジャーを以下に示します。

メジャー名 説明 使用レポート DAX式
前日売上高 前日の売上高 売上パフォーマンス 前日売上高 = CALCULATE( SUM('販売ファクト'[合計金額]), '販売ファクト'[販売日時] = TODAY() - 1 )
前々日比売上成長率 前日と前々日の売上比較 売上パフォーマンス 前々日比売上成長率 = VAR PreviousDaySales = CALCULATE(SUM('販売ファクト'[合計金額]),'販売ファクト'[販売日時] = TODAY() - 1) VAR DayBeforePreviousDaySales = CALCULATE(SUM('販売ファクト'[合計金額]),'販売ファクト'[販売日時] = TODAY() - 2) RETURN DIVIDE(PreviousDaySales - DayBeforePreviousDaySales, DayBeforePreviousDaySales)
月間売上目標 月ごとの売上目標値 売上パフォーマンス 月間売上目標 = 45000000
今月の累計売上高 今月の売上の合計 売上パフォーマンス 今月の累計売上高 = CALCULATE( SUM('販売ファクト'[合計金額]), FILTER( ALL('日付ディメンション'),YEAR('日付ディメンション'[日付]) = YEAR(TODAY()) && MONTH('日付ディメンション'[日付]) = MONTH(TODAY())) )
今月の売上達成率 今月の累計売上高/月間売上目標 売上パフォーマンス 今月の売上達成率 = DIVIDE( '販売ファクト'[今月の累計売上高], '販売ファクト'[月間売上目標] )
年間売上目標 年間の売上目標 売上パフォーマンス 年間売上目標 = 540000000
今年の累計売上高 今年の売上の合計 売上パフォーマンス 今年の累計売上高 = CALCULATE( SUM('販売ファクト'[合計金額]), FILTER( ALL('日付ディメンション'), YEAR('日付ディメンション'[日付]) = YEAR(TODAY()) ) )
今年の売上達成率 今年の累計売上高/年間売上目標 売上パフォーマンス 今年の売上達成率 = DIVIDE( '販売ファクト'[今年の累計売上高], '販売ファクト'[年間売上目標] )
前日総在庫評価額 前日の在庫評価額(数量×標準売価) 在庫最適化 前日総在庫評価額 = CALCULATE( SUMX( '在庫ファクト', '在庫ファクト'[在庫数量] * RELATED('商品ディメンション'[標準売価]) ), FILTER( '在庫ファクト', '在庫ファクト'[在庫日時] = TODAY()-1 ) )
欠品リスク商品数_前日 前日の在庫数量が閾値未満の商品数 在庫最適化 欠品リスク商品数_前日 = COALESCE( CALCULATE( COUNTROWS('在庫ファクト'), '在庫ファクト'[在庫数量] < 20, '在庫ファクト'[在庫日時] = TODAY() - 1 ), 0 )
過剰在庫商品数_前日 前日の在庫数量が閾値を超える商品数 在庫最適化 過剰在庫商品数_前日 = COALESCE( CALCULATE( COUNTROWS('在庫ファクト'), '在庫ファクト'[在庫数量] > 100, '在庫ファクト'[在庫日時] = TODAY() - 1 ), 0 )

メジャーの作成手順

実際に、メジャーを新規作成する手順を以下に示します。

メジャーを作成するためには、ファクトテーブルの「…」 > 「新しいメジャー」を順にクリックします。

以下の赤枠部分(数式バー)にDAX式を入力し、メジャーを追加します。

上記の手順で、それぞれのメジャー名とDAX式を適用することで、必要なメジャーを全て追加できます。

終わりに

今回は、データモデル編としてデータモデルの構築とメジャーの追加方法について紹介しました。

リレーションシップの設定やメジャーの作成を通じて、データの構造を整理し、分析に必要な指標を定義することで、レポートの基盤を整えました。

次回のレポート編では、「売上パフォーマンス」「在庫最適化」の2つの主要な分析レポートページの作成に取り組みます。

執筆担当者プロフィール
松井 耕太

松井 耕太(日本ビジネスシステムズ株式会社)

2023年度入社。Data系を扱う部門に所属しています。

担当記事一覧