Calculation Groups in Power BI: Reusable DAX Patterns

Master Power BI calculation groups to eliminate DAX duplication — build reusable time intelligence, currency conversion, and formatting patterns that scale across the entire semantic model.

E
ECOSIRE Research and Development Team
|2026年3月19日3 分で読める648 語数|

Power BI の計算グループ: 再利用可能な DAX パターン

収益、総利益、EBITDA、純利益、その他 36 の 40 のメジャーを含む財務モデルを考えてみましょう。ここで、ビジネスは、当期、前期間、前期比変化、YTD、前 YTD、および YTD 変化に対して利用可能な各メジャーを必要としています。 240小節ですね。次に、3 つの通貨での通貨換算が必要になります。 720小節ですね。

計算グループがなければ、これはメンテナンスの悪夢です。計算グループを使用すると、タイム インテリジェンス ロジックと通貨換算ロジックを 1 回記述するだけで、すべての基本メジャーに自動的に適用されます。 40 メジャーは 40 メジャーのままで、残りは計算項目によって実行されます。

このガイドでは、優先順位ルール、SELECTEDMEASURE() テクニック、同じモデル内での複数の計算グループの結合などの高度なパターンを含む、概念的な基礎から実際の実装まで計算グループについて説明します。

重要なポイント

  • 計算グループは、数百の冗長なタイム インテリジェンスと比較尺度をいくつかの計算項目に置き換えます。
  • SELECTEDMEASURE() は、現在評価コンテキストにあるメジャーを参照します - 再利用性の鍵
  • 優先順位は、複数のグループが同時に適用される場合にどの計算グループが優先されるかを制御します
  • 計算項目内の FORMAT() 文字列により、メジャーを意識した数値書式設定が可能になります
  • 計算グループを作成するには表形式エディターが必要です (Power BI Desktop UI ではネイティブに使用できません)
  • 複数の計算グループが相互作用可能 - タイム インテリジェンス グループ + 通貨グループ + シナリオ グループが連携して動作します
  • 計算グループを使用して、仮定のシナリオ、単位の切り替え、表示通貨の選択を実装できます。
  • ISSELECTEDMEASURE() を使用して、特定の計算グループからメジャーを除外できます。

計算グループが解決する問題

計算グループが登場する以前、Power BI のタイム インテリジェンスは、基本メトリックと時間計算の組み合わせごとに個別のメジャーを作成することを意味していました。

Revenue = SUM(Sales[Amount])
Revenue PY = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
Revenue YTD = CALCULATE([Revenue], DATESYTD('Date'[Date]))
Revenue YTD PY = CALCULATE([Revenue], DATESYTD(SAMEPERIODLASTYEAR('Date'[Date])))
Revenue vs PY = [Revenue] - [Revenue PY]
Revenue vs PY % = DIVIDE([Revenue vs PY], [Revenue PY])

これが収益の 6 つの指標です。粗利益、EBITDA、営業経費、およびさらに 7 つの KPI についても繰り返します。突然、66 個のメジャーがあり、すべてほぼ同じ式が含まれます。企業がタイム インテリジェンス ロジックの変更を要求した場合 (たとえば、暦年の代わりに会計年度を使用するなど)、すべてのメジャーを更新する必要があります。

計算グループは、「何を測定するか」(基本尺度)と「どのように比較するか」(計算項目)を分離することでこれを解決します。 6 つの項目を含む 1 つの計算グループは、モデル内のすべての基本メジャーに対して 5 つの追加メジャーを置き換えます。


コアコンセプト

計算グループ: 正確に 1 つの列を持つセマンティック モデル内の特別なテーブル。列には「計算項目」が含まれています。各項目は、スライサーで選択したとき、またはマトリックス/グラフで使用したときの基本メジャーの計算方法を変更します。

計算項目: SELECTEDMEASURE() を使用して現在評価されているメジャーを参照する名前付き DAX 式。各計算項目は、どの期間または比較モードを表示するかを制御するスライサー内の行として表示されます。

SELECTEDMEASURE(): 計算グループのコンテキストで現在評価されているメジャーの値を返す DAX 関数。これにより、計算グループが再利用可能になります。同じ項目式がモデル内のすべてのメジャーに適用されます。

優先順位: 複数の計算グループが同時にアクティブになっている場合 (たとえば、ユーザーがタイム インテリジェンス スライサーから「前年」を選択し、通貨スライサーから「USD」を選択した場合)、優先順位によってどのグループの計算項目が最初に適用されるかが決まります。


表形式エディタを使用した計算グループの作成

Power BI Desktop には、計算グループを作成するためのネイティブ UI がありません (2026 年初頭の時点)。これらは外部ツール、Tabular Editor 2 (無料) または Tabular Editor 3 (商用) を使用して作成する必要があります。

セットアップ:

  1. GitHub から Tabular Editor 2 をダウンロードします (無料、オープンソース)
  2. Power BI Desktop の場合: [外部ツール] → [表形式エディタ]
  3. 開いている Power BI モデルに接続された表形式エディターが開きます。

タイム インテリジェンス計算グループの作成:

  1. 表形式エディタで、「表」を右クリック→「新規作成」→「計算グループ」
  2. Time Intelligence という名前を付けます。
  3. グループは自動的に 1 つの列を作成します。その列の名前を Time Calculation に変更します。
  4. グループを右クリック → 計算項目の追加 → 各項目に名前を付けます

計算項目:当期(ベースライン)

SELECTEDMEASURE()

このアイテムは、メジャーを変更せずにそのまま返します。この項目が選択されている場合、すべてのメジャーは通常の値を表示します。

計算項目:前年度

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR('Date'[Date])
)

計算項目:年初から現在まで

CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD('Date'[Date])
)

計算項目:前年度YTD

CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD(SAMEPERIODLASTYEAR('Date'[Date]))
)

計算項目:前年比

SELECTEDMEASURE() -
CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR('Date'[Date])
)

計算項目:前年比増減率

DIVIDE(
    SELECTEDMEASURE() -
    CALCULATE(
        SELECTEDMEASURE(),
        SAMEPERIODLASTYEAR('Date'[Date])
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        SAMEPERIODLASTYEAR('Date'[Date])
    ),
    BLANK()
)

これらの項目を作成したら、表形式エディター (Ctrl+S) で保存します。変更は Power BI Desktop に同期されます。

レポートで、Time Calculation 列を使用してスライサーを追加します。ユーザーが「前年」を選択すると、マトリックスまたはチャートのすべてのメジャーに前年の値が自動的に表示されます。


FORMAT 文字列テクニック

「YoY Change %」項目で問題が発生します。この項目は小数 (15% 成長の場合は 0.15) を返しますが、基本メジャーの書式文字列は通貨 (例: "$#,0") です。パーセンテージは「$0.15」と表示されますが、形式が間違っています。

解決策は、計算項目に書式文字列式を設定することです。表形式エディターでは、各計算項目には、使用する書式文字列を返す DAX 式を含めることができる「書式文字列式」プロパティがあります。

前年比変化率 % の書式文字列式:

"0.0%"

通貨金額の文字列式の書式設定:

"$#,0"

選択したメジャーに基づく動的書式文字列:

IF(
    ISSELECTEDMEASURE([Units Sold], [Order Count]),
    "#,0",
    "$#,0.00"
)

書式文字列式は ISSELECTEDMEASURE() を使用してコンテキスト内の基本メジャーを検出し、適切な書式文字列を返します。これは、単一の「前年比変化率 (YoY Change %)」計算項目を収益メジャーのパーセンテージとして、また単位メジャーのカウント変化としてフォーマットできる方法です。


通貨換算計算グループ

通貨換算は、計算グループのもう 1 つの古典的な使用例です。計算グループがない場合、3 つの通貨で 40 のメジャーを含むモデルには 120 のメジャーが必要です。計算グループの場合、本来の40個に加えて3個の計算項目が必要となります。

セットアップ: モデルには、通貨および日付別の為替レートを含む CurrencyRates テーブルと、スライサーの Currency ディメンション テーブルが必要です。

計算項目:USD(基軸通貨)

SELECTEDMEASURE()

計算項目:ユーロ

SUMX(
    VALUES('Date'[Date]),
    CALCULATE(SELECTEDMEASURE()) *
    CALCULATE(
        MAX(CurrencyRates[Rate]),
        CurrencyRates[ToCurrency] = "EUR"
    )
)

計算項目:GBP

SUMX(
    VALUES('Date'[Date]),
    CALCULATE(SELECTEDMEASURE()) *
    CALCULATE(
        MAX(CurrencyRates[Rate]),
        CurrencyRates[ToCurrency] = "GBP"
    )
)

SUMX ループは各日付を繰り返し、その日付の為替レートを適用します。日付スライサーが異なる為替レートの期間にまたがる場合でも、通貨を正しく処理します。通貨グループの Precedence をタイム インテリジェンス グループよりも低く設定します (表形式エディターの用語では、数値が小さい = 優先順位が高くなります)。


複数の計算グループ間の優先ルール

ユーザーが 2 つの計算グループから項目を同時に選択すると (例: タイム インテリジェンスから "前年度"、通貨から "EUR")、Power BI はそれらを優先順位で評価します。

優先順位 は、各計算グループの整数として設定されます。整数が大きいほど、最初に (または「外側」で) 評価されます。

例:

  • タイム インテリジェンス: 優先順位 = 20 (内部評価)
  • 通貨換算: 優先順位 = 10 (外部評価)

この設定では、通貨換算項目がタイム インテリジェンス項目をラップします。 「EUR」+「前年度」を選択すると、次の計算が行われます。EUR への変換 (外部計算)、前年度値 (内部計算)。優先順位は、計算の意味上の意図と一致する必要があります。

経験則: 日付コンテキスト (タイム インテリジェンス) を変更する計算グループは、より高い優先順位を持つ必要があります (優先順位が低く、内部/後で評価されます)。日付計算 (通貨変換、単位変換) の後に値を変更する計算グループの優先順位は低くなります (外側/最初に評価される)。


計算グループからの特定のメジャーの除外

すべてのメジャーがすべての計算グループに応答する必要があるわけではありません。現在のレポート日付を返す「レポート日付」メジャーは、タイム インテリジェンスによって変更されるべきではありません。毎年設定される「目標値」指標は、前年度に換算されるべきではありません。

特定のメジャーを除外するには、計算項目で ISSELECTEDMEASURE() を使用します。

IF(
    ISSELECTEDMEASURE([Report Date], [Target Value], [Budget]),
    SELECTEDMEASURE(),
    CALCULATE(
        SELECTEDMEASURE(),
        SAMEPERIODLASTYEAR('Date'[Date])
    )
)

これにより、[レポート日]、[目標値]、および [予算] に対して「前年度」項目が変更されずにパススルーされ、タイム インテリジェンスの選択に関係なく通常の値が返されます。


計算グループを使用した What-If シナリオ分析

計算グループにより、洗練された what-if シナリオ分析が可能になります。 「基本ケース」、「楽観的」、「悲観的」などの項目を含む「シナリオ」計算グループは、シナリオ固有のメジャー バリアントを作成せずに、収益およびコスト メジャーにシナリオ乗数を適用できます。

-- Base Case calculation item
SELECTEDMEASURE()

-- Optimistic calculation item
SWITCH(
    TRUE(),
    ISSELECTEDMEASURE([Revenue], [Gross Profit]), SELECTEDMEASURE() * 1.15,
    ISSELECTEDMEASURE([Operating Expenses], [COGS]), SELECTEDMEASURE() * 0.95,
    SELECTEDMEASURE()
)

-- Pessimistic calculation item
SWITCH(
    TRUE(),
    ISSELECTEDMEASURE([Revenue], [Gross Profit]), SELECTEDMEASURE() * 0.85,
    ISSELECTEDMEASURE([Operating Expenses], [COGS]), SELECTEDMEASURE() * 1.10,
    SELECTEDMEASURE()
)

ユーザーはスライサーからシナリオを選択します。すべての財務指標は、選択したシナリオの前提を反映するように更新されます。これをタイム インテリジェンス グループと組み合わせると、「前年度と比較した楽観的なシナリオでの第 3 四半期の収益を表示してください」ということが可能になります。


よくある質問

計算グループは Premium なしの Power BI Desktop で機能しますか?

はい。計算グループはすべての Power BI ライセンス層で動作します。これらはセマンティック モデル機能であり、Premium 機能ではありません。唯一の Premium 要件は、Power BI Desktop のネイティブ UI が作成をサポートしていないため (ただし、正しく表示および評価されます)、表エディターを使用して作成する必要があることです。表形式エディタで作成した計算グループは、無料および Pro を含むあらゆるワークスペースで機能します。

表形式エディタを使用せずに計算グループを作成できますか?

Power BI Desktop のネイティブ UI では、計算グループを直接作成できません (2026 年初頭の時点)。 Tabular Editor 2 (無料) が標準ツールです。あるいは、XMLA エンドポイント ツール (SSMS、ALM Toolkit) は、TMSL スクリプト経由で計算グループを作成できます。一部のユーザーは、XMLA REST API 呼び出しをプログラム的に使用して計算グループを作成することもあります。 Microsoft は、将来のリリースで Power BI Desktop に計算グループの作成をネイティブに追加する計画を示しています。

計算グループのパフォーマンスへの影響は何ですか?

計算グループにより、同等のメジャーを手動で作成する場合と比較して、追加されるオーバーヘッドが最小限に抑えられます。各 SELECTEDMEASURE() 評価では、参照されたメジャーの DAX が呼び出されます。同等の明示的なメジャーにかかるコストを超える追加コストは発生しません。実際、計算グループは、多くの同様の明示的なメジャー (すべてがクエリ キャッシュ エントリを生成する) を、同じ評価パスを共有する少数のアイテムに置き換えることにより、モデルのパフォーマンスを向上させることがよくあります。

計算グループは、自動生成された列からの暗黙的なメジャーとともに使用できますか?

計算グループは、モデルで定義された明示的な DAX メジャーに適用されます。これらは、Power BI が自動的に生成する列集計 (定義されたメジャーのない数値列の合計など) には適用されません。ベスト プラクティスは、すべてのビジネス メトリックに対して明示的なメジャーを定義し、それらのメジャーに対して計算グループを使用することです。

計算グループは行レベルのセキュリティとどのように連携しますか?

計算グループと行レベルのセキュリティは直交しており、独立して動作します。 RLS は、ユーザーに表示される行をフィルターします。計算グループは、表示されている行のメジャーの計算方法を変更します。この組み合わせは正しく機能します。RLS がデータを制限し、計算グループの項目が測定ロジックを変換します。正しく実装された RLS と計算グループの間に既知の競合はありません。

計算グループとフィールド パラメーターの違いは何ですか?

計算グループは、メジャーの計算方法を変更します (時間シフト、通貨換算、シナリオ調整の適用)。フィールド パラメーターを使用すると、ユーザーはビジュアライゼーションに表示するメジャーまたは列を選択できます。たとえば、グラフ内の収益、利益、単位を切り替えることができます。これらはさまざまな問題を解決し、一緒に使用することができます。フィールド パラメーターを使用して基本メジャーを選択し、計算グループを使用してそのメジャーの時間比較を選択します。


次のステップ

計算グループは、保守可能でスケーラブルな Power BI セマンティック モデルを構築するための最も強力なツールの 1 つです。正しく実装すると、DAX の重複が排除され、モデルの複雑さが軽減され、モデルが拡張可能になります。新しいタイム インテリジェンス期間の追加は、数十のメジャーを書き換えるのではなく、1 つの計算項目を追加することを意味します。

ECOSIRE の Power BI データ モデリング サービス には、セマンティック モデル開発の一部として計算グループの設計と実装が含まれています。計算グループを使用して現在のモデルを簡素化したり、次の実装を改善したりする方法については、お問い合わせください。

E

執筆者

ECOSIRE Research and Development Team

ECOSIREでエンタープライズグレードのデジタル製品を開発。Odoo統合、eコマース自動化、AI搭載ビジネスソリューションに関するインサイトを共有しています。

WhatsAppでチャット