DAX関数一覧【機能別】Power BI初心者が目的別に引けるリファレンス

スポンサーリンク

「Power BIを使い始めたけど、DAX関数って何から覚えればいいの?」

Excelの関数と似ているようで微妙に違う書き方に、最初は戸惑いますよね。しかもDAX関数は200以上あります。Microsoft Learnの公式ドキュメントを眺めても情報量が多すぎて、どこから手をつけるか迷いがちです。

この記事では、DAX関数を機能別に整理した一覧表と、最初に覚えるべき7つの関数をまとめました。「やりたいこと」から逆引きできる目的別リファレンスなので、ぜひブックマークして使ってください。

なお、Excelの関数を探している方はExcel関数一覧(機能別)をどうぞ。SUMやVLOOKUPなどの基本関数はExcel関数一覧(アルファベット順)から引けます。

  1. DAX関数とは?Excel関数と何が違うの?
    1. DAXが必要になる場面
    2. Excel関数との違い3つ
    3. フィルターコンテキストと行コンテキストの関係
  2. まず覚えるべきDAX関数7選
    1. CALCULATE – 条件付き集計の要
    2. SUMX – 行単位の計算と集計
    3. FILTER – 絞り込みテーブル
    4. ALL – フィルターを外してパーセント計算
    5. RELATED – テーブルをまたいで値を取る
    6. DIVIDE – ゼロ除算を安全に処理
    7. SWITCH – 条件分岐の定番
  3. 【機能別】DAX関数一覧
    1. 集計関数
    2. フィルター関数
    3. タイムインテリジェンス関数
    4. 日付・時刻関数
    5. 文字列関数
    6. 論理関数
    7. 数学・三角関数
    8. 統計関数
    9. テーブル操作関数
    10. リレーションシップ関数
    11. 情報関数
    12. 親子関数
    13. 財務関数
    14. その他の関数
  4. 業務シーン別:どのDAX関数を使えばいい?
    1. 月別・年別の売上合計を出したい
    2. 前年同期比を計算したい
    3. 条件に合う行だけ集計したい
    4. 構成比(パーセント)を計算したい
    5. ランキング表示を作りたい
    6. 条件分岐メジャーを作りたい
    7. 在庫・KPIのしきい値判定を自動化したい
  5. DAX関数を学ぶときのコツ
    1. フィルターコンテキストの理解が最優先
    2. 計算列とメジャーの違いを知る
    3. VAR / RETURN でコードを読みやすくする
    4. エラーが出たときの調べ方
    5. 覚える順番のおすすめ
  6. DAX関数学習におすすめのリソース
    1. Microsoft Learn公式ドキュメント
    2. DAX Studio(無料ツール)
    3. 学習ルートのおすすめ
  7. よくある質問(FAQ)
  8. ビジュアル計算(Visual Calculations)でメジャーを書かずに累計・移動平均を出す
    1. ビジュアル計算の専用関数
    2. ビジュアル計算の制限事項
  9. DAX Query Viewでメジャーをデバッグする
    1. メジャーを単体で実行して確認する
    2. スコープ付きメジャーで安全にテストする
  10. Copilot for Power BIでDAXメジャーを生成する
    1. ライセンス要件に注意
    2. 日本語プロンプトは「動くことがある」レベル
  11. DAXメジャーが遅いときの最適化チェックリスト
    1. DAX Studio で遅さを診断する
    2. よくあるパフォーマンス問題4選
    3. 改善できたかを確認する習慣
  12. コピペで使えるタイムインテリジェンス・テンプレート集
    1. 前年同期売上(年・四半期・月どれでも対応)
    2. 前年比(成長率)
    3. 前月比
    4. 年度累計(YTD)
    5. 四半期累計(QTD)・月度累計(MTD)
    6. 移動平均(直近3か月)
    7. 累計(指定期間の合計)
  13. 保守性が上がるDAXコーディング規約
    1. メジャー名はビジネス語彙で書く
    2. VAR 名は小文字・アンダースコア始まりで統一する
    3. 引数は改行+インデントで縦に並べる
    4. 1つのメジャーに1つの責務
  14. まとめ

DAX関数とは?Excel関数と何が違うの?

DAX(Data Analysis Expressions)は、データ分析用の数式言語です。Power BIやExcelのパワーピボットで使います。見た目はExcel関数に似ていますが、中身はかなり別モノです。

DAXが必要になる場面

DAXが活躍するのは、こんな場面です。

  • Power BIのレポートで売上集計や前年比を出したい
  • Excelのパワーピボットでピボットテーブルに独自の計算を追加したい
  • 複数のテーブルをまたいで分析したい
  • SQL Server Analysis Services や Azure Analysis Services で集計モデルを作りたい

ふだんのExcel作業では使わない関数ですが、Power BIに触れるなら避けて通れません。ExcelのGETPIVOTDATA関数のように、ピボット系の集計を扱う方はとくに知っておきたいところです。

Excel関数との違い3つ

ExcelとDAXの大きな違いを3つにまとめました。

比較ポイントExcel関数DAX関数
参照方法セル範囲(A1:A10)テーブル[列名]
計算の仕組み固定のセル参照フィルターコンテキストで動的に変化
COUNTIF相当SUMIFS関数やCOUNTIFがあるCOUNTROWS + FILTERの組み合わせ

とくに重要なのがフィルターコンテキストという考え方です。Power BIのスライサーや行ラベルの選択状態に応じて、計算対象が自動的に変わります。

たとえば「売上合計」というメジャーを作るとします。スライサーで「東京」を選ぶだけで、東京の売上だけが集計されるしくみです。Excelのように条件式を書き直す必要がありません。

フィルターコンテキストと行コンテキストの関係

DAXには2種類のコンテキストがあります。ここでつまずく方がとても多いので、最初に整理しておきましょう。

コンテキスト発生タイミング用途
フィルターコンテキストビジュアル・スライサー・CALCULATEの引数「どの範囲のデータを集計するか」を決める
行コンテキスト計算列・SUMXなどのイテレータ関数「1行ずつ処理する」ときに作られる

CALCULATEは行コンテキストをフィルターコンテキストに変換する「コンテキスト変換」という特殊な動きをします。SUMXなどのX系関数の中でCALCULATEやメジャーを呼び出すと、自動でこの変換が起きる点を覚えておきましょう。

NOTE
フィルターコンテキストと行コンテキストの違いは、DAXでつまずきやすい最初の壁です。まずは「スライサーの選択状態=フィルターコンテキスト」「1行ずつの処理=行コンテキスト」と覚えてください。

まず覚えるべきDAX関数7選

200以上ある関数のなかでも、まずこの7つを覚えれば基本的な分析はカバーできます。

CALCULATE – 条件付き集計の要

DAXの中核ともいえる関数です。フィルターコンテキストを上書きして、条件付きの集計ができます。

東京売上 = CALCULATE(
    SUM(売上[金額]),
    売上[地域] = "東京"
)

スライサーの状態に関係なく「東京」だけの売上を返します。CALCULATEはDAXで最も使う関数なので、真っ先に慣れておきましょう。ExcelでいうSUMIFSの強化版のような位置づけです。Excel側の条件付き集計はSUMIFS関数と比較しながら学ぶと理解が早まります。

SUMX – 行単位の計算と集計

テーブルの各行で計算してから合計する関数です。「単価 x 数量」のような行ごとの計算に使います。

売上合計 = SUMX(
    売上テーブル,
    売上テーブル[単価] * 売上テーブル[数量]
)

ExcelのSUMPRODUCTに近い感覚で使えますよ。SUMXは「行コンテキスト」を作りながら処理するため、行ごとの計算結果をあとから合計できます。AVERAGEX・COUNTX・MAXX・MINXなど、同じ考え方の関数が一式そろっています。

FILTER – 絞り込みテーブル

テーブルから条件に合う行だけを取り出します。CALCULATEと組み合わせることが多いです。

高額売上 = CALCULATE(
    SUM(売上[金額]),
    FILTER(売上, 売上[金額] > 100000)
)

単純な条件ならCALCULATE単体で書けます。しかし複雑な条件や複数列をまたぐ条件では、FILTERが必須になります。

ALL – フィルターを外してパーセント計算

テーブルや列に適用されたフィルターをすべて解除します。構成比(パーセント)を出すときに欠かせません。

売上構成比 = DIVIDE(
    SUM(売上[金額]),
    CALCULATE(SUM(売上[金額]), ALL(売上))
)

分母を「フィルターなしの全体合計」にします。すると各カテゴリの構成比が求められます。ALLEXCEPTを使えば、特定の列のフィルターだけを残すことも可能です。

RELATED – テーブルをまたいで値を取る

リレーションシップで関連づけたテーブルから値を引っ張ります。ExcelのVLOOKUPに近い役割です。

カテゴリ名 = RELATED(商品マスタ[カテゴリ])

リレーションシップが設定済みなら、RELATED一発で取れます。設定がない場合はLOOKUPVALUEを使ってみてください。Excel側でVLOOKUPを使っている方は、VLOOKUP関数の考え方と対応させて覚えると入りやすいです。

DIVIDE – ゼロ除算を安全に処理

DAXの割り算は、/ 演算子ではなく DIVIDE を使うのが鉄則です。

利益率 = DIVIDE(
    SUM(売上[利益]),
    SUM(売上[売上高]),
    0
)

分母がゼロのときは第3引数の値(この例なら0)を返します。/ 演算子だとInfinityエラーが出て、ビジュアルが壊れることも。前年比や構成比など、割り算を含むメジャーでは必ずDIVIDEを使いましょう。

SWITCH – 条件分岐の定番

IF文をネストしたくなるような条件分岐は、SWITCHで書くとスッキリします。

売上ランク = SWITCH(TRUE(),
    [売上合計] >= 1000000, "A",
    [売上合計] >= 500000, "B",
    [売上合計] >= 100000, "C",
    "D"
)

SWITCH(TRUE(), 条件1, 結果1, 条件2, 結果2, ..., 既定値) の形が定番です。IF文の深いネストより可読性が上がり、修正もしやすくなります。ExcelのIFERROR関数と同じ発想ですが、条件分岐は SWITCH、エラー処理は IFERROR と使い分けましょう。

【機能別】DAX関数一覧

ここからは、DAX関数を機能別に一覧で紹介します。やりたいことからカテゴリを選んで探してみてください。

集計関数

SUM・AVERAGE・COUNTなど、データの合計・平均・件数を求める関数です。Excel関数と名前が似ているものが多いので、取りかかりやすいカテゴリですよ。

関数説明
APPROXIMATEDISTINCTCOUNT列内に個別の値を含む行の概数を返します。
AVERAGE列のすべての数値の平均(算術平均)を返します。
AVERAGEA列の値の平均(算術平均)を返します。
AVERAGEXテーブルに対して評価される式の平均を計算します。
COUNT列内にある、数値を含むセルの数をカウントします。
COUNTA列内の空ではないセルの数をカウントします。
COUNTAX式の結果をテーブルに対して評価するとき、空白以外の結果をカウントします。
COUNTBLANK1列内の空のセル数をカウントします。
COUNTROWSテーブル内の行の数をカウントします。
COUNTXテーブルに対して式を評価するときに、数値を含む行をカウントします。
DISTINCTCOUNT列の個別の値の数をカウントします。
DISTINCTCOUNTNOBLANK列の個別の値の数をカウントします。
MAX列内の最大の数値を返します。
MAXA列の最大値を返します。
MAXXテーブルの行ごとに式を評価し、最大の数値を返します。
MIN列内の最小の数値を返します。
MINA論理値やテキストも含んだ列の最小値を返します。
MINXテーブルの行ごとに式を評価した結果の最小値を返します。
PRODUCT列内の数値の積を返します。
PRODUCTXテーブルの各行に評価される式の積を返します。
SUM列のすべての数値を加算します。
SUMXテーブルの行ごとに評価される式の合計値を返します。

フィルター関数

データの絞り込みやフィルターコンテキストの制御を行う関数です。CALCULATEやFILTERなど、DAXの核となる関数がここに集まっていますよ。

関数説明
ALLテーブルのすべての行、または列のすべての値を返します。適用されているフィルターはすべて無視されます。
ALLCROSSFILTEREDテーブルに適用されているすべてのフィルターをクリアします。
ALLEXCEPT指定した列に適用されているフィルターを除く、テーブル内のすべてのコンテキストフィルターを削除します。
ALLNOBLANKROW空白行を除くすべての行を返し、コンテキストフィルターをすべて無視します。
ALLSELECTED他のコンテキストフィルターを保持しながら、現在のクエリの列と行からコンテキストフィルターを削除します。
CALCULATE変更されたフィルターコンテキストで式を評価します。
CALCULATETABLE変更されたフィルターコンテキストでテーブル式を評価します。
EARLIER指定された列の外側の評価パスにある現在の値を返します。
EARLIEST指定された列の外側の評価パスにある現在の値を返します。
FILTERテーブルのサブセットを表すテーブルを返します。
KEEPFILTERSCALCULATE関数の評価中にフィルターを適用する方法を変更します。
LOOKUPVALUE検索条件をすべて満たす行の値を返します。
REMOVEFILTERS指定されたテーブルまたは列からフィルターをクリアします。
SELECTEDVALUEコンテキストが1つの個別の値のみにフィルター処理されている場合、その値を返します。

タイムインテリジェンス関数

前年比・年度累計・前月比など、日付をベースにした期間計算ができる関数です。Power BIのレポートでとくに重宝するカテゴリですよ。

NOTE
タイムインテリジェンス関数を使うには、データモデルに「日付テーブル(カレンダーテーブル)」が必要です。CALENDAR関数やCALENDARAUTO関数で用意でき、さらに「マークアズデートテーブル」を指定しておくとより安定動作します。

関数説明
CLOSINGBALANCEMONTH月の最後の日付で式を評価します。
CLOSINGBALANCEQUARTER四半期の最後の日付で式を評価します。
CLOSINGBALANCEYEAR年の最後の日付で式を評価します。
DATEADD指定された間隔数だけ日付をシフトした列を返します。
DATESBETWEEN指定した開始日から終了日までの日付列を返します。
DATESINPERIOD指定した開始日から指定期間の日付列を返します。
DATESMTD月度累計の日付列を返します。
DATESQTD四半期累計の日付列を返します。
DATESYTD年度累計の日付列を返します。
ENDOFMONTH月の最後の日付を返します。
ENDOFQUARTER四半期の最後の日付を返します。
ENDOFYEAR年の最後の日付を返します。
FIRSTDATE現在のコンテキストにおける最初の日付を返します。
FIRSTNONBLANK式が空白でない最初の値を返します。
LASTDATE現在のコンテキストにおける最終日付を返します。
LASTNONBLANK式が空白でない最後の値を返します。
NEXTDAY次の日からすべての日付の列を返します。
NEXTMONTH翌月のすべての日付の列を返します。
NEXTQUARTER次の四半期のすべての日付の列を返します。
NEXTYEAR翌年のすべての日付の列を返します。
OPENINGBALANCEMONTH月の最初の日付で式を評価します。
OPENINGBALANCEQUARTER四半期の最初の日付で式を評価します。
OPENINGBALANCEYEAR年の最初の日付で式を評価します。
PARALLELPERIOD並列した期間の日付列を返します。
PREVIOUSDAY前日のすべての日付の列を返します。
PREVIOUSMONTH前月のすべての日付の列を返します。
PREVIOUSQUARTER前の四半期のすべての日付の列を返します。
PREVIOUSYEAR前年のすべての日付の列を返します。
SAMEPERIODLASTYEAR1年前にシフトした日付列を返します。
STARTOFMONTH月の最初の日付を返します。
STARTOFQUARTER四半期の最初の日付を返します。
STARTOFYEAR年の最初の日付を返します。
TOTALMTD月度累計の式の値を評価します。
TOTALQTD四半期累計の式の値を評価します。
TOTALYTD年度累計の式の値を評価します。

日付・時刻関数

日付や時刻の値を作成・変換・分解するための関数です。カレンダーテーブルの作成やデータの日付加工に使います。

関数説明
CALENDAR連続する日付のセットを含むテーブルを返します。
CALENDARAUTOデータモデルの日付に基づいて日付テーブルを自動生成します。
DATE指定された日付をdatetime形式で返します。
DATEDIFF2つの日付の間にある間隔の境界数を返します。
DATEVALUEテキスト形式の日付をdatetime形式に変換します。
DAY月の日付を1から31の数値で返します。
EDATE指定された月数だけ前または後の日付を返します。
EOMONTH指定された月数だけ前または後の月の最終日を返します。
HOUR時間を0から23の数値で返します。
MINUTE分を0から59の数値で返します。
MONTH月を1から12の数値で返します。
NOW現在の日付と時刻を返します。
QUARTER四半期を1から4の数値で返します。
SECOND秒を0から59の数値で返します。
TIME時間・分・秒をdatetime形式の時刻に変換します。
TIMEVALUEテキスト形式の時刻をdatetime形式に変換します。
TODAY現在の日付を返します。
UTCNOWUTCの現在日付と時刻を返します。
UTCTODAY現在のUTCの日付を返します。
WEEKDAY日付の曜日を1から7の整数で返します。
WEEKNUM指定された日付の週番号を返します。
YEAR日付の年を4桁の整数で返します。
YEARFRAC2つの日付間の年の端数を計算します。

文字列関数

テキストの結合・切り出し・変換を行う関数です。書式変換のFORMATはレポート表示でよく使います。ExcelのTEXT関数に対応する関数で、TEXT関数と同じ書式指定文字が使えます。

関数説明
COMBINEVALUES2つ以上のテキスト文字列を結合します。
CONCATENATE2つの文字列を結合して1つにまとめます。
CONCATENATEXテーブルの行ごとに評価される式の結果を連結します。
EXACT2つのテキスト文字列を比較し、一致するかどうかを返します。
FIND文字列が他の文字列内で最初に現れる位置を返します。
FIXED数値を指定された桁数に丸め、テキストとして返します。
FORMAT指定した書式に従って値をテキストに変換します。
LEFTテキスト文字列の先頭から指定された数の文字を返します。
LENテキスト文字列の長さ(文字数)を返します。
LOWER英字をすべて小文字に変換します。
MIDテキスト文字列の指定位置から指定長の文字列を返します。
REPLACEテキスト文字列の一部を別のテキストに置き換えます。
REPTテキストを指定された回数繰り返します。
RIGHTテキスト文字列の末尾から指定された数の文字を返します。
SEARCH特定の文字が最初に見つかった位置を返します。
SUBSTITUTEテキスト文字列内の既存テキストを新しいテキストに置き換えます。
TRIM余分なスペースを削除します。
UNICHAR数値で参照されるUnicode文字を返します。
UNICODE最初の文字のUnicode数値コードを返します。
UPPERテキスト文字列をすべて大文字に変換します。
VALUE数値を表すテキスト文字列を数値に変換します。

論理関数

IF・AND・ORなどの条件分岐やブール演算を行う関数です。Excel関数とほぼ同じ感覚で使えるものが多いですよ。エラー処理に使うIFERRORは、ExcelのIFERROR関数と引数の書き方が同じです。

関数説明
AND両方の引数がTRUEかどうかをチェックします。
BITAND2つの数値のビットごとのANDを返します。
BITLSHIFT指定したビット数だけ左にシフトした数値を返します。
BITOR2つの数値のビットごとのORを返します。
BITRSHIFT指定したビット数だけ右にシフトした数値を返します。
BITXOR2つの数値のビットごとのXORを返します。
COALESCE空白として評価されない最初の式を返します。
FALSE論理値FALSEを返します。
IF条件をチェックしTRUEなら1つ目の値、FALSEなら2つ目の値を返します。
IF.EAGERIFと同じですが、常に両方の分岐を評価するeager実行プランを使用します。
IFERROR式がエラーの場合、指定した値を返します。
NOTFALSEをTRUEに、TRUEをFALSEに変更します。
ORいずれかの引数がTRUEであるかを確認します。
SWITCH値のリストに対して式を評価し、対応する結果を返します。
TRUE論理値TRUEを返します。

数学・三角関数

四則演算の補助、丸め処理、三角関数などを扱います。DIVIDE(ゼロ除算対策つきの割り算)はとくに頻出です。

関数説明
ABS数値の絶対値を返します。
ACOS数値のアークコサイン(逆余弦)を返します。
ACOSH数値の双曲線逆余弦を返します。
ACOT数値のアークコタンジェント(逆余接)を返します。
ACOTH数値の逆双曲線余接を返します。
ASIN数値のアークサイン(逆正弦)を返します。
ASINH数値の双曲線逆正弦を返します。
ATAN数値のアークタンジェント(逆正接)を返します。
ATANH数値の逆双曲線正接を返します。
CEILING最も近い整数または指定倍数に切り上げます。
CONVERTあるデータ型を別のデータ型に変換します。
COS指定した角度のコサインを返します。
COSH数値の双曲線コサインを返します。
COTラジアン単位の角度のコタンジェントを返します。
COTH双曲線余接を返します。
CURRENCY引数を通貨データ型として返します。
DEGREESラジアンを度に変換します。
DIVIDEゼロ除算を安全に処理する除算を実行します。
EVEN最も近い偶数に切り上げます。
EXPeの指定された数値乗を返します。
FACT数値の階乗を返します。
FLOOR最も近い基準値の倍数に切り捨てます。
GCD2つ以上の整数の最大公約数を返します。
INT最も近い整数に切り捨てます。
ISO.CEILING最も近い整数または指定倍数に切り上げます。
LCM整数の最小公倍数を返します。
LN数値の自然対数を返します。
LOG指定された底の対数を返します。
LOG10数値の常用対数を返します。
MROUND指定倍数に丸めた数値を返します。
ODD最も近い奇数に切り上げます。
PI円周率の値を15桁の精度で返します。
POWER数値を累乗した結果を返します。
QUOTIENT除算結果の整数部分のみを返します。
RADIANS角度をラジアンに変換します。
RAND0以上1未満の乱数を返します。
RANDBETWEEN指定範囲内の乱数を返します。
ROUND数値を指定桁数に丸めます。
ROUNDDOWN数値をゼロ方向に切り捨てます。
ROUNDUP数値を切り上げます。
SIGN数値の正負を調べます。
SIN指定された角度のサインを返します。
SINH数値の双曲線サインを返します。
SQRT数値の平方根を返します。
SQRTPI(数値 x pi) の平方根を返します。
TAN指定された角度のタンジェントを返します。
TANH数値の双曲タンジェントを返します。
TRUNC数値の小数部を切り捨てて整数に変換します。

統計関数

分布・順位・標準偏差など、統計処理に使う関数です。RANKXは売上ランキングなどの業務レポートでよく登場します。ExcelのRANK関数と用途は似ていますが、DAXではテーブル全体に対して評価する点が違います。

関数説明
BETA.DISTベータ分布を返します。
BETA.INVベータ累積確率密度関数の逆関数を返します。
CHISQ.DISTカイ2乗分布を返します。
CHISQ.DIST.RTカイ2乗分布の右側確率を返します。
CHISQ.INVカイ2乗分布の左側確率の逆関数の値を返します。
CHISQ.INV.RTカイ2乗分布の右側確率の逆関数の値を返します。
COMBIN指定された項目数の組み合わせの数を返します。
COMBINA指定された項目数の組み合わせ(重複あり)の数を返します。
CONFIDENCE.NORM正規分布を使用して、母集団の平均に対する信頼区間を返します。
CONFIDENCE.T学生のT分布を使用して、信頼区間を返します。
EXPON.DIST指数分布を返します。
GEOMEAN列の数値の幾何平均を返します。
GEOMEANXテーブルの行ごとに評価される式の幾何平均を返します。
LINEST線形回帰直線のパラメーターを返します。
LINESTXテーブルに対して線形回帰のパラメーターを返します。
MEDIAN列の数値の中央値を返します。
MEDIANXテーブルの行ごとに評価される式の中央値を返します。
NORM.DIST指定された平均と標準偏差の正規分布を返します。
NORM.INV正規累積分布の逆数を返します。
NORM.S.DIST標準正規分布を返します。
NORM.S.INV標準正規累積分布の逆数を返します。
PERCENTILE.EXC範囲内のk番目の百分位の値を返します(0と1を含まない)。
PERCENTILE.INC範囲内のk番目の百分位の値を返します(0と1を含める)。
PERCENTILEX.EXCテーブルの行ごとに評価される式の百分位数を返します。
PERCENTILEX.INCテーブルの行ごとに評価される式の百分位数を返します。
PERMUT指定された数から指定数を抜き取る順列の数を返します。
POISSON.DISTポワソン分布を返します。
RANK現在のコンテキストにおける値のランクを返します(2023年追加)。
RANK.EQ数値のリストにおけるランク付けを返します。
RANKXテーブルの行別に数値のランキングを返します。
ROWNUMBER現在の行の行番号を返します(2023年追加)。
SAMPLEテーブルからN行のサンプルを返します。
STDEV.P母集団全体の標準偏差を返します。
STDEV.Sサンプル母集団の標準偏差を返します。
STDEVX.P母集団全体の標準偏差を返します。
STDEVX.Sサンプル母集団の標準偏差を返します。
T.DIST学生の左片側t分布を返します。
T.DIST.2T学生の両側t分布を返します。
T.DIST.RT学生の右片側t分布を返します。
T.INV学生の左片側t分布の逆数を返します。
T.INV.2T学生のt分布の両側逆関数を返します。
VAR.P母集団全体の分散を返します。
VAR.Sサンプル母集団の分散を返します。
VARX.P母集団全体の分散を返します。
VARX.Sサンプル母集団の分散を返します。

テーブル操作関数

テーブルの結合・列の追加・集約テーブルの作成などを行う関数です。SUMMARIZECOLUMNSはレポート作成の定番です。2023年以降はWINDOW・OFFSET・INDEXなど「ビジュアル計算」向けの関数も追加されています。

関数説明
ADDCOLUMNSテーブルに計算列を追加します。
ADDMISSINGITEMS複数の列から項目の組み合わせをテーブルに追加します。
CROSSJOINすべてのテーブルのデカルト積を返します。
CURRENTGROUPGROUPBY式の行のセットを返します。
DATATABLEデータ値のインラインセットを宣言します。
DETAILROWSメジャーの詳細行の式を評価してデータを返します。
DISTINCT(列)指定された列の個別の値を含むテーブルを返します。
DISTINCT(テーブル)重複する行を削除したテーブルを返します。
EXCEPTあるテーブルにあって別のテーブルにない行を返します。
FILTERS列にフィルターとして適用されている値のテーブルを返します。
GENERATE2つのテーブルのデカルト積を返します。
GENERATEALL2つのテーブルのデカルト積を返します(空の結果を含む)。
GENERATESERIES等差級数の値を含む単一列テーブルを返します。
GROUPBYグループ化されたサマリーテーブルを返します。
IGNORESUMMARIZECOLUMNSの空白評価から特定の式を除外します。
INDEX指定位置にある行を返します(2023年追加)。
INTERSECT2つのテーブルの行の積集合を返します。
NATURALINNERJOIN2つのテーブルの内部結合を実行します。
NATURALLEFTOUTERJOIN2つのテーブルの左外部結合を実行します。
OFFSET現在の行から相対位置の行を返します(2023年追加)。
ORDERBYWINDOW系関数で並び順を指定します(2023年追加)。
PARTITIONBYWINDOW系関数でパーティションを指定します(2023年追加)。
ROLLUPSUMMARIZE結果にロールアップ行を追加します。
ROLLUPADDISSUBTOTALSUMMARIZECOLUMNS結果にロールアップ行を追加します。
ROLLUPISSUBTOTALロールアップグループとROLLUPADDISSUBTOTAL列をペアリングします。
ROLLUPGROUPSUMMARIZEおよびSUMMARIZECOLUMNS結果にロールアップ行を追加します。
ROW1行のテーブルを返します。
SELECTCOLUMNSテーブルに計算列を追加します。
SUBSTITUTEWITHINDEX2つのテーブルの左側の準順結合を返します。
SUMMARIZEグループごとのサマリーテーブルを返します。
SUMMARIZECOLUMNSグループに対するサマリーテーブルを返します。
テーブルコンストラクター1つ以上の列からなるテーブルを返します。
TOPNテーブルの上位N行を返します。
TREATASテーブル式の結果をフィルターとして適用します。
UNION2つのテーブルの和集合を返します。
VALUESテーブルまたは列の個別の値を含むテーブルを返します。
WINDOW指定したウィンドウの行セットを返します(2023年追加)。

リレーションシップ関数

テーブル間のリレーションシップを活用して、関連する値を取得したりクロスフィルターを制御したりする関数です。

関数説明
CROSSFILTERリレーションシップのクロスフィルター処理の方向を指定します。
RELATED別のテーブルから関連する値を返します。
RELATEDTABLE指定されたフィルターでテーブル式を評価します。
USERELATIONSHIP特定の計算で使用するリレーションシップを指定します。

情報関数

値の型チェックやフィルター状態の確認など、データの「状態を調べる」関数です。条件分岐と組み合わせて使うことが多いですよ。

関数説明
CONTAINSすべての参照列に値が存在するかどうかを返します。
CONTAINSROW値の行がテーブルに含まれているかを返します。
CONTAINSSTRING文字列に別の文字列が含まれているかを返します。
CONTAINSSTRINGEXACT大文字小文字を区別して文字列の包含を確認します。
CUSTOMDATA接続文字列のCustomDataプロパティの内容を返します。
HASONEFILTERフィルター処理された値の数が1であるかを返します。
HASONEVALUEコンテキストが1つの個別の値のみにフィルター処理されているかを返します。
ISAFTERStart At句の動作をエミュレートします。
ISBLANK値が空白であるかどうかを返します。
ISCROSSFILTERED列がクロスフィルターされているかを返します。
ISEMPTYテーブルが空かどうかを調べます。
ISERROR値がエラーであるかどうかを返します。
ISEVEN数値が偶数であるかを返します。
ISFILTERED列が直接フィルターされているかを返します。
ISINSCOPE指定した列が階層のそのレベルであるかを返します。
ISLOGICAL値が論理値であるかを返します。
ISNONTEXT値が文字列以外であるかを返します。
ISNUMBER値が数値であるかを返します。
ISODD数値が奇数であるかを返します。
ISONORAFTERStart At句の動作をエミュレートします。
ISSELECTEDMEASUREコンテキスト内のメジャーがリスト内にあるかを判定します。
ISSUBTOTAL行に小計値が含まれるかを返します。
ISTEXT値が文字列であるかを返します。
NONVISUALSUMMARIZECOLUMNS式の値フィルターを非ビジュアルとしてマークします。
SELECTEDMEASUREコンテキスト内のメジャーを参照します。
SELECTEDMEASUREFORMATSTRINGメジャーの書式文字列を取得します。
SELECTEDMEASURENAME名前でコンテキスト内のメジャーを調べます。
USERNAMEドメイン名とユーザー名を返します。
USEROBJECTID現在のユーザーのオブジェクトIDを返します。
USERPRINCIPALNAMEユーザープリンシパル名を返します。

親子関数

組織図やBOM(部品表)のような親子階層データを扱う関数です。階層パスの取得や特定の位置の要素抽出ができます。

関数説明
PATH現在の識別子のすべての親の識別子を含むテキスト文字列を返します。
PATHCONTAINS指定されたpath内にitemが存在するかを返します。
PATHITEMPATH関数の結果から指定した位置の項目を返します。
PATHITEMREVERSEPATH関数の結果から末尾基準で指定した位置の項目を返します。
PATHLENGTHPATHの結果内の自身を含めた親の数を返します。

財務関数

利率・減価償却・キャッシュフロー計算など、財務分析に使う関数です。Excelの財務関数とほぼ同じ名前・引数で使えます。

関数説明
ACCRINT定期的に利息が支払われる証券の利回りを返します。
ACCRINTM満期に利息が支払われる証券の未払い利息を返します。
AMORDEGRC各会計期間の減価償却費を返します(減価償却係数適用)。
AMORLINC各会計期間の減価償却費を返します。
COUPDAYBS利払期間の第1日目から受渡日までの日数を返します。
COUPDAYS受渡日を含む利払期間の日数を返します。
COUPDAYSNC受渡日から次の利払日までの日数を返します。
COUPNCD受渡日後の次の利払日を返します。
COUPNUM受渡日と満期日の間の利息支払回数を返します。
COUPPCD受渡日直前の利払日を返します。
CUMIPMT指定期間に貸付金に対して支払われる利息の累計を返します。
CUMPRINC指定期間に貸付金に対して支払われる元金の累計を返します。
DB定率法で資産の減価償却費を返します。
DDB倍額定率法で資産の減価償却費を返します。
DISC証券に対する割引率を返します。
DOLLARDE分数表記のドル価格を10進数に変換します。
DOLLARFR10進数のドル価格を分数表記に変換します。
DURATIONマコーレー デュレーションを返します。
EFFECT年間有効金利を返します。
FV投資の将来価値を計算します。
INTRATE全額投資された証券の利率を返します。
IPMT指定された期に支払われる利息を返します。
ISPMT元金均等払いで指定された期の利息を計算します。
MDURATION修正されたマコーレー デュレーションを返します。
NOMINAL年間名目金利を返します。
NPER投資に対して期間数を返します。
ODDFPRICE最初の期間が奇数の証券の額面100ドルあたりの価格を返します。
ODDFYIELD最初の期間が奇数の証券の利回りを返します。
ODDLPRICE最後の期間が奇数の証券の額面100ドルあたりの価格を返します。
ODDLYIELD最後の期間が奇数の証券の利回りを返します。
PDURATION投資が指定値に到達するまでの期間数を返します。
PMTローンの支払額を算出します。
PPMT投資の特定期間の元本の支払いを返します。
PRICE利付債の額面100ドルあたりの価格を返します。
PRICEDISC割引債の額面100ドルあたりの価格を返します。
PRICEMAT満期利付債の額面100ドルあたりの価格を返します。
PVローンまたは投資の現在価値を計算します。
RATE年金の1期間あたりの利率を返します。
RECEIVED満期日に支払われる金額を返します。
RRI投資の増額に相当する利率を返します。
SLN資産の定額減価償却費を返します。
SYD級数法での資産の減価償却費を返します。
TBILLEQ短期国債の債券換算利回りを返します。
TBILLPRICE短期国債の額面100ドルあたりの価格を返します。
TBILLYIELD短期国債の利回りを返します。
VDB倍額定率法で特定期間の減価償却費を返します。
XIRRキャッシュフローの内部利益率を返します。
XNPVキャッシュフローの現在価値を返します。
YIELD利付債の利回りを返します。
YIELDDISC割引債の年利回りを返します。
YIELDMAT満期利付債の年利回りを返します。

その他の関数

関数説明
BLANK空白を返します。
ERRORエラーを発生させ、エラーメッセージを生成します。
EVALUATEANDLOGデバッグ用に式の評価と中間結果を記録します。

業務シーン別:どのDAX関数を使えばいい?

一覧を見ても「結局どれを使えばいいの?」と迷うこともありますよね。ここではよくある業務シーンごとに、使う関数の組み合わせを紹介します。

月別・年別の売上合計を出したい

基本はSUMだけでOKです。Power BIの日付テーブルと組み合わせれば、月別・年別の集計はスライサーが自動で処理してくれます。

年度累計(YTD)を出したいときはTOTALYTDが便利です。

年度累計売上 = TOTALYTD(
    SUM(売上[金額]),
    カレンダー[Date]
)

Excel側で同じような累計を出す場合はSUMIFS関数で日付範囲を指定するやり方もあります。DAXの方がスライサーとの連携がスムーズです。

前年同期比を計算したい

SAMEPERIODLASTYEARを使えば、1年前の同じ期間の値を取れます。

前年売上 = CALCULATE(
    SUM(売上[金額]),
    SAMEPERIODLASTYEAR(カレンダー[Date])
)

前年比を出すなら、DIVIDEと組み合わせます。ゼロ除算も安全に処理してくれますよ。

前年比 = DIVIDE(
    SUM(売上[金額]) - [前年売上],
    [前年売上],
    0
)

N期間ずらしたい場合はDATEADDを使ってみてください。月単位・四半期単位など柔軟に指定できます。

条件に合う行だけ集計したい

CALCULATEとFILTERの組み合わせが定番です。

大口売上 = CALCULATE(
    SUM(売上[金額]),
    FILTER(売上, 売上[金額] >= 500000)
)

単純な列の値での絞り込みなら、FILTERなしでもCALCULATEの引数に直接条件を書けます。

東京売上 = CALCULATE(
    SUM(売上[金額]),
    売上[地域] = "東京"
)

ExcelでいうCOUNTIFのように「条件に合う行数」を数えたいときは、COUNTROWSとFILTERを組み合わせてみてください。

東京件数 = COUNTROWS(
    FILTER(売上, 売上[地域] = "東京")
)

構成比(パーセント)を計算したい

ALLで全体のフィルターを解除して、分母を作ります。

売上構成比 = DIVIDE(
    SUM(売上[金額]),
    CALCULATE(SUM(売上[金額]), ALL(売上[カテゴリ]))
)

ALLで「カテゴリ」列のフィルターだけを解除すると、各カテゴリが全体に占める割合が計算できます。スライサーの絞り込みを保持したい場合はALLSELECTEDを使ってみてください。

ランキング表示を作りたい

RANKX関数で順位を付けられます。売上上位から並べたいときに使います。

売上ランキング = RANKX(
    ALL(売上[商品名]),
    [売上合計],
    ,
    DESC
)

第1引数にランキング対象のテーブル、第2引数に順位付けの基準メジャーを渡します。Excel側ではRANK関数を使いますが、DAXではテーブル全体に対してランクを付ける考え方になります。

条件分岐メジャーを作りたい

売上金額に応じたランク分け、達成率に応じたステータス表示など、条件分岐はSWITCHが定番です。

達成ステータス = SWITCH(TRUE(),
    [達成率] >= 1.0, "達成",
    [達成率] >= 0.9, "あと少し",
    [達成率] >= 0.7, "要フォロー",
    "要改善"
)

SWITCH(TRUE(), ...) 形式を使うと、IF文を何重もネストせずにすっきり書けます。ダッシュボードのステータス表示や、条件付き書式の判定に便利です。

在庫・KPIのしきい値判定を自動化したい

しきい値を超えた場合にアラートを出したい、在庫切れ警告を出したい、といった判定もDAXで書けます。

在庫アラート = 
VAR _在庫数 = SUM(在庫[数量])
VAR _基準 = 10
RETURN
    SWITCH(TRUE(),
        _在庫数 = 0, "在庫切れ",
        _在庫数 < _基準, "要発注",
        "問題なし"
    )

VAR / RETURN を使うと中間計算を名前付きで保持できます。Power BIのカードビジュアルやテーブルで、色分け付きのステータス列として表示できますよ。

DAX関数を学ぶときのコツ

DAXは奥が深い言語です。ここでは初心者がつまずきやすいポイントと、学習を進めるコツを整理しました。

フィルターコンテキストの理解が最優先

DAXでつまずく原因の多くは、フィルターコンテキストの理解不足です。スライサーで何かを選んだとき、ビジュアルで行ラベルを指定したとき、計算結果がどう変わるかを意識しましょう。

NOTE
CALCULATEは「フィルターコンテキストを上書きする」関数です。元のフィルターを完全に置き換えるわけではなく、条件を追加・変更する動きをします。ALLでフィルターを解除した状態に、新しい条件を足すこともできます。

計算列とメジャーの違いを知る

DAXには「計算列」と「メジャー」という2つの書き方があります。用途がまったく違うので、最初に区別しておきましょう。

項目計算列(Calculated Column)メジャー(Measure)
計算タイミングデータ読み込み時に1回だけビジュアル表示のたびに動的に
コンテキスト行コンテキストフィルターコンテキスト
メモリ消費大きい(列として保存)小さい(結果のみ)
向いている用途「単価 × 数量」のような行単位の値「売上合計」「前年比」などの集計値
スライサーで使えるか使える(カテゴリ列化できる)直接は使えない

迷ったらメジャーを使うのが基本です。計算列は「行ごとに値を固定したい」場合や、スライサーやフィルターで使う列が必要な場合だけ使います。

VAR / RETURN でコードを読みやすくする

同じ式を何度も使う長いメジャーは、VAR / RETURN を使うとパフォーマンス・可読性ともに向上します。

前年比成長 = 
VAR _当期 = SUM(売上[金額])
VAR _前年 = CALCULATE(SUM(売上[金額]), SAMEPERIODLASTYEAR(カレンダー[Date]))
VAR _差分 = _当期 - _前年
RETURN
    DIVIDE(_差分, _前年, 0)

VARで定義した変数は1度だけ評価され、再利用されます。DIVIDEの中で同じメジャーを2回呼び出すより計算コストが下がりますよ。デバッグで中間値を確認したいときにも便利です。

TIP
複雑なメジャーを書くときは、各 VAR を段階的に追加してデバッグしましょう。 RETURN _中間値 で一時的に戻り値を変えれば、途中計算の値が確認できます。

エラーが出たときの調べ方

DAXでよく遭遇するエラーを4つまとめました。

エラー主な原因対処方法
循環依存関係が検出されました計算列が自テーブルをCALCULATEで参照しているメジャーに変更する、USERELATIONSHIPを使う
The expression refers to multiple columns単一値を期待する場所に複数の値を渡しているSELECTEDVALUEやVALUESで単一値に変換する
A function expected a tableテーブル引数に列を渡しているVALUES(列)やDISTINCT(列)でテーブル化する
A single value for column ‘X’ cannot be determined行コンテキストなしで列を直接参照したCALCULATEでラップする、または明示的な集計関数で包む

エラーメッセージは一見むずかしそうに見えます。しかし「値を1つ期待されている」「テーブルを期待されている」など、型の不一致であることがほとんどです。引数の型を見直すだけで解決することが多いですよ。

覚える順番のおすすめ

学習効率を考えた順番です。

  1. 基本集計: SUM、AVERAGE、COUNTなど
  2. CALCULATE: 条件付き集計の基本パターン
  3. DIVIDE / SWITCH: ゼロ除算対策と条件分岐
  4. リレーションシップ関数: RELATED、RELATEDTABLE
  5. タイムインテリジェンス: SAMEPERIODLASTYEAR、TOTALYTD
  6. X系関数: SUMX、AVERAGEX、RANKX
  7. テーブル操作: FILTER、ALL、SUMMARIZE
  8. VAR / RETURN: パフォーマンスとデバッグ

この順番で覚えていくと、業務レポートの大半はカバーできます。

DAX関数学習におすすめのリソース

DAXは情報の更新が速い言語です。公式ドキュメントとツールを活用しましょう。

Microsoft Learn公式ドキュメント

  • 機能別関数リファレンス: 各関数の構文・引数・戻り値・使用例が網羅されています
  • 日本語版あり。機能別のカテゴリページから目的の関数を探せます
  • 困ったらまずはここを参照する習慣をつけましょう

DAX Studio(無料ツール)

DAX Studio は無料のオープンソース開発ツールです。以下のことができます。

  • メジャーやDAXクエリを書いて即座に実行
  • パフォーマンス計測(どこで時間がかかっているか分析)
  • Power BI デスクトップや Excel パワーピボットに接続
  • メジャー定義の一覧表示・編集

本格的にDAXを書くなら、Power BI Desktopと併用して必ず入れておきたいツールです。

学習ルートのおすすめ

  1. Power BI Desktopをインストールして、サンプルデータでメジャーを試す
  2. Microsoft Learnの「Power BI入門」コースで基礎を学ぶ
  3. 本記事で紹介した7関数を実際のデータで試す
  4. 業務シーン別のメジャーを1つずつ作り、スライサーで動作確認する
  5. DAX Studioでパフォーマンスを確認する習慣を身につける

よくある質問(FAQ)

Q. DAX関数はExcel関数と同じものですか?

名前が似ている関数は多いですが、別物です。DAXはテーブルと列を参照する仕組みで、セル参照のExcel関数とは考え方が異なります。たとえばSUMは名前こそ同じですが、DAXではSUM(売上[金額])のように列名で指定します。

Q. DAXはどこで使えますか?

主にPower BI Desktop、Excelのパワーピボット、SQL Server Analysis Services、Azure Analysis Servicesで使えます。ふつうのExcelのセルに入力しても動きません。Excelでは「データ」タブから「データモデルに追加」したテーブルに対して、メジャーや計算列として使います。

Q. CALCULATEが難しくて使いこなせません

ちょっとむずかしく見えますが、やっていることはシンプルです。「この条件のときだけ計算してね」とフィルターを指定しているだけです。まずはCALCULATE(SUM(...), 条件)の形で試してみてください。

Q. CALCULATEとCALCULATETABLEの違いは?

CALCULATEは単一の値(スカラー値)を返します。CALCULATETABLEはテーブルを返します。メジャーの中で使うならCALCULATE、サブクエリ的にテーブルを作るならCALCULATETABLEです。

Q. ExcelのVLOOKUPに相当するDAX関数は?

リレーションシップが設定済みならRELATED、未設定ならLOOKUPVALUEを使います。Power BIではリレーションシップを使うのが基本なので、RELATEDのほうが出番は多いですよ。Excel側のVLOOKUP関数と対応させて覚えると、使い分けが早く身につきます。

Q. VAR / RETURN はいつ使えばいいですか?

同じ式を複数回使う場合、または複雑な計算でデバッグしたい場合に使います。VARで定義した変数は1度だけ評価されるため、パフォーマンスも上がります。メジャーが5行を超えるなら、VAR / RETURN で分けて書くのが読みやすくなりますよ。

Q. 2023年以降に追加されたDAX関数にはどんなものがありますか?

WINDOW・OFFSET・INDEX・ORDERBY・PARTITIONBYなどのウィンドウ関数が追加されました。ビジュアル計算(Visual Calculations)機能と組み合わせて使うと、前期比・累計・移動平均などが今までよりシンプルに書けます。EVALUATEANDLOGというデバッグ関数も便利です。

Q. DAX関数の公式リファレンスはどこで見られますか?

Microsoft Learnの公式サイトに、機能別のDAX関数リファレンスが掲載されています。関数ごとの構文・引数・戻り値・使用例が確認できます。日本語版もあるので、引数の仕様で迷ったときはぜひ参照してください。

Q. ビジュアル計算とDAXメジャーはどう使い分ければよいですか?

ビジュアル計算は「特定のビジュアルだけで使う一時的な計算(累計・前期比など)」に向いています。一方、複数のビジュアルで共通して使いたい指標や、セマンティックモデル全体で管理したいビジネスロジックはDAXメジャーで定義します。「このビジュアルだけで完結する計算ならビジュアル計算、再利用するならメジャー」という判断基準が使いやすいです。

Q. DAX Query Viewはどんな場面で使いますか?

主にメジャーのデバッグと検証に使います。EVALUATE文でメジャーの計算結果をテーブル形式で確認でき、DEFINE MEASUREで一時的にメジャーを書き換えながら動作を検証できます。本番環境のセマンティックモデルを変えずに式の挙動を確かめたい場合に特に便利です。

ビジュアル計算(Visual Calculations)でメジャーを書かずに累計・移動平均を出す

2024年からプレビュー提供されていた「ビジュアル計算(Visual Calculations)」が、2026年5月のPower BIアップデートで正式リリース(GA)になりました。累計や移動平均、前期比といった「行の位置を意識した計算」を、メジャーを一切書かずに作れる新機能です。

ビジュアル計算とは、セマンティックモデルにDAXメジャーを追加せず、ビジュアル上で直接定義・実行するDAX計算のことです。テーブルやマトリックスの「表示結果(集計済みデータ)」に対して動作し、行の位置を認識して計算します。

これまで累計や移動平均は、WINDOWやOFFSETなどのウィンドウ関数を駆使した複雑なメジャーが必要でした。ビジュアル計算なら、ビジュアルを選んで数式バーに1行書くだけで完成します。

ビジュアル計算の専用関数

ビジュアル計算では、行位置を扱う専用関数が用意されています。いずれもウィンドウ関数のショートカットとして機能し、記述がぐっとシンプルになります。

関数役割対応するウィンドウ関数
RUNNINGSUM累計を計算するWINDOWのショートカット
MOVINGAVERAGE移動平均を計算するWINDOWのショートカット
PREVIOUS前の行の値を参照するOFFSET(-1)のショートカット
NEXT次の行の値を参照するOFFSET(1)のショートカット
FIRST先頭行の値を参照するINDEX(1)のショートカット
LAST末尾行の値を参照するINDEX(-1)のショートカット

たとえば累計売上を出したいときは、これだけで済みます。

累計売上 = RUNNINGSUM([売上金額])

移動平均なら、第2引数で対象期間を指定します。直近2行の移動平均を出す例です。

移動平均売上 = MOVINGAVERAGE([売上金額], 2)

前の行との差分(前期比の差)を出したいときは、PREVIOUSが活躍します。

前行との差 = [利益] - PREVIOUS([利益])

これらの計算を従来のメジャーで書くと、WINDOWやOFFSETを使った数行のコードが必要でした。ビジュアル計算ならワンライナーで書けるうえ、行コンテキストやフィルターコンテキストの細かい制御も不要です。

TIP
ビジュアル計算には11種類のテンプレート(累計・移動平均・親比率・総計比率・前値比較・末尾比較など)が用意されています。数式を覚えていなくても、テンプレートを選ぶだけで計算式の雛形が入力されますよ。

ビジュアル計算の制限事項

便利な反面、使えない場面もあります。GA後も継続している制限を押さえておきましょう。

  • リレーションシップを参照できない: RELATED・USERELATIONSHIP・RELATEDTABLEは使用不可です。別テーブルの値を引っ張る計算には向きません。
  • スライサーに適用できない: ビジュアル計算の結果はスライサーやフィルターの条件として使えません。
  • 対応ビジュアルが限られる: R/Pythonビジュアル、一部のAIビジュアル、カスタムビジュアルには非対応です。
  • 共有に制約がある: ダッシュボードへのピン留めやPublish to Webができず、エクスポートデータにも結果が含まれません。

WARNING
ビジュアル計算はモデルに保存されず、そのビジュアル上にのみ存在します。複数のビジュアルで同じ計算を使い回したい場合は、従来どおりメジャーで定義してください。「このビジュアル限定の表示用計算」と割り切って使うのがコツです。

つまり「単一のビジュアル内で完結する表示計算」にはビジュアル計算、「複数の場所で再利用する集計」にはメジャー、という使い分けになります。累計や移動平均をサッと1つのレポートに足したいときは、ビジュアル計算がいちばん手軽ですよ。

DAX Query Viewでメジャーをデバッグする

メジャーを書いたのに「数値が合わない」「思った値が返ってこない」と悩んだ経験はありませんか。そんなときに役立つのが「DAX Query View(DAXクエリビュー)」です。2024年にPower BI Desktopへ追加され、Web版(Power BI Service)でも使えます。

DAX Query Viewは、DAXの「クエリ」を記述・実行・デバッグするための専用ビューです。ここでいうクエリとは、EVALUATEステートメントで始まるデータ取得用の式のこと。メジャーや計算列を定義する通常の「数式」とは別物で、SQLのSELECT文に近い感覚で使えます。

最大の用途は、メジャーのデバッグです。作ったメジャーが正しい値を返すか、ビジュアルに載せる前に単体でチェックできます。

メジャーを単体で実行して確認する

DAX Query Viewの一番かんたんな使い方は「Quick queries(クイッククエリ)」です。フィールドリストでメジャーを右クリックし、「Quick queries」→「Evaluate」を選ぶと、そのメジャーを単体実行するクエリが自動生成されます。

EVALUATE
    { [売上合計] }

これを実行すると、フィルターなしの状態でメジャーの値が返ります。「ビジュアルだと変な値だけど、素の値は正しいのか?」を切り分けるのに便利です。

テーブルの中身を確認したいときは、「Quick queries」→「Show top 100 rows」を選びます。

EVALUATE
    TOPN(100, 売上テーブル)

スコープ付きメジャーで安全にテストする

既存のメジャーを修正したいけれど、いきなりモデルを書き換えるのは怖い。そんなときはDEFINE MEASUREブロックでスコープ付きメジャーを定義します。モデルには影響を与えず、その場限りのメジャーとしてテストできます。

DEFINE
    MEASURE 売上テーブル[テスト売上] =
        CALCULATE(
            SUM(売上テーブル[金額]),
            売上テーブル[地域] = "東京"
        )
EVALUATE
    { [テスト売上] }

数式を調整しながら実行を繰り返し、納得のいく結果になったら「Update model with changes」でモデルへ反映できます。本番のメジャーを壊さずに試行錯誤できるのが大きな強みです。

TIP
Performance Analyzer(パフォーマンスアナライザー)と組み合わせると、ビジュアルが発行しているDAXクエリをそのままDAX Query Viewにコピーして実行できます。「どのビジュアルが遅いのか」「クエリのどこが重いのか」を分析するときに役立ちますよ。

NOTE
DAX Query ViewはPower BIのWebブラウザ版でも使えます。ただしWeb版はクエリを閉じると破棄され保存されません。返却できる行数もWeb版は99,999行まで、Desktop版は100万値までと差があります。じっくりデバッグするならDesktop版がおすすめです。

Copilot for Power BIでDAXメジャーを生成する

「DAXの構文をいちいち調べるのが面倒」という方には、AIアシスタントの「Copilot for Power BI」が選択肢になります。自然言語で指示するとDAXクエリを生成してくれたり、作ったメジャーの説明文を自動で書いてくれたりします。

DAX関連でCopilotができることは、主に次の2つです。

  • DAXクエリの生成: DAX Query View内のCopilotチャットで、自然言語からDAXクエリを生成します
  • メジャーの説明文の自動生成: モデル編集中にワンクリックで、メジャーのdescription(説明文)を生成します

ただし、Copilotは誰でもすぐ使えるわけではありません。利用には少しハードルがあるので、導入前に条件を確認しておきましょう。

ライセンス要件に注意

Copilot for Power BIを使うには、有料の容量ライセンスが必要です。2026年5月時点の要件は次のとおりです。

項目内容
必要なライセンスMicrosoft Fabric F2以上、またはPower BI Premium P1以上
月額の目安F2で月額約262ドル(容量単位の課金)
使えないライセンスPower BI Pro単体、Premium Per User(PPU)単体

ポイントは、個人向けのPPU(Premium Per User、月20ドル)では使えないことです。Copilotは組織単位で契約する容量ライセンスが前提になります。

NOTE
以前は最低でもF64容量(月額約8,384ドル)が必要でしたが、2025年4月以降はF2(月額約262ドル)まで引き下げられました。以前より導入のハードルは大きく下がっています。とはいえ個人や小規模チームには依然として高めなので、本当に必要かを見極めてから契約しましょう。

日本語プロンプトは「動くことがある」レベル

日本語で指示を出したいところですが、ここにも注意が必要です。Copilotが公式にサポートしている言語は英語のみです。

Microsoftの公式ドキュメントには「英語以外の言語のプロンプトでも関連する応答が返ることはあるが、多言語利用は現時点で公式にはサポートされていない」と明記されています。日本語で入力して動くこともありますが、品質は保証されません。

WARNING
業務で安定した結果が欲しいなら、DAX生成のプロンプトは英語で書くのが無難です。「Create a measure for year-over-year sales growth」のように、シンプルな英語で指示すると精度が上がります。日本語プロンプトはあくまで「動けばラッキー」と考えておきましょう。

なお、Copilotの利用にはFabric容量のリージョンが対応リージョンである必要があり、主権クラウド(sovereign clouds)には非対応です。日本リージョンが対応しているかは、契約前にMicrosoft公式のリージョン提供状況ページで確認しておくと安心です。

Copilotは便利ですが、生成されたDAXが必ずしも正しいとは限りません。最終的には自分で内容を理解し、CALCULATEやDIVIDEといった基本関数の動きを把握しておくことが大切です。AIに任せきりにせず、検算できる力を持っておきましょう。

DAXメジャーが遅いときの最適化チェックリスト

「メジャーを書いたらレポートの表示がもたつくようになった」「スライサーを切り替えるたびに数秒待たされる」というのは、DAXを書きこむと必ずぶつかる壁です。原因のほとんどはメジャーの書き方にあり、ちょっとした書き換えで大きく改善するケースが多いですよ。

まずは「遅さを数値で見える化する」ところから始めましょう。

DAX Studio で遅さを診断する

無料ツールの DAX Studio には、メジャーの実行時間を測定する機能が用意されています。代表的なのが次の3つです。

機能用途
Server Timingsクエリの「Storage Engine(SE)」と「Formula Engine(FE)」の処理時間を分解して表示
Query PlanDAX 式が内部でどんな実行計画になるかを可視化
VertiPaq Analyzerテーブル・列ごとのメモリ使用量とカーディナリティ(個別値の数)を集計

ざっくりした見方として、SE時間が長ければデータ量・カーディナリティの問題FE時間が長ければ式の書き方の問題と切り分けられます。Power BIの「Performance Analyzer(パフォーマンスアナライザー)」で重いビジュアルを特定したら、そこから出力されたDAXクエリをDAX Studioに貼ってServer Timingsを有効にし、実行する流れです。

よくあるパフォーマンス問題4選

実務で頻発する書き方の問題を、改善案とセットで整理しました。

1. FILTER の乱用

FILTERはテーブル全体を走査するため、単純な条件ならCALCULATEの引数に直接書くほうが速くなります。

遅い書き方:

東京売上 = CALCULATE(
    SUM(売上[金額]),
    FILTER(売上, 売上[地域] = "東京")
)

速い書き方:

東京売上 = CALCULATE(
    SUM(売上[金額]),
    売上[地域] = "東京"
)

複雑な複合条件や複数列をまたぐ判定でなければ、FILTERは不要です。

2. イテレータ関数のカーディナリティが高すぎる

SUMXやAVERAGEXの第1引数に「明細テーブル」をそのまま渡すと、数百万行を1行ずつ評価することになります。事前にSUMMARIZEで集約してから渡すか、そもそも計算列で済むなら計算列にすることも検討しましょう。

3. 同じ式を何度も計算している

DIVIDEなどの引数に同じ式が複数回出てくる場合、それぞれ別個に評価されます。VARで1度だけ計算し、結果を使い回すとFE時間が短縮できます。

前年比 = 
VAR _当期 = SUM(売上[金額])
VAR _前年 = CALCULATE(SUM(売上[金額]), SAMEPERIODLASTYEAR(カレンダー[Date]))
RETURN
    DIVIDE(_当期 - _前年, _前年, 0)

4. 計算列でできる処理をメジャーで書いている/その逆

「単価 × 数量」のように行ごとに値が固定で決まるものは計算列向き。スライサーの状態に応じて動的に変わる集計はメジャー向き。逆にすると、計算列はメモリを食い、メジャーは毎回再計算が走って遅くなります。

NOTE
計算列を増やすとモデルサイズが膨らみ、メモリ使用量が増えます。VertiPaq Analyzerで「Cardinality(個別値の数)」が高い列ほどメモリを消費しやすいので、本当に必要な計算列かを定期的に見直しましょう。

改善できたかを確認する習慣

メジャーを書き換えたら、変更前と変更後のServer Timingsを必ず見比べてください。体感では「速くなった気がする」だけのこともよくあります。数値で確認すると、書き換えがムダだったか効果が出たかが一目でわかりますよ。

コピペで使えるタイムインテリジェンス・テンプレート集

タイムインテリジェンス関数は便利ですが、書き慣れていないと毎回検索することになりますよね。ここではよく使うパターンをテンプレ化してまとめました。カレンダーテーブルの列名は環境に合わせて差し替えてください(例では カレンダー[Date] としています)。

NOTE
以下のテンプレートを動かすには、データモデルに「日付テーブル(カレンダーテーブル)」が必要です。CALENDARやCALENDARAUTOで作成し、「マークアズデートテーブル」を指定しておくのが基本です。詳しくは「タイムインテリジェンス関数」セクションも参照してください。

前年同期売上(年・四半期・月どれでも対応)

スライサーで選んでいる期間を、そのまま1年前にずらして集計します。

前年売上 = CALCULATE(
    SUM(売上[金額]),
    SAMEPERIODLASTYEAR(カレンダー[Date])
)

前年比(成長率)

DIVIDEとVARを組み合わせて、ゼロ除算とパフォーマンスの両方をケアした書き方です。

前年比 = 
VAR _当期 = SUM(売上[金額])
VAR _前年 = CALCULATE(SUM(売上[金額]), SAMEPERIODLASTYEAR(カレンダー[Date]))
RETURN
    DIVIDE(_当期 - _前年, _前年, 0)

数値の書式を「パーセント」にしておくと、レポートで +12% のように表示できます。

前月比

DATEADDで1か月ずらします。日数ベースではなく月単位でずれるので、月末の31日/30日問題もうまく処理されますよ。

前月売上 = CALCULATE(
    SUM(売上[金額]),
    DATEADD(カレンダー[Date], -1, MONTH)
)

前月比 = 
VAR _当月 = SUM(売上[金額])
VAR _前月 = [前月売上]
RETURN
    DIVIDE(_当月 - _前月, _前月, 0)

年度累計(YTD)

会計年度が1月〜12月ならシンプルに TOTALYTD で書けます。

年度累計売上 = TOTALYTD(
    SUM(売上[金額]),
    カレンダー[Date]
)

会計年度が4月始まりなど、暦年と違う場合は第3引数で年度末日を指定します。

年度累計売上(4月始まり) = TOTALYTD(
    SUM(売上[金額]),
    カレンダー[Date],
    "3/31"
)

四半期累計(QTD)・月度累計(MTD)

YTD と同じ書き方で、累計の単位だけが変わります。

四半期累計売上 = TOTALQTD(SUM(売上[金額]), カレンダー[Date])
月度累計売上 = TOTALMTD(SUM(売上[金額]), カレンダー[Date])

移動平均(直近3か月)

DATESINPERIOD で「現在の日付から3か月さかのぼった範囲」を取り、その期間の平均を出します。マーケティングや在庫レポートでよく使うパターンです。

3か月移動平均 = 
CALCULATE(
    AVERAGEX(
        VALUES(カレンダー[年月]),
        [売上合計]
    ),
    DATESINPERIOD(カレンダー[Date], MAX(カレンダー[Date]), -3, MONTH)
)

累計(指定期間の合計)

「期初からの累計」を出したいときは DATESBETWEEN を使います。年度の途中から始まる案件の累計にも応用できます。

期初からの累計 = CALCULATE(
    SUM(売上[金額]),
    DATESBETWEEN(
        カレンダー[Date],
        DATE(2026, 4, 1),
        MAX(カレンダー[Date])
    )
)

TIP
2026年5月にGAしたビジュアル計算(Visual Calculations)の RUNNINGSUM や MOVINGAVERAGE を使えば、上記の累計や移動平均をもっと短く書けます。1つのビジュアル内だけで使う計算ならビジュアル計算、複数のビジュアルやスライサーで再利用するならメジャー、と使い分けるのがおすすめです。

保守性が上がるDAXコーディング規約

DAX は書き始めると「動けば正義」になりがちですが、3か月後の自分が読み返したときに解読不能になることがよくあります。チームで共有するレポートならなおさらです。Power BI 業界で広く使われているスタイルをベースに、押さえておきたいルールを4つ紹介します。

メジャー名はビジネス語彙で書く

メジャー名はレポート利用者の目に直接触れます。Measure1 売上_集計2 のような技術寄りの名前ではなく、ビジネス側の用語をそのまま使いましょう。

悪い例良い例
Sum_Sales売上合計
Sales_LY前年売上
Sales_YoY_Pct前年比
Calc_Measure_1達成率

英語で書く場合も Total Sales Sales LY のように、スペース区切りの自然な英語フレーズが基本です。フォルダ(Display folder)でカテゴリ分けすると、フィールドリストでも探しやすくなりますよ。

VAR 名は小文字・アンダースコア始まりで統一する

メジャーの中で使う変数(VAR)は、メジャー名と区別するためにアンダースコア始まりや小文字始まりで書くスタイルが定番です。本記事でも _当期 _前年 のように書いています。

前年比 = 
VAR _当期 = SUM(売上[金額])
VAR _前年 = CALCULATE(SUM(売上[金額]), SAMEPERIODLASTYEAR(カレンダー[Date]))
VAR _差 = _当期 - _前年
RETURN
    DIVIDE(_差, _前年, 0)

ぱっと見たときに「これはメジャー名じゃなくて、このメジャーの中だけで使う変数だな」と判別できるのが利点です。

引数は改行+インデントで縦に並べる

CALCULATE や SWITCH など、引数を複数取る関数は1行に詰め込むと読めなくなります。引数ごとに改行し、インデントを揃えると、修正もレビューもラクになりますよ。

// 読みづらい
売上ランク = SWITCH(TRUE(), [売上合計] >= 1000000, "A", [売上合計] >= 500000, "B", [売上合計] >= 100000, "C", "D")

// 読みやすい
売上ランク = 
SWITCH(
    TRUE(),
    [売上合計] >= 1000000, "A",
    [売上合計] >= 500000, "B",
    [売上合計] >= 100000, "C",
    "D"
)

DAX Studio や Tabular Editor には「Format DAX」機能があるので、書きあがったメジャーを自動整形する習慣を付けると統一感が出ます。

1つのメジャーに1つの責務

1つのメジャーで「前年比も計算するし、達成度の判定もするし、書式も変える」となると、修正時にどこを直せばいいか分からなくなります。基準メジャーを分け、合成メジャーから呼び出す形にしましょう。

売上合計 = SUM(売上[金額])
前年売上 = CALCULATE([売上合計], SAMEPERIODLASTYEAR(カレンダー[Date]))
前年比 = DIVIDE([売上合計] - [前年売上], [前年売上], 0)

前年比 の中で SUM(売上[金額]) を直接書くのではなく、[売上合計] メジャーを呼ぶのがポイントです。後から「売上合計」の定義を「税抜き金額」に変えたくなったとき、売上合計 メジャー1つを直すだけで全部のメジャーに反映されますよ。

TIP
DAX のコーディング規約は SQLBI 社が公開しているガイド(dax.guide / sqlbi.com)が事実上の業界標準です。チームでスタイルを揃えたい場合は、SQLBI のスタイルガイドをベースに、自社のメジャー命名ルールを足していくとブレません。

まとめ

DAX関数は200以上ありますが、日常的に使うのはそのうちの一部です。まずはこの7つから始めてみてください。

  • CALCULATE: 条件付き集計の要
  • SUMX: 行ごとの計算と合計
  • FILTER: データの絞り込み
  • ALL: フィルター解除で構成比計算
  • RELATED: テーブルをまたいだ値の取得
  • DIVIDE: ゼロ除算を安全に処理
  • SWITCH: 条件分岐をすっきり書く

慣れてきたら、タイムインテリジェンス関数(SAMEPERIODLASTYEARやTOTALYTDなど)や、VAR / RETURN による変数定義にも挑戦してみてください。前年比や累計といった、ビジネスレポートに欠かせない計算がぐっとラクになりますよ。

Excel関数の復習にはExcel関数一覧(機能別)Excel関数一覧(アルファベット順)も参考になります。DAXとExcel関数を行き来しながら、データ分析の引き出しを増やしていきましょう。

タイトルとURLをコピーしました