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』にも共通です。
ご一読されることを強くお勧めします。
タイムインテリジェンス!と、その前に……。
正しい「データモデル」であれば、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関数の意味をMSの一次情報で調べ、よく読んで、しっかり理解する、これが大切!(自習!)
ん?「パワクで、累計?」
何度も見かけるんだけど、「パワクで、累計ってどうやればよいの?」という質問に対するその回答例は、いつも同じ間違いだったりして……。
ああ、またか、っていう……、既視感……。
え? 気志團?
基本的なことを言えば、Power Queryで計算するのは、例えば「単価×数量」のような簡単なものであればいいけれど、「累計」のようなもの(実は、「累計」の計算は、かなり複雑!)、こうした複雑なのものをPower Queryで計算させるにはある程度「.NET」自体の基本的な仕組みを理解していないと、結構失敗する可能性が高い、そう思いますよ。
だから筆者は、Power Queryでは基本的に計算しない!
そもそも、どうして「二つのツール」があるのか、よくよく考え直したほうが良いと思うのです。
「モダンExcel」にも「Power BI」にも、わざわざ「二つのツール」が用意されているのは「なぜ?」と考える。
「きれいなデータにする」のが、【 Power Query 】
きれいなデータを使って「計算する」のが、「DAX」 ☚ Excelだと【 Power Pivot for Excel 】が担う
「二つのツール」の【役割分担】をしっかり理解しないと、いつまでたっても「なんちゃってモダンエクセル」から抜け出せないと思うのです。
「モダンExcel研究所」を楽しむ際の【注意事項】
コンテンツコピー、スクレイピングなど【厳禁】 ☚【検知ツール設置済】☚悪質な場合【法的措置】を講じます
(過負荷によるサーバー障害が生じた経験上、ご協力お願いいたします!)
モダンExcel研究所
フォローお待ちしてます!