財務DX / Power BI KPI ダッシュボード作成シリーズ
はじめに
前回のVol.5では、4つの基本KPIメジャー(営業利益率・設備稼働率・在庫回転率・不良率)を作成しました。
今回は、ダッシュボードのカードビジュアルに表示するために、「前年同期比(YoY)」と「目標達成状況(Target Text)」をDAXで作成します。
スクリーンショットについて
本シリーズでは、日本語版・英語版の記事で共通のスクリーンショットを使用するため、掲載しているPower BI Desktopのスクリーンショットは英語表示で統一しています。
本文ではメニュー名や操作内容を日本語でも併記しているため、日本語版Power BI Desktopをご利用の場合でも、そのまま読み進められます。
Step 1:前年同期比(YoY)を計算する
前年同期比(YoY)は、「現在の値」を「前年の同じ期間の値」と比較した指標です。
営業利益率、設備稼働率、不良率のような「率」の指標は差(pt / percentage point)で、在庫回転率(回数)は変化率(%)で表します。
Power BIには、前年の同じ期間を取得するための「Time Intelligence(日付インテリジェンス)」関数が用意されています。今回はその中のSAMEPERIODLASTYEARを使います。
1. Operating Margin(営業利益率)のYoY
まず、営業利益率のYoYメジャーを作成します。
Fact_monthly_kpiテーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
Operating Margin YoY =
VAR CurrentValue = [Operating Margin Measure]
VAR PriorYearValue =
CALCULATE(
[Operating Margin Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
IF(
ISBLANK(CurrentValue) || ISBLANK(PriorYearValue),
BLANK(),
CurrentValue - PriorYearValue
)

このDAXに含まれている要素の意味は以下のとおりです。
- VAR:DAXの計算途中の値に名前をつけて、一時的に保存するための仕組み
- CurrentValue:現在選択されている期間の営業利益率
- PriorYearValue:選択されている期間の前年同じ期間の営業利益率(SAMEPERIODLASTYEARで取得)
- CALCULATE:指定した期間(前年期間)にフィルターを切り替えて、メジャーを再計算する
- RETURN:現在値と前年値の差を返す
2. Utilization Rate(設備稼働率)のYoY
続いて、設備稼働率のYoYメジャーを作成します。
Fact_equipment_utilization テーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
Utilization Rate YoY =
VAR CurrentValue = [Utilization Rate Measure]
VAR PriorYearValue =
CALCULATE(
[Utilization Rate Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
IF(
ISBLANK(CurrentValue) || ISBLANK(PriorYearValue),
BLANK(),
CurrentValue - PriorYearValue
)

3. Inventory Turnover(在庫回転率)のYoY
次は、在庫回転率のYoYメジャーを作成します。在庫回転率の単位は「回数」なので、前年同期比は、「DIVIDE」関数を使って、 変化率(%) を計算します。
Fact_inventory_turnover テーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
Inventory Turnover YoY =
VAR CurrentValue = [Inventory Turnover Measure]
VAR PriorYearValue =
CALCULATE(
[Inventory Turnover Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
DIVIDE(
CurrentValue - PriorYearValue,
PriorYearValue
)

4. Defect Rate(不良率)のYoY
最後は、不良率のYoYメジャーを作成します。
Fact_defect_rate テーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
Defect Rate YoY =
VAR CurrentValue = [Defect Rate Measure]
VAR PriorYearValue =
CALCULATE(
[Defect Rate Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
IF(
ISBLANK(CurrentValue) || ISBLANK(PriorYearValue),
BLANK(),
CurrentValue - PriorYearValue
)

Step 2:YoYを見やすいテキストに変換する
Step 1で作成したYoY Measureは「数値」です。カードビジュアルで前年比をより見やすく表示するため、次のステップでは各KPIに対応するYoY Textメジャーを作成します。
- 営業利益率・稼働率・不良率 ➜ pt表示(+1.2 pt)
- 在庫回転率 ➜ %表示(+3.4%)
- BLANKの場合 ➜ “No prior year data”
1. Operating Margin YoY Text
Fact_monthly_kpiテーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
Operating Margin YoY Text =
VAR Diff = [Operating Margin YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff * 100, "+0.0;-0.0") & " pt"
)

2. Utilization Rate YoY Text
Fact_equipment_utilization テーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
Utilization Rate YoY Text =
VAR Diff = [Utilization Rate YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff * 100, "+0.0;-0.0") & " pt"
)

3. Inventory Turnover YoY Text
Fact_inventory_turnover テーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
Inventory Turnover YoY Text =
VAR Diff = [Inventory Turnover YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff, "+0.0%;-0.0%")
)

4. Defect Rate YoY Text
Fact_defect_rate テーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」します。
不良率は低いほど良い数値なので、マイナスの場合は改善を意味します。
Defect Rate YoY Text =
VAR Diff = [Defect Rate YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff * 100, "+0.0;-0.0") & " pt"
)

Step 3:目標達成状況を判定する
最後に、各KPIが目標を達成しているかどうかを判定するメジャーを作成します。
- Target: 12.0%; ✓ Achieved
- Target: 8.5%; Not Achieved
サンプルデータには、KPIごとに Target(目標値) が用意されています。ラインごと・年ごとに設定されていますが、今回はDAXをシンプルにするため、選択範囲の目標値を「AVERAGE」で一つの値にまとめます。
1. Operating Margin Target Text
Fact_monthly_kpiテーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」を押します。
Operating Margin Target Text =
VAR TargetValue =
AVERAGE(Fact_monthly_kpi[Target Operating Margin])
RETURN
IF(
[Operating Margin Measure] >= TargetValue,
"Target: " & FORMAT(TargetValue, "0.0%") & "; ✓ Achieved",
"Target: " & FORMAT(TargetValue, "0.0%") & "; Not Achieved"
)

2. Utilization Rate Target Text
Fact_equipment_utilizationテーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」を押します。
Utilization Rate Target Text =
VAR TargetValue =
AVERAGE(Fact_equipment_utilization[Target Utilization Rate])
RETURN
IF(
[Utilization Rate Measure] >= TargetValue,
"Target: " & FORMAT(TargetValue, "0.0%") & "; ✓ Achieved",
"Target: " & FORMAT(TargetValue, "0.0%") & "; Not Achieved"
)

3. Inventory Turnover Target Text
Fact_inventory_turnoverテーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」を押します。
Inventory Turnover Target Text =
VAR TargetValue =
AVERAGE(Fact_inventory_turnover[Target Inventory Turnover])
RETURN
IF(
[Inventory Turnover Measure] >= TargetValue,
"Target: " & FORMAT(TargetValue, "0.0") & "; ✓ Achieved",
"Target: " & FORMAT(TargetValue, "0.0") & "; Not Achieved"
)

4. Defect Rate Target Text
Fact_defect_rateテーブルを選択し、数式バーに以下のDAX式を入力し、「Enter」を押します。
不良率は低いほど良い指標なので、判定が逆になることに注意してください。
Defect Rate Target Text =
VAR TargetValue =
AVERAGE(Fact_defect_rate[Target Defect Rate])
RETURN
IF(
[Defect Rate Measure] <= TargetValue,
"Target: " & FORMAT(TargetValue, "0.0%") & "; ✓ Achieved",
"Target: " & FORMAT(TargetValue, "0.0%") & "; Not Achieved"
)

Step 4:ファイルを保存する
メジャーの作成が終わったら、「Ctrl + S」で保存します。
まとめ
今回は、Vol.5で作成した4つの基本メジャーをベースに、「前年同期比(YoY)」と「目標達成状況(Target Text)」のメジャーを作成しました。
| 種類 | 使用した主なDAX関数 |
|---|---|
| YoY | SAMEPERIODLASTYEAR、CALCULATE |
| YoY Text | IF、FORMAT |
| Target Text | IF、AVERAGE、FORMAT |
これで、ダッシュボードのカードビジュアルに必要な主要DAXが揃いました。
よくあるご質問(FAQ)
1. Time Intelligence(日付インテリジェンス)とは何ですか?
日付を基準に、前年同期比・前月比・累計などを計算するための仕組みです。
2. SAMEPERIODLASTYEARはどのような場合に使いますか?
選択された期間に対応する「前年の同じ期間」を取得したい時に使います。
3. VARはどのように使い、どのようなメリットがありますか?
VARで、計算途中の値に名前を付けて保存できます。DAXの構造が整理され、読みやすくなります。
4. FORMAT関数は何のために使いますか?
数値を「pt」「%」などのテキストに変換するために使います。
5. CALCULATE関数の使い方を教えてください。
フィルター条件を変更して、既存のメジャーを再計算するための関数です。
次回予告
次回のVol.7では、今回作成したメジャーをカードやグラフに配置し、スライサーと組み合わせながらダッシュボードを構築していきます。

