「Power BIを使い始めたけど、DAX関数って何から覚えればいいの?」
Excelの関数と似ているようで微妙に違う書き方に、最初は戸惑いますよね。しかもDAX関数は200以上あるので、公式ドキュメントを見ても情報量が多すぎて迷子になりがちです。
この記事では、DAX関数を機能別に整理した一覧表と、最初に覚えるべき5つの関数をまとめました。「やりたいこと」から逆引きできるので、ぜひブックマークして使ってみてください。
なお、Excelの関数を探している方はExcel関数一覧(機能別)をどうぞ。
DAX関数とは?Excel関数と何が違うの?
DAX(Data Analysis Expressions)は、Power BIやExcelのパワーピボットで使う数式言語です。見た目はExcel関数に似ていますが、中身はかなり別モノです。
DAXが必要になる場面
DAXが活躍するのは、こんな場面です。
- Power BIのレポートで売上集計や前年比を出したい
- Excelのパワーピボットでピボットテーブルに独自の計算を追加したい
- 複数のテーブルをまたいで分析したい
ふだんのExcel作業では使わない関数ですが、Power BIに触れるなら避けて通れません。ExcelのGETPIVOTDATA関数のように、ピボット系の集計を扱う方はとくに知っておきたいところです。
Excel関数との違い3つ
ExcelとDAXの大きな違いを3つにまとめました。
| 比較ポイント | Excel関数 | DAX関数 |
|---|---|---|
| 参照方法 | セル範囲(A1:A10) | テーブル[列名] |
| 計算の仕組み | 固定のセル参照 | フィルターコンテキストで動的に変化 |
| COUNTIF相当 | COUNTIF関数がある | COUNTROWS + FILTERの組み合わせ |
とくに重要なのがフィルターコンテキストという考え方です。Power BIのスライサーや行ラベルの選択状態に応じて、計算対象が自動的に変わります。
たとえば「売上合計」というメジャーを作れば、スライサーで「東京」を選ぶだけで東京の売上だけが集計されます。Excelのように条件式を書き直す必要がないんです。
もうひとつ覚えておきたいのが行コンテキストです。これはSUMXなどの「X系関数」や計算列で、テーブルの1行ずつを処理する仕組みのことです。
まず覚えるべきDAX関数5選
200以上ある関数のなかでも、まずこの5つを覚えれば基本的な分析はカバーできます。
CALCULATE – 条件付き集計の要
DAXの中核ともいえる関数です。フィルターコンテキストを上書きして、条件付きの集計ができます。
東京売上 = CALCULATE(
SUM(売上[金額]),
売上[地域] = "東京"
)
スライサーの状態に関係なく「東京」だけの売上を返します。CALCULATEはDAXで最も使う関数なので、真っ先に慣れておきましょう。
SUMX – 行単位の計算
テーブルの各行で計算してから合計する関数です。「単価 x 数量」のような行ごとの計算に使います。
売上合計 = SUMX(
売上テーブル,
売上テーブル[単価] * 売上テーブル[数量]
)
ExcelのSUMPRODUCTに近い感覚で使えますよ。
FILTER – 絞り込みテーブル
テーブルから条件に合う行だけを取り出します。CALCULATEと組み合わせることが多いです。
高額売上 = CALCULATE(
SUM(売上[金額]),
FILTER(売上, 売上[金額] > 100000)
)
ALL – フィルターを外してパーセント計算
テーブルや列に適用されたフィルターをすべて解除します。構成比(パーセント)を出すときに欠かせません。
売上構成比 = DIVIDE(
SUM(売上[金額]),
CALCULATE(SUM(売上[金額]), ALL(売上))
)
分母を「フィルターなしの全体合計」にすることで、各カテゴリの構成比が求められます。
RELATED – テーブルをまたいで値を取る
リレーションシップで関連づけたテーブルから値を引っ張ります。ExcelのVLOOKUPに近い役割です。
カテゴリ名 = RELATED(商品マスタ[カテゴリ])
リレーションシップが設定済みなら、RELATED一発で取れます。設定がない場合はLOOKUPVALUEを使ってみてください。
【機能別】DAX関数一覧
ここからは、DAX関数を機能別に一覧で紹介します。やりたいことからカテゴリを選んで探してみてください。
集計関数
SUM・AVERAGE・COUNTなど、データの合計・平均・件数を求める関数です。Excel関数と名前が似ているものが多いので、取りかかりやすいカテゴリですよ。
| 関数 | 説明 |
|---|---|
| APPROXIMATEDISTINCTCOUNT | 列内に個別の値を含む行の概数を返します。 |
| AVERAGE | 列のすべての数値の平均(算術平均)を返します。 |
| AVERAGEA | 列の値の平均(算術平均)を返します。 |
| AVERAGEX | テーブルに対して評価される式の平均を計算します。 |
| COUNT | 列内にある、数値を含むセルの数をカウントします。 |
| COUNTA | 列内の空ではないセルの数をカウントします。 |
| COUNTAX | 式の結果をテーブルに対して評価するとき、空白以外の結果をカウントします。 |
| COUNTBLANK | 1列内の空のセル数をカウントします。 |
| 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 | テーブルのサブセットを表すテーブルを返します。 |
| KEEPFILTERS | CALCULATE関数の評価中にフィルターを適用する方法を変更します。 |
| LOOKUPVALUE | 検索条件をすべて満たす行の値を返します。 |
| REMOVEFILTERS | 指定されたテーブルまたは列からフィルターをクリアします。 |
| SELECTEDVALUE | コンテキストが1つの個別の値のみにフィルター処理されている場合、その値を返します。 |
タイムインテリジェンス関数
前年比・年度累計・前月比など、日付をベースにした期間計算ができる関数です。Power BIのレポートでとくに重宝するカテゴリですよ。
NOTE
タイムインテリジェンス関数を使うには、データモデルに「日付テーブル(カレンダーテーブル)」が必要です。
| 関数 | 説明 |
|---|---|
| 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 | 前年のすべての日付の列を返します。 |
| SAMEPERIODLASTYEAR | 1年前にシフトした日付列を返します。 |
| STARTOFMONTH | 月の最初の日付を返します。 |
| STARTOFQUARTER | 四半期の最初の日付を返します。 |
| STARTOFYEAR | 年の最初の日付を返します。 |
| TOTALMTD | 月度累計の式の値を評価します。 |
| TOTALQTD | 四半期累計の式の値を評価します。 |
| TOTALYTD | 年度累計の式の値を評価します。 |
日付・時刻関数
日付や時刻の値を作成・変換・分解するための関数です。カレンダーテーブルの作成やデータの日付加工に使います。
| 関数 | 説明 |
|---|---|
| CALENDAR | 連続する日付のセットを含むテーブルを返します。 |
| CALENDARAUTO | データモデルの日付に基づいて日付テーブルを自動生成します。 |
| DATE | 指定された日付をdatetime形式で返します。 |
| DATEDIFF | 2つの日付の間にある間隔の境界数を返します。 |
| 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 | 現在の日付を返します。 |
| UTCNOW | UTCの現在日付と時刻を返します。 |
| UTCTODAY | 現在のUTCの日付を返します。 |
| WEEKDAY | 日付の曜日を1から7の整数で返します。 |
| WEEKNUM | 指定された日付の週番号を返します。 |
| YEAR | 日付の年を4桁の整数で返します。 |
| YEARFRAC | 2つの日付間の年の端数を計算します。 |
文字列関数
テキストの結合・切り出し・変換を行う関数です。書式変換のFORMATはレポート表示でよく使います。
| 関数 | 説明 |
|---|---|
| COMBINEVALUES | 2つ以上のテキスト文字列を結合します。 |
| CONCATENATE | 2つの文字列を結合して1つにまとめます。 |
| CONCATENATEX | テーブルの行ごとに評価される式の結果を連結します。 |
| EXACT | 2つのテキスト文字列を比較し、一致するかどうかを返します。 |
| FIND | 文字列が他の文字列内で最初に現れる位置を返します。 |
| FIXED | 数値を指定された桁数に丸め、テキストとして返します。 |
| FORMAT | 指定した書式に従って値をテキストに変換します。 |
| LEFT | テキスト文字列の先頭から指定された数の文字を返します。 |
| LEN | テキスト文字列の長さ(文字数)を返します。 |
| LOWER | 英字をすべて小文字に変換します。 |
| MID | テキスト文字列の指定位置から指定長の文字列を返します。 |
| REPLACE | テキスト文字列の一部を別のテキストに置き換えます。 |
| REPT | テキストを指定された回数繰り返します。 |
| RIGHT | テキスト文字列の末尾から指定された数の文字を返します。 |
| SEARCH | 特定の文字が最初に見つかった位置を返します。 |
| SUBSTITUTE | テキスト文字列内の既存テキストを新しいテキストに置き換えます。 |
| TRIM | 余分なスペースを削除します。 |
| UNICHAR | 数値で参照されるUnicode文字を返します。 |
| UNICODE | 最初の文字のUnicode数値コードを返します。 |
| UPPER | テキスト文字列をすべて大文字に変換します。 |
| VALUE | 数値を表すテキスト文字列を数値に変換します。 |
論理関数
IF・AND・ORなどの条件分岐やブール演算を行う関数です。Excel関数とほぼ同じ感覚で使えるものが多いですよ。
| 関数 | 説明 |
|---|---|
| AND | 両方の引数がTRUEかどうかをチェックします。 |
| BITAND | 2つの数値のビットごとのANDを返します。 |
| BITLSHIFT | 指定したビット数だけ左にシフトした数値を返します。 |
| BITOR | 2つの数値のビットごとのORを返します。 |
| BITRSHIFT | 指定したビット数だけ右にシフトした数値を返します。 |
| BITXOR | 2つの数値のビットごとのXORを返します。 |
| COALESCE | 空白として評価されない最初の式を返します。 |
| FALSE | 論理値FALSEを返します。 |
| IF | 条件をチェックしTRUEなら1つ目の値、FALSEなら2つ目の値を返します。 |
| IF.EAGER | IFと同じですが、常に両方の分岐を評価するeager実行プランを使用します。 |
| IFERROR | 式がエラーの場合、指定した値を返します。 |
| NOT | FALSEを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 | 最も近い偶数に切り上げます。 |
| EXP | eの指定された数値乗を返します。 |
| FACT | 数値の階乗を返します。 |
| FLOOR | 最も近い基準値の倍数に切り捨てます。 |
| GCD | 2つ以上の整数の最大公約数を返します。 |
| INT | 最も近い整数に切り捨てます。 |
| ISO.CEILING | 最も近い整数または指定倍数に切り上げます。 |
| LCM | 整数の最小公倍数を返します。 |
| LN | 数値の自然対数を返します。 |
| LOG | 指定された底の対数を返します。 |
| LOG10 | 数値の常用対数を返します。 |
| MROUND | 指定倍数に丸めた数値を返します。 |
| ODD | 最も近い奇数に切り上げます。 |
| PI | 円周率の値を15桁の精度で返します。 |
| POWER | 数値を累乗した結果を返します。 |
| QUOTIENT | 除算結果の整数部分のみを返します。 |
| RADIANS | 角度をラジアンに変換します。 |
| RAND | 0以上1未満の乱数を返します。 |
| RANDBETWEEN | 指定範囲内の乱数を返します。 |
| ROUND | 数値を指定桁数に丸めます。 |
| ROUNDDOWN | 数値をゼロ方向に切り捨てます。 |
| ROUNDUP | 数値を切り上げます。 |
| SIGN | 数値の正負を調べます。 |
| SIN | 指定された角度のサインを返します。 |
| SINH | 数値の双曲線サインを返します。 |
| SQRT | 数値の平方根を返します。 |
| SQRTPI | (数値 x pi) の平方根を返します。 |
| TAN | 指定された角度のタンジェントを返します。 |
| TANH | 数値の双曲タンジェントを返します。 |
| TRUNC | 数値の小数部を切り捨てて整数に変換します。 |
統計関数
分布・順位・標準偏差など、統計処理に使う関数です。RANKXは売上ランキングなどの業務レポートでよく登場します。
| 関数 | 説明 |
|---|---|
| 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 | テーブルの行ごとに評価される式の幾何平均を返します。 |
| 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.EQ | 数値のリストにおけるランク付けを返します。 |
| RANKX | テーブルの行別に数値のランキングを返します。 |
| 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はレポート作成の定番です。
| 関数 | 説明 |
|---|---|
| ADDCOLUMNS | テーブルに計算列を追加します。 |
| ADDMISSINGITEMS | 複数の列から項目の組み合わせをテーブルに追加します。 |
| CROSSJOIN | すべてのテーブルのデカルト積を返します。 |
| CURRENTGROUP | GROUPBY式の行のセットを返します。 |
| DATATABLE | データ値のインラインセットを宣言します。 |
| DETAILROWS | メジャーの詳細行の式を評価してデータを返します。 |
| DISTINCT(列) | 指定された列の個別の値を含むテーブルを返します。 |
| DISTINCT(テーブル) | 重複する行を削除したテーブルを返します。 |
| EXCEPT | あるテーブルにあって別のテーブルにない行を返します。 |
| FILTERS | 列にフィルターとして適用されている値のテーブルを返します。 |
| GENERATE | 2つのテーブルのデカルト積を返します。 |
| GENERATEALL | 2つのテーブルのデカルト積を返します(空の結果を含む)。 |
| GENERATESERIES | 等差級数の値を含む単一列テーブルを返します。 |
| GROUPBY | グループ化されたサマリーテーブルを返します。 |
| IGNORE | SUMMARIZECOLUMNSの空白評価から特定の式を除外します。 |
| INTERSECT | 2つのテーブルの行の積集合を返します。 |
| NATURALINNERJOIN | 2つのテーブルの内部結合を実行します。 |
| NATURALLEFTOUTERJOIN | 2つのテーブルの左外部結合を実行します。 |
| ROLLUP | SUMMARIZE結果にロールアップ行を追加します。 |
| ROLLUPADDISSUBTOTAL | SUMMARIZECOLUMNS結果にロールアップ行を追加します。 |
| ROLLUPISSUBTOTAL | ロールアップグループとROLLUPADDISSUBTOTAL列をペアリングします。 |
| ROLLUPGROUP | SUMMARIZEおよびSUMMARIZECOLUMNS結果にロールアップ行を追加します。 |
| ROW | 1行のテーブルを返します。 |
| SELECTCOLUMNS | テーブルに計算列を追加します。 |
| SUBSTITUTEWITHINDEX | 2つのテーブルの左側の準順結合を返します。 |
| SUMMARIZE | グループごとのサマリーテーブルを返します。 |
| SUMMARIZECOLUMNS | グループに対するサマリーテーブルを返します。 |
| テーブルコンストラクター | 1つ以上の列からなるテーブルを返します。 |
| TOPN | テーブルの上位N行を返します。 |
| TREATAS | テーブル式の結果をフィルターとして適用します。 |
| UNION | 2つのテーブルの和集合を返します。 |
| VALUES | テーブルまたは列の個別の値を含むテーブルを返します。 |
リレーションシップ関数
テーブル間のリレーションシップを活用して、関連する値を取得したりクロスフィルターを制御したりする関数です。
| 関数 | 説明 |
|---|---|
| CROSSFILTER | リレーションシップのクロスフィルター処理の方向を指定します。 |
| RELATED | 別のテーブルから関連する値を返します。 |
| RELATEDTABLE | 指定されたフィルターでテーブル式を評価します。 |
| USERELATIONSHIP | 特定の計算で使用するリレーションシップを指定します。 |
情報関数
値の型チェックやフィルター状態の確認など、データの「状態を調べる」関数です。条件分岐と組み合わせて使うことが多いですよ。
| 関数 | 説明 |
|---|---|
| CONTAINS | すべての参照列に値が存在するかどうかを返します。 |
| CONTAINSROW | 値の行がテーブルに含まれているかを返します。 |
| CONTAINSSTRING | 文字列に別の文字列が含まれているかを返します。 |
| CONTAINSSTRINGEXACT | 大文字小文字を区別して文字列の包含を確認します。 |
| CUSTOMDATA | 接続文字列のCustomDataプロパティの内容を返します。 |
| HASONEFILTER | フィルター処理された値の数が1であるかを返します。 |
| HASONEVALUE | コンテキストが1つの個別の値のみにフィルター処理されているかを返します。 |
| ISAFTER | Start At句の動作をエミュレートします。 |
| ISBLANK | 値が空白であるかどうかを返します。 |
| ISCROSSFILTERED | 列がクロスフィルターされているかを返します。 |
| ISEMPTY | テーブルが空かどうかを調べます。 |
| ISERROR | 値がエラーであるかどうかを返します。 |
| ISEVEN | 数値が偶数であるかを返します。 |
| ISFILTERED | 列が直接フィルターされているかを返します。 |
| ISINSCOPE | 指定した列が階層のそのレベルであるかを返します。 |
| ISLOGICAL | 値が論理値であるかを返します。 |
| ISNONTEXT | 値が文字列以外であるかを返します。 |
| ISNUMBER | 値が数値であるかを返します。 |
| ISODD | 数値が奇数であるかを返します。 |
| ISONORAFTER | Start At句の動作をエミュレートします。 |
| ISSELECTEDMEASURE | コンテキスト内のメジャーがリスト内にあるかを判定します。 |
| ISSUBTOTAL | 行に小計値が含まれるかを返します。 |
| ISTEXT | 値が文字列であるかを返します。 |
| NONVISUAL | SUMMARIZECOLUMNS式の値フィルターを非ビジュアルとしてマークします。 |
| SELECTEDMEASURE | コンテキスト内のメジャーを参照します。 |
| SELECTEDMEASUREFORMATSTRING | メジャーの書式文字列を取得します。 |
| SELECTEDMEASURENAME | 名前でコンテキスト内のメジャーを調べます。 |
| USERNAME | ドメイン名とユーザー名を返します。 |
| USEROBJECTID | 現在のユーザーのオブジェクトIDを返します。 |
| USERPRINCIPALNAME | ユーザープリンシパル名を返します。 |
親子関数
組織図やBOM(部品表)のような親子階層データを扱う関数です。階層パスの取得や特定の位置の要素抽出ができます。
| 関数 | 説明 |
|---|---|
| PATH | 現在の識別子のすべての親の識別子を含むテキスト文字列を返します。 |
| PATHCONTAINS | 指定されたpath内にitemが存在するかを返します。 |
| PATHITEM | PATH関数の結果から指定した位置の項目を返します。 |
| PATHITEMREVERSE | PATH関数の結果から末尾基準で指定した位置の項目を返します。 |
| PATHLENGTH | PATHの結果内の自身を含めた親の数を返します。 |
財務関数
利率・減価償却・キャッシュフロー計算など、財務分析に使う関数です。Excelの財務関数とほぼ同じ名前・引数で使えます。
| 関数 | 説明 |
|---|---|
| ACCRINT | 定期的に利息が支払われる証券の利回りを返します。 |
| ACCRINTM | 満期に利息が支払われる証券の未払い利息を返します。 |
| AMORDEGRC | 各会計期間の減価償却費を返します(減価償却係数適用)。 |
| AMORLINC | 各会計期間の減価償却費を返します。 |
| COUPDAYBS | 利払期間の第1日目から受渡日までの日数を返します。 |
| COUPDAYS | 受渡日を含む利払期間の日数を返します。 |
| COUPDAYSNC | 受渡日から次の利払日までの日数を返します。 |
| COUPNCD | 受渡日後の次の利払日を返します。 |
| COUPNUM | 受渡日と満期日の間の利息支払回数を返します。 |
| COUPPCD | 受渡日直前の利払日を返します。 |
| CUMIPMT | 指定期間に貸付金に対して支払われる利息の累計を返します。 |
| CUMPRINC | 指定期間に貸付金に対して支払われる元金の累計を返します。 |
| DB | 定率法で資産の減価償却費を返します。 |
| DDB | 倍額定率法で資産の減価償却費を返します。 |
| DISC | 証券に対する割引率を返します。 |
| DOLLARDE | 分数表記のドル価格を10進数に変換します。 |
| DOLLARFR | 10進数のドル価格を分数表記に変換します。 |
| 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 | エラーを発生させ、エラーメッセージを生成します。 |
業務シーン別:どのDAX関数を使えばいい?
一覧を見ても「結局どれを使えばいいの?」と迷うこともありますよね。ここではよくある業務シーンごとに、使う関数の組み合わせを紹介します。
月別・年別の売上合計を出したい
基本はSUMだけでOKです。Power BIの日付テーブルと組み合わせれば、月別・年別の集計はスライサーが自動で処理してくれます。
年度累計(YTD)を出したいときはTOTALYTDが便利です。
年度累計売上 = TOTALYTD(
SUM(売上[金額]),
カレンダー[Date]
)
前年同期比を計算したい
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(売上, 売上[地域] = "東京")
)
よくある質問(FAQ)
Q. DAX関数はExcel関数と同じものですか?
名前が似ている関数は多いですが、別物です。DAXはテーブルと列を参照する仕組みで、セル参照のExcel関数とは考え方が異なります。
Q. DAXはどこで使えますか?
主にPower BI Desktop、Excelのパワーピボット、SQL Server Analysis Servicesで使えます。ふつうのExcelのセルに入力しても動きません。
Q. CALCULATEが難しくて使いこなせません
ちょっとむずかしく見えますが、やっていることはシンプルです。「この条件のときだけ計算してね」とフィルターを指定しているだけです。まずは CALCULATE(SUM(...), 条件) の形で試してみてください。
Q. ExcelのVLOOKUPに相当するDAX関数は?
リレーションシップが設定済みならRELATED、未設定ならLOOKUPVALUEを使います。Power BIではリレーションシップを使うのが基本なので、RELATEDのほうが出番は多いですよ。
まとめ
DAX関数は200以上ありますが、日常的に使うのはそのうちの一部です。まずはこの5つから始めてみてください。
- CALCULATE:条件付き集計の要
- SUMX:行ごとの計算と合計
- FILTER:データの絞り込み
- ALL:フィルター解除で構成比計算
- RELATED:テーブルをまたいだ値の取得
慣れてきたら、タイムインテリジェンス関数(SAMEPERIODLASTYEARやTOTALYTDなど)にも挑戦してみてください。前年比や累計といった、ビジネスレポートに欠かせない計算がぐっとラクになりますよ。
