第1回〜第4回のPower BI使い方ガイドでは、Power BIの導入方法や基本的な使い方、グラフ作成、複数データのリレーション設定、日付スライサー、KPIカードの作成方法について紹介してきました。
第1回:Power BI使い方ガイド|BIツールで何ができる?導入方法と最初にやること
第2回:Power BI使い方ガイド|日付データの加工とグラフ・テーブル作成
第3回:Power BI使い方ガイド|複数データのリレーション方法と日付スライサーの使い方
第4回:Power BI使い方ガイド|ダッシュボードの作り方の基礎:KPIカードの作成方法
Power BIでグラフやテーブルを作っていくと、「売上の合計」や「前週比」など、自分で指標を定義して計算する機会も多くなります。こうしたオリジナルの指標を作成する際に使うのが「DAX(Data Analysis Expressions)」と呼ばれる関数です。
今回は基本的なDAXと、その用途を紹介します。DAXを理解することで、より柔軟にデータを扱い、自分の目的に合った指標を作成できるようになります。
目次
DAX関数とは?何ができるの?
DAXは、Power BIで集計や条件付き計算を行うための式言語です。Excelの数式にあたるものと考えるとイメージしやすいかもしれません。Excelでは数式を使って合計や平均を出すように、Power BIでは指標の定義や計算にDAXを使用します。
DAXには、Excel関数と共通する構文や関数名も多く含まれており、Excelに慣れている方であれば比較的スムーズに取り組むことができます。しかし、DAX特有のルールや構造もあるため、最初は戸惑う場面もあるかもしれません。
DAX関数の基本ルール
DAXを記載する際には、いくつかの基本的なルールを理解しておく必要があります。最初にこれらのルールを押さえておくことで、式の記述ミスを防ぎ、Power BI上でスムーズに集計や計算ができるようになります。
数式は「=」から始める
DAXの式は、必ず「=(イコール)」から始める必要があります。この形式はExcel関数と共通しており、Power BIでも同様に数式を定義します。=の前後には半角スペースを挟む必要があり、=の前がDAXの項目名、後が数式の内容になります。
列の参照は「テーブル名[列名]」と表記する
列を指定する際には、「テーブル名[列名]」という形式で記述します。例えば「Orders」というテーブル(シート名)の「total_price」列を指定する場合、以下のように表記します。
Orders[total_price]
式は「メジャー」として定義する


DAXは主にメジャーとして定義します。上部ツールバーの「ホーム」または「モデリング」内にある「新しいメジャー」を選択して作成してください。例えば「合計金額」という項目名で、「Orders」テーブルの「total_price」列を合計したい場合、次のように入力します。
合計金額 = SUM(Orders[total_price])

よく使われるDAX関数
ここからは、Power BIでよく使われるDAX関数を用途別に紹介していきます。実際の式や使用例もあわせて掲載していますので、グラフやKPIカードを作る際の参考にしてください。テーブル名および列名の部分は適宜差し替えをお願いします。。
1.基本的な集計で使うDAX
レポート上で売上や件数の集計をしたいときに使う、最も基本的な関数です。
SUM:合計を求める
売上や費用など、数値列の合計を計算します。
合計売上 = SUM(Orders[total_price])
AVERAGE:平均を求める
単価や点数など、平均値を知りたいときに使用します。
平均単価 = AVERAGE(Products[UnitPrice])
MIN / MAX:最小値・最大値を求める
価格帯や販売実績の上下限を確認する際に便利です。
最低価格 = MIN(Products[UnitPrice])
最高価格 = MAX(Products[UnitPrice])
COUNT / COUNTA:件数をカウントする
COUNTは、数値が入力されているセルの件数だけをカウントします。空欄や文字列はカウントされません。COUNTAは、文字列・数値を問わず、空欄以外のセルをすべてカウントします。
注文件数 = COUNT(Orders[OrderID])
名前入力数 = COUNTA(Forms[Name])
DISTINCTCOUNT:重複のない値の数をカウントする
DISTINCTCOUNT
は、同じ値が複数あった場合でも1つとしてカウントします。たとえば、同じユーザーが3回アクセスしていた場合でも、UserID
が同じであれば「1人」として数えられます。
ユーザー数 = DISTINCTCOUNT(Sessions[UserID])
2.条件付きの集計に使うDAX
単なる合計や件数だけでなく、特定の条件に当てはまるデータだけを集計したい場面で使用します。例えば「購入完了した件数だけを数える」「男性ユーザーのみの平均値を出す」といった場合です。
CALCULATE:指定した条件に基づいて再集計する
元の集計式に条件を加えて再計算するための関数です。次の例では、イベント名が “purchase” の行だけを対象にして件数をカウントしています。
購入完了数 = CALCULATE(
COUNT(Events[EventName]),
Events[EventName] = "purchase"
)
FILTER:複雑な条件を記述するときに使う
単純なイコール条件だけでなく、数値の比較や複数条件の組み合わせを指定したい場合に使用します。次の例では、価格が10,000円以上の商品のみの売上を合計しています。
高額商品売上 = CALCULATE(
SUM(Products[Price]),
FILTER(
Products,
Products[Price] > 10000
)
)
ALL:フィルターの影響を無視して集計する
指定したテーブルや列にかかっているフィルターを一時的に取り除く関数です。カテゴリ別の売上グラフで「全体売上に対する割合」を計算したいときなどに使います。
全体売上 = CALCULATE(
SUM(Orders[total_price]),
ALL(Orders)
)
3. 条件分岐や分類に使うDAX
集計値だけでなく、データを条件によって分類したい場面で使用する関数です。例えば「売上が一定以上のときは“高”、それ以外は“低”と表示する」「売上金額によってA~Dのランク分けをする」といった場合です。
IF:シンプルな条件分岐
条件を満たすかどうかで2通りの結果を返します。表示の切り替えや、分類用の列を作成するときに使います。
高単価フラグ = IF(Products[Price] > 10000, "高", "低")
SWITCH:複数条件に応じて値を切り替える
複数の条件を順に評価し、それぞれに応じた値を返す関数です。IF を入れ子構造にするよりも可読性が高く、分類処理に向いています。
売上ランク = SWITCH(
TRUE(),
Sales[Amount] >= 100000, "A",
Sales[Amount] >= 50000, "B",
Sales[Amount] >= 10000, "C",
"D"
)
AND / OR:複数条件を組み合わせる
複数の条件を同時にチェックしたい場合に使います。ANDは、すべての条件が成り立つ場合に「A」と判定し、それ以外は「B」と判定します。ORは、いずれか1つでも条件を満たしていれば「A」と判定し、どちらの条件も満たしていない場合は「B」と判定します。
注目商品 = IF(
AND(Products[Price] > 10000, Products[Stock] < 50),
"注目",
"対象外"
)
4. 日付の比較や期間集計に使うDAX
月ごとの推移や前日比など、特定の期間と比較したいときに使う関数です。これらの関数を使うためには、日付型のカラムが存在するカレンダーテーブルを作成し、対象テーブルの日付列とリレーション設定をしておく必要があります。
DATEADD:指定した期間だけずらしたデータを取得する
選択中の期間を起点に、日・週・月・年単位で前後にずらしたデータを取得できます。週単位の比較をしたい場合は7日ずらすことで対応できます。
前週売上 = CALCULATE(
SUM(Orders[total_price]),
DATEADD(Date[OrderDate], -7, "DAY")
)
PREVIOUSMONTH:前月の同期間のデータを取得する
現在選択されている日付範囲と同じ長さの前月期間を自動で取得します。
前月売上 = CALCULATE(
SUM(Orders[total_price]),
PREVIOUSMONTH(Date[OrderDate])
)
PREVIOUSDAY:前日のデータを取得する
前日と比較したい場合に使用します。日単位のKPIや、直近の動きを追うグラフなどに使用されます。
前日売上 = CALCULATE(
SUM(Orders[total_price]),
PREVIOUSDAY(Date[OrderDate])
)
5.リレーションや選択値の操作に使うDAX
別のセルから値を取得する場合に使用する関数です。ここでは、別テーブルから値を取得するRELATEDと、スライサーで選択された値を取得するSELECTEDVALUEを紹介します。
RELATED:リレーションされた別テーブルから値を取得する
リレーションを設定済みの別テーブルから列の値を取得する関数です。商品テーブルにカテゴリ名の列がない場合でも、カテゴリテーブルとリレーションがあればカテゴリ名を参照できます。
カテゴリ名 = RELATED(Categories[CategoryName])
SELECTEDVALUE:スライサーで選ばれている値を取得する
スライサーやフィルターで1つだけ選択されている値を、式や表示に反映できます。複数選択や未選択の場合は空白(または指定した代替値)を返します。
選択中の商品カテゴリ = SELECTEDVALUE(Products[Category])
6.文字列の操作や表示形式の変更に使うDAX
数値や日付を見やすく表示したり、複数の情報を組み合わせて表示したりする場合に使う関数です。ラベルの作成や、表やカードの表示内容を整えるときに役立ちます。
&:文字列をつなげる
複数の列や文字列を組み合わせて、1つの文字列として表示します。商品カテゴリと商品名を組み合わせたラベルや、数値に単位を付ける場合などに便利です。
商品ラベル = Products[Category] & " - " & Products[ProductName]
FORMAT:数値や日付の表示形式を変更する
数値や日付を指定した書式で表示できます。たとえば “#,##0円” とすれば”10,000円”のようにカンマ区切りと単位付きで表示できます。
売上ラベル = FORMAT(SUM(Orders[total_price]), "#,##0円")
ISBLANK:値が空白かどうかを判定する
セルが空白の場合に特定の表示をしたいときに使います。表示崩れやエラーを避けたい場面で有効です。
データ有無 = IF(ISBLANK(Orders[total_price]), "データなし", "データあり")
まとめ:まずは基本のDAX関数から使い始めよう
今回は、Power BIでよく使われるDAX関数を用途別に紹介しました。筆者も最初のうちは書き方やルールに戸惑うことが多く、正しいと思って書いた式でエラーが出ることもありました。しかし、基本的な関数を使いながら少しずつ慣れていくことで、必要な指標を自分で定義できるようになります。まずは本記事で紹介した関数から試してみてください。
次回はダッシュボードを構成するグラフ種類の選び方と作成方法について説明します。これからもPower BI初心者の方の役に立つ、実務に則した活用例をお届けします。
サイトエンジン株式会社では、BIツール(Power BI、Looker Studio)のデータ取得や整形、設定のサポートを行っております。
「1行のDAXなら書けそうだけど、複雑な式は書ける気がしない……」と感じてしまった方、ぜひこちらのサポート導入をご検討ください。 Power BIで使用できる無料テンプレートもご用意しております。
データ分析・可視化支援サービス ― Looker Studio / Power BIによるレポート作成支援
まずはお気軽にお問い合わせください。