DAX(Data Analysis Expressions)関数とは?
DAXとは?
DAXとは、Data Analysis Expressionsの略で、Microsoftのブログ記事「[Power BI] DAX入門(1) まずはここを見よう リンク集」では、以下のような説明が記載されています。
Data Analysis Expressions (DAX) 言語は、Microsoft SQL Server Analysis Services (SSAS) や Excel の Power Pivot、Power BI Desktop で数式や式を作成するための部品として使用できる関数や演算子のライブラリです。
これだけでは、ちょっとわかりづらいですね。
簡単に説明すると、Microsoftの複数の製品で共通的に使用できる、データを特定の約束のもとに計算させることができる関数や演算子などのこと。
といったところでしょうか。
DAXは、Power BIだけでなく、SQL Server Analysis Service(SQL Serverの標準機能として提供される分析専用のサービス)やExcel上でも利用可能です。
それらの製品やサービス上で、約束に従って正しく記述すれば、データ分析を行う上で、必要なデータ項目を簡単に計算させることができるのが、DAXです。
具体的には、事前にデータソース側で計算させたり、データを取り込む際に、クエリを使って計算させる必要があるような項目(前年同月売上金額や前年同月比など)を、1行の数式を書き、メジャーとして定義するだけで簡単に使用できるようなったりします。
DAXを使うための前提知識「計算列」と「メジャー」
PowerBIは、取り込んだデータを様々な形で集計したり、計算させたりすることが可能ですが、計算させたデータの保持の仕方が2つ存在します。
それが、「計算列」と「メジャー」です。
ここでは詳しく解説しませんが、データモデル内に計算結果を行単位に保持するのが「計算列」、計算結果をデータとして保持せず、テーブル単位で値をレポートの表示段階で都度計算するのが「メジャー」というイメージをもっておいてください。
なお、「計算列」と「メジャー」の違いは、こちらのブログで解説しています。
「計算列」と「メジャー」違いは、概念的なイメージだけで理解するのがやや難しいので、とにかく実際に使ってみるのがおすすめです。
DAX関数は、「計算列」と「メジャー」のいずれかで利用します。
Excel関数とDAX関数の違い
Excel関数はセルやセル範囲を元に一つのセルを出力する関数ですが、DAX関数は、テーブルを出力したり、計算列、メジャーを出力する関数という大きな違いがあります。
表:Excel関数とDAX関数の違い
言葉だけではわかりづらいと思いますので、Excel関数とDAX関数のInputとOutputイメージをまとめてみました。
図:Excel関数とDAX関数のInputとOutputイメージ
このようなインプットとアウトプットの違いを把握していないと、イメージ通りの結果が得られず壁にぶち当たってしまうという結果に陥りますので、ご注意ください。
実際のDAX関数の例
概念だけではなかなかイメージが湧かないので、よく使われる関数を具体例としてご紹介していきます。
具体例1:RELATED関数
RELATED関数は、別のテーブルから特定のキーとなる値を元に関連する値を取得する関数です、主に「計算列」で使用されます。
Excelでいうところのvlookup関数と同じ位置づけの関数ですね。
例えば、会社の取引先一覧が保存されている「得意先」テーブルがあるとします。
このテーブルには当然取引先の住所の一部である都道府県なども保存されることが多いと思いますが、売上を都道府県だけではなく、各都道府県を一定のルールでまとめた「地域」で見たいということも分析要件としてよくでてきます。
そのため、「都道府県」テーブル(マスタ)を用意して、都道府県ごとに、関東や関西、中部といった地域という列を加えて、集計するための分析軸とする必要が出てくるのです。
単に地域で売上を集計したいだけであれば、テーブル同士のリレーションがあれば、あえて列を追加せずとも、レポート上で組み合わせて集計することができます。
しかし、階層構造を利用して、「地域」→「都道府県」→「市区町村」といったドリルダウンを行う場合に、PowerBIでは、問題が発生します。
PowerBIにおいては、階層構造は、同一テーブル内データのみが使用できるという制約があるため、そのままでは「地域」が利用できないため、「計算列」にDAX関数RELATEDを使って、データを追加する必要が出てくるのです。
(クエリでも対応できますが、「計算列」であれば、一つの関数を記入するだけで実装可能です)
上記の例では、「得意先」テーブル内に「地域」列を追加する場合には、「新しい列」メニューから、以下のようなDAX関数を記述します。
地域 = RELATED('都道府県'[地域])
※「得意先」テーブルと「都道府県」テーブルにリレーションが張られていることが前提条件
Excelのvlookup関数と異なる点は、リレーションがあることが前提なので、検索するキーの指定がないこと、テーブル同士の関係性なので、範囲指定がないという2点となりますが、意味合いとしてはほぼ同じです。
具体的に設定された場合には、以下のようにデータが追加されます。(階層の定義は別途必要です)
具体例2:CALCULATE関数とPREVIOUSYEAR 関数
CALCULATE関数は、フィルター条件に沿って、指定された計算を実施するための関数です。
よく使われるのは、他の記事でも紹介していますが、今年の売上と前年同月の売上を比較したい場合などですね。
具体的には、
前年度金額 = CALCULATE(SUM('受注明細'[売上金額]),PREVIOUSYEAR('受注'[受注日].[Date]))
という記述がされ、この式の意味は、
前年度金額として、受注明細テーブルの売上金額を集計する
その際の条件は、受注日が1年前の日付であること
ということになります。
ここでは条件は1つのみ指定していますが、CALCULATE関数では、条件を複数指定することが可能です。
条件として利用されているPREVIOUSYEAR 関数は、一年前の日付の値を返す関数なので、例えば受注日が「2017/10/27」であれば、「2016/10/27」という値を返します。
この二つの関数を組み合わせて、前年同日の売上を簡単に計算させることができるのです。
さらにこの計算結果を使えば、前年同日比なども当然ながら計算させることも可能です。
また、PREVIOUSYEAR 関数には、似たような関数として、前日の日付を返すPREVIOUSDAY 関数、前月の日付を返すPREVIOUSMONTH 関数、前四半期の日付を返すPREVIOUSQUARTER 関数などがありますので、必要に応じて使用してみてください。
DAX関数を調べる方法
今回は関数の一部をご紹介しましたが、DAX関数にはまだまだ便利な関数が存在します。
DAX関数の種類や詳しい内容を知りたい場合には、Micrsoft社の以下のページをご参照ください。
DAX 関数の種類
https://msdn.microsoft.com/ja-jp/library/gg399180(v=sql.110).aspx
DAX関数リファレンス
https://msdn.microsoft.com/ja-jp/library/ee634396.aspx
上記のページは、情報としてはしっかりまとまっているのですが、表現が難しいので、具体的にどんな値が返ってくるのか少しイメージが湧きづらいのが難点です。
このブログでも、今後一つ一つの関数を掘り下げた記事などもアップしていきたいと思います。
より詳しく学びたい方は
いかがでしたでしょうか?
ざっくりとMicrosoft Power BIで使用されるDAX関数がどのようなものかのイメージはもっていただけたのではないかと思います。
もっと詳しく、体系的にPower BIを学びたいという方は、ぜひ
「Microsoft Power BI 実践ハンズオン 応用編【DAX関数基礎】」
の受講を検討してみてください。
DAX関数基礎セミナーでは、本記事のように、Power BI初心者、DAX初心者に、一つ一つ丁寧に、躓きやすいポイントをわかりやすく説明していきます。
体系だったルールを身に着けるだけで、その後の習熟度が違ってきますので、これからPowerBIを使いたい方、導入済みでさらなるレベルアップをしたい方は、ご検討くださいね。
これ以外にもExcelのPivotとPower Pivotの違い、DAX関数の入力方法、エラーハンドリングなども学べます。