【Vol.6】Power BIで前年同期比と目標達成状況を計算する|DAXメジャーの作り方

財務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
    )

YoY計算の注意点
このシリーズではDAXをシンプルにするため、選択期間の長さを判定していません。

(実務では期間の長さを判定するDAXを追加します)
1. 12か月以内の期間を選択する前提としている
2. 13か月以上選択すると、現在期間と比較対象の期間が重なり、正しい比較ができなくなる
3. 比較対象期間にデータがない場合は、「No prior year data」と表示される

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」で一つの値にまとめます。

Vol.5で説明した加重平均とは異なり、目標値は単純平均で算出します。これは学習を目的に簡略化したものです。
そのため、全ラインを選択した場合に算出される目標値は、厳密な全社目標を表すものではない点をご注意ください。

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関数
YoYSAMEPERIODLASTYEAR、CALCULATE
YoY TextIF、FORMAT
Target TextIF、AVERAGE、FORMAT

これで、ダッシュボードのカードビジュアルに必要な主要DAXが揃いました。

よくあるご質問(FAQ)

1. Time Intelligence(日付インテリジェンス)とは何ですか?

日付を基準に、前年同期比・前月比・累計などを計算するための仕組みです。

2. SAMEPERIODLASTYEARはどのような場合に使いますか?

選択された期間に対応する「前年の同じ期間」を取得したい時に使います。

3. VARはどのように使い、どのようなメリットがありますか?

VARで、計算途中の値に名前を付けて保存できます。DAXの構造が整理され、読みやすくなります。

4. FORMAT関数は何のために使いますか?

数値を「pt」「%」などのテキストに変換するために使います。

5. CALCULATE関数の使い方を教えてください。

フィルター条件を変更して、既存のメジャーを再計算するための関数です。

次回予告

次回のVol.7では、今回作成したメジャーをカードやグラフに配置し、スライサーと組み合わせながらダッシュボードを構築していきます。

目次