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最大の特徴は「コンテキスト(文脈)に応じて自動的に計算が変わる」点です。たとえば「売上合計」というメジャーを1つ作るだけで、スライサーで「東京」を選べば東京の合計、「大阪」を選べば大阪の合計に自動的に切り替わります。ExcelのSUM関数では、範囲を手動で変えなければなりません。

メジャーと計算列(新しい列)の違い

DAXを使う場所は主に2種類あります。

種類 作成場所 計算タイミング 向いている用途
メジャー テーブルに紐づく(列として存在しない) グラフに配置した瞬間、フィルターに応じて動的に計算 合計・平均・比率・件数など集計値をグラフに使いたい
計算列(新しい列) テーブルに新しい列として追加 データ読み込み時に行ごとに一度計算して固定 「単価 × 個数 = 売上」など行ごとの計算値を列として保持したい
迷ったらメジャーを使うのが基本です。グラフに表示する数値(売上合計・達成率・前月比など)はほぼすべてメジャーで作ります。計算列は「他の列から派生した固定値を行ごとに持ちたい」場合に使います。

メジャーの作成手順

  1. モデリング」タブ → 「新しいメジャー」をクリック(または、フィールドペインのテーブルを右クリック → 「新しいメジャー」)
  2. 数式バーに DAX 式を入力する(例:売上合計 = SUM('売上データ'[金額])
  3. Enter を押して確定
  4. 作成したメジャーがフィールドペインに電卓アイコン付きで追加される
  5. このメジャーをグラフの「値」フィールドにドラッグして使う
⚠️ DAX式の基本ルール
・式の左辺がメジャー名(例:売上合計)、右辺が計算式
・テーブルと列の参照は 'テーブル名'[列名] の形式(テーブル名はシングルクォート)
・列名のみの場合は [列名] と書く場合もある(同一テーブル内)

よく使うDAX関数8選

①SUM:列の合計を求める

最も基本的な集計関数です。指定した列の全行の合計を返します。

構文SUM('テーブル名'[列名])

売上合計 = SUM('売上データ'[金額])

スライサーで地域や期間を絞り込むと、その絞り込み条件に合った合計が自動的に表示されます。

②CALCULATE:フィルターを指定して集計する

DAXの中で最もよく使われる重要な関数です。「○○という条件のときの合計」を計算できます。

構文CALCULATE(集計式, フィルター条件1, フィルター条件2, ...)

例①:東京の売上合計だけを集計

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

例②:2024年の売上合計だけを集計

2024年売上 = CALCULATE(SUM('売上データ'[金額]), YEAR('売上データ'[日付]) = 2024)
💡 CALCULATEは「文脈を上書きする」関数。スライサーで「大阪」を選んでいても、CALCULATE(SUM([金額]), [地域]="東京") は常に東京の合計を表示します。「比較用の固定値」を作るときに活用します。

③SUM vs SUMX:列全体の合計 vs 行ごとの計算後に合計

初心者が混乱しやすいポイントです。

関数 計算の仕方 向いている場面
SUM 既存の列の値をそのまま合計する 金額列・個数列など、列がすでに存在する場合
SUMX 各行で式を計算してから、その結果を合計する 「単価 × 個数」のように列同士を掛けた結果を合計したい場合

SUMX の例:単価と個数を掛けた売上を行ごとに計算して合計

売上合計 = SUMX('売上データ', '売上データ'[単価] * '売上データ'[個数])

もし「売上金額」列がすでにExcelに存在するなら SUM、「単価×個数」を計算しながら合計したいなら SUMX を使います。

④DIVIDE:ゼロ除算エラーを防いで割り算する

Power BIで「利益率」「達成率」などの割合を計算するとき、分母がゼロになるとエラーになります。DIVIDE を使うとエラーを安全に処理できます。

構文DIVIDE(分子, 分母, [エラー時の代替値])

例:利益率を計算(分母がゼロの場合は0を返す)

利益率 = DIVIDE(SUM('売上データ'[利益]), SUM('売上データ'[売上金額]), 0)
割り算には必ず DIVIDE を使いましょう。[利益] / [売上金額] と書くと分母がゼロのときエラーになりますが、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ステップ

  1. まず SUM でメジャーを1つ作ってみる:「モデリング」→「新しいメジャー」→ 売上合計 = SUM('データ'[金額]) を入力して、グラフに使ってみましょう
  2. 次に DIVIDE で割合を作る:「利益率 = DIVIDE(SUM([利益]), SUM([売上金額]), 0)」のような指標を追加してみましょう
  3. 最後に CALCULATE で条件付き集計を試す:特定の地域や期間に絞った合計を作ると、CALCULATEの使い方が体感できます

DAXはExcel関数に似ていますが、「スライサーやフィルターに自動で反応する」という点が根本的に異なります。この感覚をつかむと、Power BIでのレポート作成の幅が大きく広がります。

ABOUT ME
IT解決チャンネル編集部
ExcelやWord、Windows、Googleスプレッドシートなど、ビジネスで使うITツールの使い方を初心者にもわかりやすく解説しています。関数の使い方から実務で役立つ応用テクニックまで、画像付きでていねいに紹介。パソコン操作で困ったときの頼れる情報源を目指しています。