この記事で分かること
DAX関数を使い始めると、CALCULATE関数を組み合わせた長い式を書く場面が増えてきます。
そういった場面では「計算途中の値を確認したい、又は長い式が見ずらい」などの理由で、計算途中のメジャーを追加することがあります。その結果「メジャーが増えすぎて、どの式が何のためにあるのか分からなくなった」という経験はありませんか?
私も、CALCULATEを使った売上やコストの計算を複数のメジャーに分けていました。しかし、レポートの改修を繰り返すうちに計算途中のメジャーが増え、必要な式を探すのが大変でした。
そこで役立ったのが、DAXのVAR・RETURNです。
VAR・RETURNを使うと、計算途中の値を変数として一つの式の中にまとめられます。その結果、長いCALCULATE式を読みやすく整理でき、不要なメジャーを増やさずに済みます。
本記事では、DAX初心者~中級者向けに、VAR・RETURNの基本的な書き方から、CALCULATEやDIVIDEの組合せ式を見やすくする方法、使わない方がよい場面まで解説します。

DAXのVAR・RETURNとは
VAR・RETURNはDAX式を整理するための書き方
VAR・RETURNは、1つのメジャー式に途中計算式を変数に保存し、最後に計算結果を返すための記述方法です。
長いDAX式であれば、計算の目的ごとに変数に分けて書いた方が式の意味を理解しやすくなります。
役割は次のように考えると分かりやすいです。
- VAR:計算途中の値を変数として定義します
- RETURN:最後に返す計算結果を指定します
VAR・RETURNの記述方法
VAR・RETURNの記述方法は以下の通りです。
式名 =
VAR 変数名1 =
計算式1
VAR 変数名2 =
計算式2
RETURN
最終的な計算式
- 式名= の後、Shift+Enterで改行します
- 変数は「VAR+スペース+変数名」で記述します
- 変数名= の後に計算式を記述します
- 式を追加する場合は改行します
- RETURNで最終的な答えを返します
VARは複数使用できます。一方、RETURNは最後に1回記述し、メジャーや計算列として返す結果を指定します。
VAR・RETURNには何を指定できる?
VARには、DAX式で利用できるさまざまな値を指定できます。
例えば、次のような値です。
- 数値
- 文字列
- 日付
- テーブル
- 既存の計算列
- 既存のメジャー
- テーブルを返すDAX式
つまり、VARは単純な数値だけを保存する機能ではありません。
CALCULATE関数の結果やFILTER関数で絞り込んだテーブルなども、VARとして定義できます。
ただし、VARで定義した変数は、そのDAX式の中だけで利用する一時的な値です。
別のメジャーや計算列から参照することはできません。
DAXのVAR・RETURNが必要になる場面
私の経験では、次のような場面で特に便利でした。
CALCULATEを使った長いDAX式を書くとき
CALCULATE関数を複数使い、計算結果を足したり引いたり、DIVIDE関数で割ったりすると、DAX式が長くなります。
例えば利益率の計算です。
- 条件付き売上をCALCULATEで計算する
- 条件付きコストをCALCULATEで計算する
- 売上からコストを引く
- 利益率をDIVIDEで計算する
これらを1つの式にまとめると、どこが売上の計算で、どこがコストの計算なのか分かりにくくなります。
しかしVARを使えば、計算ステップごとに名前を付けて整理できます。これが、VAR・RETURNの大きなメリットです。
計算途中用のメジャーを増やしたくないとき
私がVAR・RETURNを知る前はメジャーを別々に作成していました。理由は一行で長く書くよりは見やすいだろう、と考えたからです。
例えば、次のようなメジャーです。
- 条件付き売上
- 条件付きコスト
- 粗利
- 粗利率
計算途中の値を確認しやすい反面、レポートの改修を重ねるとメジャーが増えていきます。
すると、次のような問題が起こりました。
- 必要なメジャーを探しにくい
- どのメジャーが途中計算用なのか分からない
- すでに使われていないメジャーが残る
- どのメジャーから参照されているのか把握しにくい
VARなら、特定のメジャーの中だけで使う計算途中の値を、式の内部にまとめられます。
そのため、一度しか使わない途中計算のために、メジャーを増やし続ける必要がありません。
変数がどこで使われているか分かりやすくしたいとき
あるメジャーが別のメジャーで参照されている場合、そのメジャーがどのメジャーで使われているか管理する必要があります。
私は以前、メジャー同士の関連をExcelで管理表を作って整理しようとしました。
しかし、Power BIを改修するたびに管理表も更新する必要があります。更新を忘れると情報が古くなり、結局は役に立たなくなりました。
VARで定義した変数は、そのDAX式の中だけで使います。そのため、式を開けば「どの計算で使われているか」を確認できます。
式を変更したときの影響範囲を小さくしたいとき
複数のメジャーから参照されているメジャーを変更すると、ほかの計算結果にも影響する可能性があります。
そのため、「変更しても大丈夫だろうか」と不安になり、類似のメジャーを別名で作ってしまうこともあります。
すると、さらにメジャーが増え、管理しにくくなる悪循環につながります。
VARで定義した変数は、その式の中だけで有効です。そのため式変更の影響もそのDAX式の中だけです。
DAXのVAR・RETURNが必要ない場面
VAR・RETURNは、すべてのDAX式で使う必要はありません。前述のVAR・RETURNが必要な場合の逆で例えば
- 1つのメジャーを複数のメジャーで使い回す場合、かつ
- 使い回すメジャーが他のメジャーでどう使われているか明確な場合
であれば、使い回すメジャーを独立させた方が式変更が1回で済み、効率的です。
DAXのVAR・RETURNをCALCULATEとDIVIDEで使う例
粗利率の計算
ここでは、CALCULATE関数で売上とコストを計算し、DIVIDE関数で粗利率を求めます。
次のDAX式を作成します。
M粗利率 =
VAR 売上金額 =
CALCULATE (
SUM ( 売上履歴[売上] )
)
VAR コスト金額 =
CALCULATE (
SUM ( 売上履歴[コスト] )
)
VAR 粗利金額 =
売上金額 - コスト金額
RETURN
DIVIDE (
粗利金額,
売上金額
)
コメントを追加するとさらに分かりやすい
DAX式には、//を使ってコメントを追加できます。
計算内容が複雑な場合は、VARの目的や内容をコメントで残しておくと、後から見直すときに便利です。
M粗利率 =
// 売上金額を計算
VAR 売上金額 =
CALCULATE (
SUM ( 売上履歴[売上] )
)
// コスト金額を計算
VAR コスト金額 =
CALCULATE (
SUM ( 売上履歴[コスト] )
)
// 粗利率を返す
RETURN
DIVIDE (
売上金額 - コスト金額,
売上金額
)
長いDAX式では、VAR・RETURNだけでは計算の目的を理解しにくい場合もあります。
そのようなときは、コメントを追加すると、後から修正するときにも役立ちます。
【注意】VAR,RETURNの変数名は英数字にすること
最後に一点注意です。VARやRETURNの変数名は日本語にするとエラーになります。

英数字(例えばanswer)にすればエラーが消えます。
VARやRETURNを使わず、”変数名= “のみで式を記述する場合、”左辺”の変数名は日本語で良いので、この違いは注意点ですね。
まとめ
- VARは、DAX式の途中計算を変数として保存します
- RETURNは、最終的な計算結果を返します
- CALCULATEやDIVIDEを組み合わせた長い式を整理できます
- 一度しか使わない途中計算なら、メジャーを増やさずに済みます
- 複数の式で使い回す計算は、共通メジャーとして新たに追加する方法も有効です
- VARやRETURNに使える変数名は英数字のみです
VAR・RETURNを使うと、長いDAX式でも計算の目的や処理の流れを把握しやすくなります。
特にCALCULATE関数を使った複雑な計算では、途中結果をVARに分けるだけでも、式の見やすさが大きく変わります。
Power BIでのDAX式作成や、レポート改修にぜひ役立ててください。
次におすすめの記事
VAR・RETURNでDAX式を整理できるようになったら、次はCALCULATE関数の使い方を学びましょう。CALCULATEを使うと、条件を指定した集計や、より実践的なDAX計算ができるようになります。


コメント