Microsoft Power BIにはDAXという機能があります。今回はそもそもPower BIとは何か、DAXとはどのような機能なのか、などについて解説していきます。基礎的な部分を押さえたい担当者の方は、ぜひ参考にしてください。
Microsoft Power BIとは
Microsoft Power BIとは、Microsoftが提供するBIツールの製品やサービスの総称です。このPower BIは、セルフサービスBIと呼ばれる、一種のBIツールです。
まずBIツールとは、企業内にある膨大な量のデータの中から必要な情報を抽出して、適切に分析し、レポートを行うためのツールのことです。経営に関することや売上拡大などに活用されます。
BIツールを使うことで、すべての従業員がデータを素早く抽出・分析できるようになります。Microsoft Power BIは、日本ではそれほど浸透していませんが、海外では現在、急速に普及しています。
Microsoft Power BIには、以下のような特徴があります。
- セルフサービスBIである
- あらゆるデータに接続可能
セルフサービスBIとは、プログラミングを必要とせずに、データを抽出・分析し、さらにその分析レポートの作成まで行えるツールのことです。プログラミングの知識がなくても、ある程度パソコンを操作する技量があれば、このようなデータ分析を短時間で行うことができるようになります。
また変換や統合といった各種データの処理作業はもちろん、レポートを視覚的にわかりやすく作成したり、そうしたレポートをチームや組織で共有したり、定期的に自動更新が行われるようにしたり、多様な活用が実現されます。
Microsoft Power BIの特徴としては、あらゆるデータに接続できることが挙げられます。クラウド上にあるデータや物理的なサーバーにあるデータにも接続でき、そこからデータを取得して、分析することが可能です。
また、Excelで作成したデータを読み込んで詳細な分析を行うこともできます。過去にExcelで作成したシートを流用することもできるので、過去のデータもうまく再活用していけるでしょう。。
DAXとは?
DAXとはData Analysis Expressionsの略です。データ分析を行ううえで必要なデータ項目を、簡単に計算することができる、関数や演算子のライブラリのことをいいます。Excelに似ている記述方法なので、比較的馴染みやすい書式であると言えるでしょう。
Power BI DesktopでDAXを使うことで、テーブルの作成や新しい列の作成、メジャーと呼ばれる計算結果の作成などが可能です。またPower BI Desktopだけでなく、ExcelのPower PivotやSQL Server Analytics Servicesでも使えます。
DAXの使用例
では、DAXの使用例にはどういったものがあるのでしょうか。ここでは、DAXの具体的な使用例を紹介します。
数学関数
数学関数の一例としては、以下のようなものがあります。
- SUM(<column>)
column列の合計値を算出します。戻り値は単一値です。
例) [メジャー] SUM('売上データ'[売上額]) => 10,000
例) [メジャー] SUM('売上データ'[数量]) => 10 - SUMX(<table>, <expression>)
第1引数で指定したテーブルのすべての行に対して、第2引数の内容で評価し、その結果の合計値を算出します。戻り値は単一値です。
例) [メジャー] SUMX('売上データ', '売上データ'[売上額] * 0.1) => 1,000
各売上の消費税(10%)額の合計を算出
Excelで関数の使用経験がある方は、イメージしやすいかと思います。Power BIはMicrosoftのツールなので、関数の使い方に関しては共通する部分があります。
フィルター関数
フィルター関数の一例としては、以下のようなものがあります。
- FILTER(<table>, <filter>)
第1引数に指定したテーブル、第2引数の条件でフィルターした結果を取得できます。その結果はテーブル型です。
例) [テーブル] FILTER('売上データ', '売上データ'[売上額] > 20000)
=> 売上額が20,000より大きいデータだけのテーブルを取得します。 - CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
第1引数に評価式を入力します。第2引数以降にはAND条件で対象となるテーブルなどのフィルター式を書きます。
例) [メジャー] CALCULATE(SUM('売上データ'),
'売上データ'[売上日] = DATE(2021, 7, 29), '売上データ'[数量] >= 5) => 10,000
売上日が2021/07/29 かつ数量が5個以上のデータの合計を算出
こちらの使い方もExcelのフィルター関数に似ています。Excelのフィルター関数の使用経験があればスムーズに使えるでしょう。また関数の使用経験がなくても、それほど難しいものではありません。
論理関数
論理関数の一例としては、以下のようなものがあります。
- IF(<logical_test>, <value_if_true>[, <value_if_false>])
第1引数にTRUE/FALSEで判定できる値や式を書きます。第2引数には第1引数がTRUEの場合の値を、第3引数には第1引数がFALSEの場合の値を書きます。
例) [メジャー] IF(SUM('売上データ'[売上額]) > 30000, "High", "Low")
=> 売上額の合計が 30,000より大きい場合には "High"、それ以外での場合には "Low" を返します。 - SWITCH(<expression>, <value>, <result>[, <value>, <result>]...[, <else>])
第1引数には数値などの値を書きます。第2引数以降は、第1引数に対する定数値、ならびにそのときの処理を繰り返し書きます。
最後の引数はいずれにもあてはまらない場合の定数値を書きます。
例) [計算列] SWITCH('商品マスタ'[商品名], "商品A", "会社1", "商品B", "会社2", "会社3")
=> 商品名が "商品A" であれば "会社1"を、"商品B" であれば "会社2"、それ以外の場合にはすべて "会社3" を返します。
DAXの特徴的な関数「タイムインテリジェンス関数」とは?
DAXにはタイムインテリジェンス関数というものが用意されています。タイムインテリジェンス関数を使用すると、「日・月・四半期・年」などの期間を使用してデータを操作した後に、その期間に対して計算を作成し、比較することができます。
厳密に言うと、「ビジュアルで適用されている日付列のフィルターを中心に、そのビジュアルの日付列のフィルターを変えない状態」を維持して、「前月・前年などのような、ほかの期間のデータを参照することができる」ということです。
CALCULATE関数のフィルター関数を使うことで同じ仕組みを作成可能ではありますが、タイムインテリジェンス関数のほうがより簡単に記述できるので、メンテナンスの負担を減らすことにつながります。
タイムインテリジェンス関数の作成例
このようにほかの期間のデータを参照できるようになる便利なタイムインテリジェンス関数ですが、ここからは、具体的なタイムインテリジェンス関数の作成例を紹介します。
1. 日付テーブルの作成
まずは、CALENDARAUTO関数を使い、日付テーブルを作成します。CALENDARAUTO関数はデータセット中の日付型のデータから、最小日付と最大日付を自動で取得して、最小日付から最大日付まで連続した日付が入った単一列のテーブルを返す働きがあります。
前年のデータを取得するためのタイムインテリジェンス関数を使うためには、1月1日から12月31日までのすべての日付情報が必要になるので、書き方は下記のようにします。
日付テーブル =
VAR minDate = YEAR(MIN('売上実績'[売上日]))
VAR maxDate = YEAR(MAX('売上実績'[売上日]))
RETURN
FILTER(
CALENDARAUTO(),
YEAR([Date]) >= minDate && YEAR([Date]) <= maxDate
)
2. リレーションの設定
日付テーブルのdate列と"売上実績"テーブルの売上日列でリレーションを設定するには、リレーションを設定する2つの列が同じデータ型となっていることが基本となります。
CALENDARAUTO関数で作成した日付テーブルのdate列は、[日付+時刻]型ではありません。また、"売上実績"テーブルの売上日は[日付]型ではありません。このような型の不一致な状態だと、リレーションの設定ができません。
そのため、日付テーブルのdate列を[日付]型に修正してそろえます。方法はシンプルで、[モデル]ビューを開き、"売上実績"テーブルの[売上日]列を、日付テーブルの[Date]列にドラッグ&ドロップすることで、リレーションを設定します。
3. メジャーの作成
前年の同月データを取得するのに適しているタイムインテリジェンス関数が、SAMEPERIODLASTYEAR()です。これは、「昨年の同じ期間」の日付列テーブルを返す関数になります。"同じ期間"のフィルターは、グラフやスライサーなどで指定した範囲を基準にします。
CALCULATE()関数は、第1引数に評価式を書き、第2引数以降にフィルター条件を書きます。第2引数にSAMEPERIODLASTYEAR()関数を使うことで、「昨年の同じ期間」の売上額の合計を求めることができるのです。
前年売上 = CALCULATE(SUM('売上実績'[売上額]),SAMEPERIODLASTYEAR('日付テーブル'[Date]))
4. ビジュアルで使ってみる
データテーブルのビジュアルを使い、動作確認することができます。データテーブルの値に日付テーブルの「年」「月」、"売上実績"テーブルの「売上額」、「前年売上」メジャーの順番で設定することで、[売上額]列には[年][月]に対応した売上額の合計が出力され、[前年売上]列には1年前の同月の売上額の合計が出力されます。
集合型の棒グラフビジュアルを使うことで、前年同月と比較して増加したか減少したかが、非常にわかりやすくなります。
SAMEPERIODLASTYEAR()関数は「昨年の同じ期間」を取得できるので、列を「年」だけにすることで、昨年のデータを取得する動きになります。また「年」「月」「日」とすることで、昨年の同日のデータを取得する動きとなり、1つのメジャーを再利用できます。
まとめ
Power BIはMicrosoftが提供するデータ分析ツールで、DAXはデータ分析のための機能です。「プログラミングの知識がないと、データ分析など不可能」と思われる方もいるかもしれませんが、これらの機能はプログラミング知識なしでも扱うことができます。
関数の使用感もExcelとそれほど変わらず、コードとして重複している部分も多いです。そのためExcelの関数の使用経験があれば、問題なく使用可能で、たとえ経験がなくてもすぐに慣れていくでしょう。