DAXを難しくする原因についての一考察

正しいカレンダーテーブルの準備、不要な行・列の削除や非表示、二つのツールの使い分け……。
要するに「データモデル」に対する正しい理解がないと、すべてはうまくいかない……。

DAXという壁

「モダンExcel」を学習すると、必ずぶち当たる大きな「壁」があります。
その一つが、「DAX」。

ただ、DAXをある程度理解してからよくよく考えてみると、DAXを難しくしている理由があることに気づきます。

正しくない「データモデル」が、DAXの理解を困難に

最も大事かな、そう思うのが「データモデル」に対する理解です。
「データモデル」に対する理解が足りていないと、どうにも、こうにも、DAXはうまくいかないように思います。

正しい「データモデル」を無視して、何でもかんでもPower Queryだけで処理しようとする、こうしたことがその典型です。
例えば、予算と実績という二つの「ダブルファクトテーブル」(拙著「モダンExcel入門」P123など参照)を対象にデータ分析する場合、巷では無理やりPower Queryで計算しようとする事例が散見されます。
しかし、正しい「データモデル」にしてから、そもそもM(Power Queryのこと。モダンExcelでは「データの取得と変換」のこと)ではなく、DAX(モダンExcelの「Power Pivot for Excel」で使う関数のこと)で計算すべきなのです。
これは、Power BIであれば、当たり前の動作です。

Power BIの原型とも言える「モダンExcel」でも当然ながら同じ考えになるのですが、Power BIと違って、モダンExcelには「データの取得と変換(要するに、Power Query)」とは別に、もう一つ「Power Pivot for Excel」というツールがあって、こちらで「データモデル」にする必要があるわけです。

ここが、初学者にとって悩ましいポイントなのかもしれません。
「Power Query M」と「DAX」が「セット」になっている「Power BI」に対し、『モダンExcel』は「データの取得と変換(Power Query)」と「Power Pivot for Excel」の二つのツールに分かれてしまっているからです。
これが、正しい「モダンExcel」の理解を阻害する要因なのでしょうか?

いずれにしても、巷の俗称「パワークエリ」と「パワーピボット」は、「セット」で理解すべきものです。
そのうえで、データを集計・分析するには、原則「スタースキーマ」の形式で、「モダンExcel」であれば「Power Pivot for Excel」によって正しい「データモデル」に整える、こうしたことをしっかり理解する必要があります。

何でもかんでもPower Queryだけで処理しよう、これはそもそも間違いなのです。
データ分析の前提には、正しい「データモデル」に対する理解が必要、そう言い換えても良いと思います。

MVPのゆーごさんが、正しい「データモデル」についてQiitaにまとめてくれました。
Power BIユーザーに向けての内容になっていますが、その内容は『モダンExcel』にも共通です。
ご一読されることを強くお勧めします。

[Power BI Tips] スタースキーマへの道 ~ モデリングってたぶんこれが基本 ~ - QiitaPower BI はスタースキーマを目指してモデリングをする。これは Power BI を使用するすべての人が守らなきゃいけないこと。Power BI はモデルがスタースキーマになってることを前提に作られているから、それに乗っかっ...
[Power BI Tips] スタースキーマへの道 ~ モデリングってたぶんこれが基本 ~ - Qiita qiita.com
[Power BI Tips] スタースキーマへの道 ~ モデリングってたぶんこれが基本 ~ - Qiita

タイムインテリジェンス!と、その前に……。

正しい「データモデル」であれば、DAXはそんなに難しい記述になることはないと思います。
『モダンExcel』であればなおのこと、シンプルなデータ分析しか行わないでしょうから、難しいDAXになることはないはずです。
もし、DAXが難しい、動作が不安定、結果が思うように計算できない、というのであれば、正しい「データモデル」になっているか、今一度確認してみて欲しいと思います。

さて、そのDAXの真骨頂の一つが、タイムインテリジェンス関数!
ということで、タイムインテリジェンス関数の事例で解説しましょう。

元になるメジャー(下記の各メジャー内の 「MEASURE」部分)を作成し、これをお決まりの「構文」に入れるだけ。
例えば、売上高をそれぞれの対象期間で計算したいのであれば、SUM([sales])みたいなMEASUREを作って、これを「構文」に入れるって感じ。

このように説明すると、必ず出てくる輩がいる。

丸覚え~! 丸暗記~!

これ、絶対ダメ!
意味が分からず、Power Pivot for Excelとか、Power Queryとか、使っている人が多すぎる……。
詰め込み教育の弊害?

Power Pivot for Excelにしろ、Power Queryにしろ、従来のエクセルの関数なんかと比較にならないほど強力なツールですから、用法用量を守らないととんでもないことが起こります。
計算誤りとか、動作不安定とか……。
「相対パス」の事例も見かけますが、これ、最悪「情報漏洩」する可能性がありますよ……。



ホント、大丈夫?
必ず一次情報を読んで!
それが分からないというのであれば、このサイトも含め、一次情報をフォローしている解説を読むことを強くお勧めします。

典型的な4つのタイムインテリジェンス関数

当然だけど、下記のようなお決まりの「構文」は、意味を知ったうえで利用すべき。

繰り返します!
DAXを丸覚えするのは、絶対にやめた方が良い。

メジャーのメンテナンスなどを考えれば、当然だよね。
丸暗記していては、どこが問題なのか、そもそもわからないでしょ。

月次単位で累計➡ CALCULATE(MEASURE, DATESMTD(Date[Date]))

四半期単位で累計➡ CALCULATE(MEASURE, DATESQTD(Date[Date]))

年度単位で累計➡ CALCULATE(MEASURE, DATESYTD(Date[Date]))

前年分の計算➡ CALCULATE(MEASURE, SAMEPERIODLASTYEAR(Date[Date]))


タイムインテリジェンス関数の典型的な4つの事例を、よくご覧ください。
いずれも、「CALCULATE」で始まり、その第1引数に「MEASURE」が来て、第2引数が下記のようにそれぞれ違うだけ。

月次単位で累計したければ、DATESMTD。

四半期単位で累計したければ、DATESQTD。

年度単位で累計したければ、DATESYTD。

前年分の計算をしたければ、SAMEPERIODLASTYEAR。


難しいことは、なにもない。
これがDAXの基本であり、本来の姿。
なぜ、DAXをそんなに難しく書くの? 不思議でならない。

DAXは、このように、似た様なものをまとめて理解すると良いと思います。
そして、これらのDAX関数の意味をMSの一次情報で調べ、よく読んで、しっかり理解する、これが大切!(自習!)

ん?「パワクで、累計?」

何度も見かけるんだけど、「パワクで、累計ってどうやればよいの?」という質問に対するその回答例は、いつも同じ間違いだったりして……。

ああ、またか、っていう……、既視感……。

え? 気志團?

基本的なことを言えば、Power Queryで計算するのは、例えば「単価×数量」のような簡単なものであればいいけれど、「累計」のようなもの(実は、「累計」の計算は、かなり複雑!)、こうした複雑なのものをPower Queryで計算させるにはある程度「.NET」自体の基本的な仕組みを理解していないと、結構失敗する可能性が高い、そう思いますよ。

だから筆者は、Power Queryでは基本的に計算しない!

そもそも、どうして「二つのツール」があるのか、よくよく考え直したほうが良いと思うのです。
「モダンExcel」にも「Power BI」にも、わざわざ「二つのツール」が用意されているわけでしょ。
なんでかな~、なぜ二つもツールがあるのかな~、って考えないと。

「きれいなデータにする」のが、【 Power Query 】

きれいなデータを使って「計算する」のが、「DAX」 ☚ Excelだと【 Power Pivot for Excel 】が担う

「二つのツール」の【役割分担】をしっかり理解しないと、いつまでたっても「なんちゃってモダンエクセル」から抜け出せないと思うのです。

■■■■■「正しいモダンExcel」の使い方の基本を学ぶには、Power Query(パワークエリ)とPower Pivot for Excel(パワーピボット)の両者を「一体理解」する必要があります。
ぜひ、拙著「モダンExcel入門」(日経BP)で学んでみて欲しいと思います。
サンプルデータで、実際に手を動かしながら、理解を深めることもできます。参考にしてください。 ■■■■■

モダンExcel研究所

フォローお待ちしてます!

error: Content is protected !!