Power BI DAX関数入門|メジャーの作り方とCALCULATE・SUMX・DIVIDEの使い方を解説
Power BIでグラフを作っていると、「売上の前月比を出したい」「条件付きで集計したい」「割合をグラフに表示したい」といった場面に必ずぶつかります。そこで必要になるのがDAX関数です。
DAXはExcel関数と似た記法ですが、考え方が異なります。この記事では、メジャーの作り方とよく使うDAX関数の使い方を、Excel関数との比較を交えながら初心者向けに解説します。
・DAXとは何か・Excel関数との違い
・メジャーと計算列(新しい列)の違いと使い分け
・メジャーの作成手順
・よく使うDAX関数8選(SUM / CALCULATE / SUMX / DIVIDE / COUNTROWS / IF / FILTER / DISTINCTCOUNT)
・SUM と SUMX の違い(よくある混乱を解消)
DAXとは何か
DAX(Data Analysis Expressions、ダックス)は、Power BIでデータの集計・計算を行うための数式言語です。「売上合計」「前月比」「利益率」など、グラフに表示したい独自の指標(メジャー)を自分で定義するために使います。
Excel関数との比較
| 比較項目 | Excel関数 | DAX(Power BI) |
|---|---|---|
| 記法の雰囲気 | =SUM(B2:B10) | 売上合計 = SUM(‘売上'[金額]) |
| 参照の単位 | セル範囲(B2:B10) | テーブルの列全体(’テーブル名'[列名]) |
| フィルターへの反応 | 手動で範囲を変える必要がある | スライサーや絞り込みに自動で連動する |
| 主な用途 | セルへの計算式記入 | グラフ・カードに表示する指標(メジャー)の定義 |
メジャーと計算列(新しい列)の違い
DAXを使う場所は主に2種類あります。
| 種類 | 作成場所 | 計算タイミング | 向いている用途 |
|---|---|---|---|
| メジャー | テーブルに紐づく(列として存在しない) | グラフに配置した瞬間、フィルターに応じて動的に計算 | 合計・平均・比率・件数など集計値をグラフに使いたい |
| 計算列(新しい列) | テーブルに新しい列として追加 | データ読み込み時に行ごとに一度計算して固定 | 「単価 × 個数 = 売上」など行ごとの計算値を列として保持したい |
メジャーの作成手順
- 「モデリング」タブ → 「新しいメジャー」をクリック(または、フィールドペインのテーブルを右クリック → 「新しいメジャー」)
- 数式バーに DAX 式を入力する(例:
売上合計 = SUM('売上データ'[金額])) - Enter を押して確定
- 作成したメジャーがフィールドペインに電卓アイコン付きで追加される
- このメジャーをグラフの「値」フィールドにドラッグして使う
・式の左辺がメジャー名(例:
売上合計)、右辺が計算式・テーブルと列の参照は
'テーブル名'[列名] の形式(テーブル名はシングルクォート)・列名のみの場合は
[列名] と書く場合もある(同一テーブル内)よく使うDAX関数8選
①SUM:列の合計を求める
最も基本的な集計関数です。指定した列の全行の合計を返します。
構文:SUM('テーブル名'[列名])
例:
売上合計 = SUM('売上データ'[金額])
スライサーで地域や期間を絞り込むと、その絞り込み条件に合った合計が自動的に表示されます。
②CALCULATE:フィルターを指定して集計する
DAXの中で最もよく使われる重要な関数です。「○○という条件のときの合計」を計算できます。
構文:CALCULATE(集計式, フィルター条件1, フィルター条件2, ...)
例①:東京の売上合計だけを集計
東京売上 = CALCULATE(SUM('売上データ'[金額]), '売上データ'[地域] = "東京")
例②:2024年の売上合計だけを集計
2024年売上 = CALCULATE(SUM('売上データ'[金額]), YEAR('売上データ'[日付]) = 2024)
CALCULATE(SUM([金額]), [地域]="東京") は常に東京の合計を表示します。「比較用の固定値」を作るときに活用します。③SUM vs SUMX:列全体の合計 vs 行ごとの計算後に合計
初心者が混乱しやすいポイントです。
| 関数 | 計算の仕方 | 向いている場面 |
|---|---|---|
| SUM | 既存の列の値をそのまま合計する | 金額列・個数列など、列がすでに存在する場合 |
| SUMX | 各行で式を計算してから、その結果を合計する | 「単価 × 個数」のように列同士を掛けた結果を合計したい場合 |
SUMX の例:単価と個数を掛けた売上を行ごとに計算して合計
売上合計 = SUMX('売上データ', '売上データ'[単価] * '売上データ'[個数])
もし「売上金額」列がすでにExcelに存在するなら SUM、「単価×個数」を計算しながら合計したいなら SUMX を使います。
④DIVIDE:ゼロ除算エラーを防いで割り算する
Power BIで「利益率」「達成率」などの割合を計算するとき、分母がゼロになるとエラーになります。DIVIDE を使うとエラーを安全に処理できます。
構文:DIVIDE(分子, 分母, [エラー時の代替値])
例:利益率を計算(分母がゼロの場合は0を返す)
利益率 = DIVIDE(SUM('売上データ'[利益]), SUM('売上データ'[売上金額]), 0)
[利益] / [売上金額] と書くと分母がゼロのときエラーになりますが、DIVIDE([利益], [売上金額], 0) なら0を返して正常に動き続けます。⑤COUNTROWS:テーブルの行数を数える
件数(注文件数・顧客数など)を数えたいときに使います。
構文:COUNTROWS('テーブル名')
例:売上データの件数
注文件数 = COUNTROWS('売上データ')
⑥DISTINCTCOUNT:重複を除いた件数を数える
「何人のユニーク顧客が購入したか」のような、重複を除いた件数を求めます。
例:ユニーク顧客数
ユニーク顧客数 = DISTINCTCOUNT('売上データ'[顧客ID])
⑦IF:条件で結果を分岐する
Excel の IF 関数と同じ使い方です。
例:売上が100万円以上なら「達成」、未満なら「未達成」と表示
達成状況 = IF(SUM('売上データ'[金額]) >= 1000000, "達成", "未達成")
⑧FILTER:条件でテーブルを絞り込む
CALCULATE と組み合わせて使うことが多い関数です。より複雑な条件を指定したいときに使います。
例:売上金額が5万円以上の行だけを対象に件数を数える
高額注文件数 = COUNTROWS(FILTER('売上データ', '売上データ'[金額] >= 50000))
よく使うDAX関数の早見表
| 関数 | 用途 | Excel類似関数 |
|---|---|---|
| SUM | 列の合計 | SUM |
| SUMX | 行ごとに計算してから合計 | SUMPRODUCT |
| AVERAGE | 列の平均 | AVERAGE |
| CALCULATE | フィルターを指定して集計 | SUMIF / COUNTIF |
| DIVIDE | 安全な割り算(ゼロ除算回避) | IFERROR(A/B,0) |
| COUNTROWS | 行数を数える | COUNTA |
| DISTINCTCOUNT | 重複を除いた件数 | SUMPRODUCT(1/COUNTIF…) |
| IF | 条件分岐 | IF |
| FILTER | テーブルを条件で絞り込む | -(DAX固有の考え方) |
まとめ:DAXを始めるための最初の3ステップ
- まず
SUMでメジャーを1つ作ってみる:「モデリング」→「新しいメジャー」→売上合計 = SUM('データ'[金額])を入力して、グラフに使ってみましょう - 次に
DIVIDEで割合を作る:「利益率 = DIVIDE(SUM([利益]), SUM([売上金額]), 0)」のような指標を追加してみましょう - 最後に
CALCULATEで条件付き集計を試す:特定の地域や期間に絞った合計を作ると、CALCULATEの使い方が体感できます
DAXはExcel関数に似ていますが、「スライサーやフィルターに自動で反応する」という点が根本的に異なります。この感覚をつかむと、Power BIでのレポート作成の幅が大きく広がります。







