財務DX / Power BI Dashboard作成シリーズ
はじめに
前回のVol.5では、DAXの基本として「Measure(メジャー)」の考え方を確認し、「Operating Margin(営業利益率)」、「Defect Rate(不良率)」、「Inventory Turnover(在庫回転率)」、「Utilization Rate(設備稼働率)」という4つの基本メジャーを作成しました。
今回は、次回以降のビジュアル作成に向けて、Card Visual(カードビジュアル)に表示する「前年同期比(YoY)」と「目標達成状況」のDAXを作成します。
今回作成するDAXは、Vol.5で作成した4つの基本メジャーをベースにしています。
スクリーンショットについて
本シリーズでは、日本語版・英語版の記事で共通のスクリーンショットを使用するため、掲載しているPower BI Desktopのスクリーンショットは英語表示で統一しています。
本文ではメニュー名や操作内容を日本語でも併記しているため、日本語版Power BI Desktopをご利用の場合でも、そのまま読み進められます。
Step 1:前年同期比(YoY)を計算する
まず、カードに表示する期間のKPI値と、前年の同じ期間のKPI値を比較するDAX Measureを作成します。
Power BIには、前年・前月・累計などの時系列分析を行うための「Time Intelligence functions(日付インテリジェンス関数)」が用意されています。今回は、その中でも代表的なSAMEPERIODLASTYEARを使用して、前年同期比分析を行います。
Vol.4で「Calendar」tableを作成し、「Date table(日付テーブル)」として設定したのは、このような時系列分析を行うためでもあります。
まず、Operating Marginの前年同期比を計算します。Fact_monthly_kpiテーブルに、以下のDAX式を入力して、YoY Measureを作成します。
Operating Margin YoY =
VAR CurrentValue = [Operating Margin Measure]
VAR PriorYearValue =
CALCULATE(
[Operating Margin Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
DIVIDE(
CurrentValue - PriorYearValue,
PriorYearValue
)

このDAXでは、2つのVAR変数を定義しています。
1つ目はCurrentValue変数です。ここでは、Vol.5で作成したOperating Margin Measureから、現在選択されている期間の値を取得しています。
2つ目はPriorYearValue変数です。CALCULATEとSAMEPERIODLASTYEARを組み合わせて、前年の同じ期間のOperating Margin Measureの値を取得しています。
RETURNでは、これら2つの変数を使った計算結果を返します。
最後に、DIVIDEを使って、現在の値と前年の値との差を前年の値で割ることで、前年同期比の増減率を計算しています。
同じ考え方で、Utilization Rate、Inventory Turnover、Defect RateについてもYoY Measureを作成します。
Utilization Rate YoY =
VAR CurrentValue = [Utilization Rate Measure]
VAR PriorYearValue =
CALCULATE(
[Utilization Rate Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
DIVIDE(
CurrentValue - PriorYearValue,
PriorYearValue
)
Inventory Turnover YoY =
VAR CurrentValue = [Inventory Turnover Measure]
VAR PriorYearValue =
CALCULATE(
[Inventory Turnover Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
DIVIDE(
CurrentValue - PriorYearValue,
PriorYearValue
)
Defect Rate YoY =
VAR CurrentValue = [Defect Rate Measure]
VAR PriorYearValue =
CALCULATE(
[Defect Rate Measure],
SAMEPERIODLASTYEAR(Calendar[Date])
)
RETURN
DIVIDE(
CurrentValue - PriorYearValue,
PriorYearValue
)
Step 2:前年同期比の結果をわかりやすいテキストに変換する
Step 1で作成したYoY Measureは数値として返されます。例えば0.125という結果は、12.5%の増加を意味します。
カードビジュアルで見やすく表示するため、Step 1で作成したYoY Measureを呼び出し、「FORMAT」関数を使って、パーセント表示のテキストに変換します。
Operating Marginの場合、以下のDAX式を使って、YoY Text Measureを作成します。「FORMAT」関数によって、YoYを小数点以下1桁のパーセント表示に変換し、前年同期比がプラスの場合は「+」、マイナスの場合は「ー」を数字の前に表示します。
さらに、IF関数を使って、YoYの計算結果がBLANKの場合は、No prior year dataと表示させます。
Operating Margin YoY Text =
VAR Diff = [Operating Margin YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff, "+0.0%;-0.0%")
)

同じ方法で、残り3つのKPIについてもText Measureを作成します。
Utilization Rate YoY Text =
VAR Diff = [Utilization Rate YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff, "+0.0%;-0.0%")
)
Inventory Turnover YoY Text =
VAR Diff = [Inventory Turnover YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff, "+0.0%;-0.0%")
)
Defect Rate YoY Text =
VAR Diff = [Defect Rate YoY]
RETURN
IF(
ISBLANK(Diff),
"No prior year data",
"YoY " & FORMAT(Diff, "+0.0%;-0.0%")
)
Step 3:目標達成状況を判定する
次に、それぞれのKPIが目標を達成しているかどうかを判定するMeasureを作成します。
目標値は、ビジネスの状況に応じて変更されることが多いため、データとして持たせる方法が一般的です。一方、目標値があまり変わらない場合は、DAXに直接目標値を定義することもできます。
今回は、DAXで目標値を定義する方法を紹介するため、Operating MarginとDefect Rateの目標値はVol.3で配布したSample CSV Fileには用意せず、DAXで定義します。
シンプルにするため、Operating Marginの目標値を15%、Defect Rateの目標値を2%とします。
それぞれのKPIについて、「IF」関数を使って実績値と目標値を比較し、目標達成状況を判定するMeasureを作成します。カードビジュアルには、目標値と目標達成状況を表示し、目標を達成している場合は「✓ Achieved」、未達成の場合は「Not Achieved」と表示します。
なお、Defect Rateは「低いほど良い」指標なので、他のKPIとは異なり、実績値がTarget以下の場合に「✓ Achieved」となる点に注意してください。
Operating Margin Target Text =
IF(
[Operating Margin Measure] >= 0.15,
"Target: 15%; ✓ Achieved",
"Target: 15%; Not Achieved"
)
Defect Rate Target Text =
IF(
[Defect Rate Measure] <= 0.02,
"Target: 2%; ✓ Achieved",
"Target: 2%; Not Achieved"
)

Utilization RateとInventory Turnoverについては、Sample CSV Fileに目標値(Target)の列を用意しましたので、このTarget列の目標値を実績値と比較し、目標を達成しているかどうかをDAXで判定します。
また、DAXをシンプルにする目的でAVERAGE()を使ってTargetの値を取得しています。実務では、Targetのデータ構造に応じて適切な方法で目標値を取得してください。
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"
)
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"
)

Step 4:ファイルを保存する
作成が完了したら、「Ctrl + S」でファイルを保存します。
Vol.5で作成した4つの基本メジャーに加えて、今回作成したYoY Measure(4)、YoY Text(4)、Target Text(4)の合計12個のメジャーが追加された状態になります。
次回のVol.7「スライサーとフィルター」では、今回作成したMeasureを実際のカードビジュアルに配置し、期間スライサー・Line スライサーや、各種グラフと組み合わせながらDashboardを構築していきます。
よくあるご質問
1. Time Intelligenceとは何ですか?
Power BIの「Time Intelligence(日付インテリジェンス)」とは、日付を基準として、前年同期比、前月比、累計、年度累計などの時系列分析を行うための機能です。
今回作成したYoY Measureでは、SAMEPERIODLASTYEARを使って前年の同じ期間を取得しています。
Time Intelligenceを利用するには、適切なCalendar Tableを用意し、Date Tableとして設定しておくことが重要です。
本シリーズでは、Vol.4で作成したCalendar Tableを使用しています。
2. SAMEPERIODLASTYEARはどのような場合に使いますか?
「SAMEPERIODLASTYEAR」は、現在選択されている期間に対応する前年の同じ期間を取得するときに使用します。
例えば、2026年1月~6月を選択している場合、前年の2025年1月~6月を取得して比較できます。
今回のDashboardでは、選択した期間のKPIと前年同期のKPIを比較するために使用しています。
「DATEADD」などでも期間を移動できますが、前年同期との比較という目的であれば、「SAMEPERIODLASTYEAR」はシンプルに記述できます。
3. VARはどのように使い、どのようなメリットがありますか?
「VAR」は、DAXの計算途中の値に名前を付けて、一時的に保存するために使用します。
「VAR」を使う主なメリットは、DAXを読みやすくできること、同じ計算を何度も記述せずに済むこと、複雑な計算を段階的に整理できることです。
DAXが複雑になるほど、「VAR」を使って計算を分解することが重要になります。
4. FORMAT関数は何のために使いますか?
「FORMAT」関数は、数値を指定した書式をテキスト(文字列)に変換するために使用します。
今回のように、YoYの数値を見やすく表示するために、「FORMAT」関数を使用して、小数点以下の桁数とパーセント表示を指定しています。
5. カードビジュアルはどのような場合に使用しますか?
経営Dashboardのカードビジュアルには、通常、「売上高」「営業利益率」、「前年同期比」など、「現在の状態をすぐに把握するための重要なKPI数値」を載せます。
一方、月別の推移や前年との長期的な変化を確認したい場合は、Line Chartなどのグラフのほうが適しています。
今回のDashboardでは、CardにKPIの現在値、前年同期比、目標達成状況を表示し、「現在の業績を短時間で把握する」ことを目的としています。
期間を変更した場合は、選択した期間に応じてCardの値も変化するため、特定の年・四半期・月のKPIを確認することもできます。
まとめ
今回は、Vol.5で作成した4つの基本メジャーをベースに、前年同期比(YoY)と目標達成状況を追加しました。
| 追加したDAXメジャー | 使用した主なDAX関数 |
|---|---|
| YoY | SAMEPERIODLASTYEAR、CALCULATE、DIVIDE |
| YoY Text | IF、FORMAT |
| Target Text | IF、AVERAGE |
これで、カードビジュアルに表示するための主要なDAXが揃いました。
次回予告
次回のVol.7では、今回作成したMeasureを実際のビジュアルに配置し、スライサーやグラフと組み合わせながらDashboardを構築していきます。

