📈 STEP 50: 実践プロジェクト2 – KPIダッシュボード(Power BI)
経営層向けの重要指標ダッシュボードをPower BIで構築しよう!
📋 プロジェクト概要
| テーマ | 経営KPIダッシュボード |
| ツール | Power BI Desktop / Service |
| データ | 売上、顧客、財務データ(SaaS企業想定) |
| 目的 | 経営層の迅速な意思決定支援 |
| 所要時間 | 5時間 |
🎯 1. プロジェクトの背景
ビジネス要件
架空のSaaS企業「テックソリューションズ株式会社」のCEOは、毎朝5分で会社の健康状態を把握したいと考えています。現在は各部門から個別にレポートを受け取っており、全体像の把握に時間がかかっています。
| KPI | 説明 | 重要性 |
|---|---|---|
| MRR | 月次経常収益(Monthly Recurring Revenue) | サブスクリプションビジネスの基本指標 |
| ARR | 年間経常収益(MRR × 12) | 年間の収益規模を把握 |
| チャーン率 | 顧客解約率 | 顧客維持の健全性を測定 |
| LTV | 顧客生涯価値(Lifetime Value) | 顧客1人あたりの総収益 |
| CAC | 顧客獲得コスト(Customer Acquisition Cost) | 新規顧客獲得にかかる費用 |
| LTV/CAC比率 | 顧客価値と獲得コストの比率 | 3以上が健全、事業の持続性を判断 |
💾 2. データモデル設計
スタースキーマ設計
効率的なデータモデルのため、スタースキーマを採用します。中心にファクトテーブル、周囲にディメンションテーブルを配置します。
| カラム名 | データ型 | 説明 |
|---|---|---|
| 日付キー | 整数 | D_日付への外部キー |
| 顧客キー | 整数 | D_顧客への外部キー |
| プランキー | 整数 | D_プランへの外部キー |
| 売上金額 | 通貨 | 取引の売上金額 |
| 数量 | 整数 | ライセンス数など |
| 利益 | 通貨 | 売上から原価を引いた額 |
| カラム名 | データ型 | 説明 |
|---|---|---|
| 日付キー | 整数 | D_日付への外部キー |
| 顧客キー | 整数 | D_顧客への外部キー |
| 契約開始日 | 日付 | 契約の開始日 |
| 契約終了日 | 日付 | 契約の終了日(更新時は更新) |
| 契約状態 | テキスト | アクティブ/新規/解約/休止 |
| MRR | 通貨 | 月次経常収益 |
| テーブル名 | 主なカラム |
|---|---|
| D_日付 | 日付キー、日付、年、四半期、月、週、曜日 |
| D_顧客 | 顧客キー、顧客名、業種、従業員数、獲得チャネル、地域 |
| D_プラン | プランキー、プラン名、月額料金、カテゴリ、機能制限 |
📊 3. 重要DAXメジャーの作成
基本KPIメジャー
SaaSビジネスの健全性を測定するための基本メジャーを作成します。
// MRR(月次経常収益)
MRR =
CALCULATE(
SUM(F_契約[MRR]),
F_契約[契約状態] = "アクティブ"
)
// ARR(年間経常収益)
ARR = [MRR] * 12
// 新規MRR
新規MRR =
CALCULATE(
SUM(F_契約[MRR]),
F_契約[契約状態] = "新規"
)
// 解約MRR
解約MRR =
CALCULATE(
SUM(F_契約[MRR]),
F_契約[契約状態] = "解約"
)
※モバイルでは横スクロールできます
// チャーン率(解約率)
チャーン率 =
DIVIDE(
[解約MRR],
[MRR] + [解約MRR]
)
// アクティブ顧客数
アクティブ顧客数 =
CALCULATE(
DISTINCTCOUNT(F_契約[顧客キー]),
F_契約[契約状態] = "アクティブ"
)
// ARPU(顧客あたり平均収益)
ARPU =
DIVIDE([MRR], [アクティブ顧客数])
// LTV(顧客生涯価値)
LTV =
DIVIDE([ARPU], [チャーン率])
※モバイルでは横スクロールできます
// 前月MRR
前月MRR =
CALCULATE(
[MRR],
DATEADD(D_日付[日付], -1, MONTH)
)
// 前月比
MRR前月比 =
DIVIDE(
[MRR] - [前月MRR],
[前月MRR]
)
// 前年同月MRR
前年同月MRR =
CALCULATE(
[MRR],
SAMEPERIODLASTYEAR(D_日付[日付])
)
// 前年比
MRR前年比 =
DIVIDE(
[MRR] - [前年同月MRR],
[前年同月MRR]
)
// YTD(年初来累計)
MRR_YTD =
TOTALYTD(
[MRR],
D_日付[日付]
)
// 3ヶ月移動平均
MRR_3MA =
AVERAGEX(
DATESINPERIOD(
D_日付[日付],
LASTDATE(D_日付[日付]),
-3,
MONTH
),
[MRR]
)
※モバイルでは横スクロールできます
🎨 4. ダッシュボード構築
ページ構成とレイアウト
経営層が5分で把握できるよう、シンプルで直感的なレイアウトを設計します。
| 領域 | ビジュアル | 表示内容 |
|---|---|---|
| ヘッダー | タイトル + スライサー | 「経営KPIダッシュボード」+ 期間選択 |
| 上段(6列) | KPIカード × 6 | MRR、ARR、顧客数、ARPU、LTV、チャーン率 |
| 中段左 | 折れ線グラフ | MRR推移とトレンド(移動平均付き) |
| 中段右 | 積み上げ棒グラフ | プラン別MRR構成 |
| 下段左 | 円グラフ | チャネル別顧客獲得 |
| 下段右 | ヒートマップ | コホート分析(顧客維持率) |
| 手順 | 操作 | 詳細 |
|---|---|---|
| Step 1 | カードビジュアル追加 | 視覚化ペインから「カード」を選択 |
| Step 2 | フィールド設定 | フィールドに[MRR]メジャーをドラッグ |
| Step 3 | 書式設定 | 通貨フォーマット、小数点なし |
| Step 4 | 条件付き書式 | 前月比による色分け(緑:増加、赤:減少) |
| Step 5 | 参照ラベル追加 | 前月比を小さく表示(例:↑5.2%) |
| 手順 | 操作 | 詳細 |
|---|---|---|
| Step 1 | 折れ線グラフ追加 | 視覚化ペインから「折れ線グラフ」を選択 |
| Step 2 | 軸とフィールド設定 | X軸:D_日付[月]、Y軸:[MRR] |
| Step 3 | 系列追加(任意) | 凡例:[プラン名]でプラン別表示 |
| Step 4 | トレンドライン追加 | アナリティクス → トレンドライン → 線形 |
| Step 5 | 予測追加 | アナリティクス → 予測 → 期間:3ヶ月 |
// KPIカードの色制御用
MRR色 =
IF(
[MRR前月比] > 0,
"#28a745", // 緑(増加)
"#dc3545" // 赤(減少)
)
// 前月比表示用(矢印付き)
MRR前月比表示 =
VAR 比率 = [MRR前月比]
RETURN
IF(
比率 > 0,
"↑ " & FORMAT(比率, "0.0%"),
"↓ " & FORMAT(ABS(比率), "0.0%")
)
※モバイルでは横スクロールできます
📑 5. 詳細分析ページ
サブページの構成
メインページから詳細情報にドリルダウンできるよう、複数のサブページを用意します。
| ページ名 | 主な分析内容 | 使用ビジュアル |
|---|---|---|
| 顧客分析 | 顧客セグメント、獲得チャネル、解約理由 | 散布図、ツリーマップ、ウォーターフォール |
| 財務分析 | 収益構造、コスト分析、利益率推移 | 積み上げ棒、ウォーターフォール、KPIカード |
| マーケティング | CAC、チャネル効果、コンバージョン | ファネル、折れ線、比較棒グラフ |
| コホート分析 | 月別顧客維持率、LTV推移 | ヒートマップ、マトリックス |
// コホート月(契約開始月)
コホート月 =
CALCULATE(
MIN(F_契約[契約開始日]),
ALLEXCEPT(F_契約, F_契約[顧客キー])
)
// 経過月数
経過月数 =
DATEDIFF(
[コホート月],
MAX(D_日付[日付]),
MONTH
)
// コホート別維持率
コホート維持率 =
VAR 初期顧客数 =
CALCULATE(
DISTINCTCOUNT(F_契約[顧客キー]),
FILTER(
ALL(F_契約),
MONTH(F_契約[契約開始日]) = MONTH([コホート月])
)
)
VAR 現在顧客数 = [アクティブ顧客数]
RETURN
DIVIDE(現在顧客数, 初期顧客数)
※モバイルでは横スクロールできます
📝 STEP 50 のまとめ
- SaaS KPI:MRR、チャーン率、LTV、CAC の計算方法
- DAX応用:時系列インテリジェンス関数(DATEADD、SAMEPERIODLASTYEAR、TOTALYTD)
- データモデル:スタースキーマ設計(ファクト・ディメンション)
- ビジュアル:KPIカード、折れ線グラフ、ヒートマップ、条件付き書式
- ページ構成:メインKPI + 詳細分析ページの設計
経営KPIダッシュボードはシンプルさが命です!
経営層は時間がないため、5分以内で重要な情報を把握できる設計が求められます。美しいビジュアルよりも、actionable insights(行動につながる洞察)を提供することを最優先にしましょう!
📝 実践演習
MRRメジャーと、前月比を表示するKPIカードを作成してください。
Step 1:メジャー作成
MRR =
CALCULATE(
SUM(F_契約[MRR]),
F_契約[契約状態] = "アクティブ"
)
前月MRR =
CALCULATE(
[MRR],
DATEADD(D_日付[日付], -1, MONTH)
)
MRR前月比 =
DIVIDE([MRR] - [前月MRR], [前月MRR])
Step 2:カードビジュアル設定
| ビジュアル | カード |
| フィールド | [MRR] |
| 書式 | 通貨、小数点なし |
| 条件付き書式 | 前月比で色分け(緑/赤) |
完成イメージ:¥5,000,000(↑ 5.2%)
LTV/CAC比率を計算し、健全性を判定するメジャーを作成してください。3以上を「健全」、1-3を「注意」、1未満を「危険」と表示します。
前提メジャー:
// CAC(顧客獲得コスト)
CAC =
DIVIDE(
SUM(F_マーケティング[費用]),
[新規顧客数]
)
// LTV/CAC比率
LTV_CAC比率 =
DIVIDE([LTV], [CAC])
健全性判定メジャー:
LTV_CAC判定 =
VAR 比率 = [LTV_CAC比率]
RETURN
SWITCH(
TRUE(),
比率 >= 3, "✅ 健全",
比率 >= 1, "⚠️ 注意",
"🚨 危険"
)
// 色制御用
LTV_CAC色 =
VAR 比率 = [LTV_CAC比率]
RETURN
SWITCH(
TRUE(),
比率 >= 3, "#28a745",
比率 >= 1, "#ffc107",
"#dc3545"
)
判定基準:
- 3以上:投資効率が高く、成長に投資可能
- 1-3:収益性はあるが、改善の余地あり
- 1未満:顧客獲得コストが高すぎる、事業モデル要見直し
コホート分析用のヒートマップを作成し、月別の顧客維持率を可視化してください。
Step 1:コホートテーブル作成(Power Query)
// 顧客ごとの契約開始月を取得
コホート =
ADDCOLUMNS(
VALUES(F_契約[顧客キー]),
"コホート月",
CALCULATE(MIN(F_契約[契約開始日]))
)
Step 2:維持率メジャー
コホート維持率 =
VAR 経過月 = [経過月数]
VAR コホート = SELECTEDVALUE(コホート[コホート月])
VAR 初期顧客 =
CALCULATE(
DISTINCTCOUNT(F_契約[顧客キー]),
コホート[コホート月] = コホート,
ALL(D_日付)
)
VAR 残存顧客 =
CALCULATE(
DISTINCTCOUNT(F_契約[顧客キー]),
F_契約[契約状態] = "アクティブ"
)
RETURN
DIVIDE(残存顧客, 初期顧客)
Step 3:ヒートマップ設定
| ビジュアル | マトリックス |
| 行 | コホート月 |
| 列 | 経過月数 |
| 値 | [コホート維持率] |
| 条件付き書式 | 背景色のグラデーション(緑→黄→赤) |
活用方法:
- 維持率が急落する月を特定
- 特定コホートの傾向分析
- 施策効果の前後比較
❓ よくある質問
応用例:
- 小売:客単価、来店頻度、在庫回転率
- 製造:稼働率、不良率、リードタイム
- 金融:AUM、手数料収入、デフォルト率
チェックポイント:
- 日付テーブルが「日付テーブルとしてマーク」されているか
- 日付列に欠損がないか(連続した日付が必要)
- リレーションシップが正しく設定されているか
方法1:目標値テーブルを作成
方法2:パラメーター機能で動的目標設定
方法3:KPIビジュアルで達成率を表示
目標値との差異を視覚的に示すことで、より actionable なダッシュボードになります。
学習メモ
BIツール入門 - Step 50