第15回 カレンダーテーブルとタイムインテリジェンス関数

経営分析などをする際、前月増減や対前年同期比などを算出・表示しますが、実はこの裏で日付や時間の階層を持つ「カレンダー」が重要な意味を持ち合わせています。
時系列データを最大限活用するためのカレンダーテーブル
年度や四半期、月次や週次など、任意の時系列単位でデータを集計したい、月別累計や移動平均を算出したい、対前月比や対前年増減額を表示したい、などと思うことがあると思います。
このような時系列データを簡単に扱えるようにするのが、「カレンダーテーブル」です。
カレンダーテーブルとは、連続した日付列を持ち、年月などの時系列の階層を持つ、ディメンションテーブルです。このカレンダーテーブルと販売データのようなファクトテーブルをリレーションシップすることにより、任意の期間で集計したり、後述するタイムインテリジェンス関数を利用できたりするようになります。
カレンダーテーブルを作成することは、期間の操作が含まれる経営分析に必須です。
カレンダーテーブルの作成とタイムインテリジェンス関数
カレンダーテーブルを作成する一番簡単と思われる方法は、データテーブルをPower Pivotに読込後、販売データなどのテーブルの日付列をクリックして選択し、[デザイン]タブの[予定表]グループの[日付テーブル]アイコンをクリックするだけという方法です。
これで[予定表]という名称の“カレンダーテーブル”を作成することができます(図表)。

既定では、Date、年、月の番号、月、MMM-YYYY、曜日の番号、曜日、という7項目のカレンダーテーブルを作成できます。

しかし、これらの情報だけでは、財務会計のデータとして不十分だよねー。
年度や四半期など、各社独自のカレンダーの要素も欲しいですね。
営業の観点からすれば、営業日数を計算したいというニーズもあるでしょう。
一方、営業日と祝祭日を見比べれば、営業日でもないのに取引が計上されている仕訳データに出くわすなど、不正会計と向き合うヒントも得られます。
年度と四半期をカレンダーテーブルに表示する
ここでは、分析に必須の「年度」と「四半期」を「カレンダーテーブル」に表示してみましょう。
3月決算であれば[列の追加]から次にように設定します。なお、図表を見ればわかるように算式中、[月]を用いません。[月]では文字列となってしまうので、数字で表現される[月の番号]を使う点に留意してください。
年度=IF([月の番号]<=3,[年]-1,[年])
四半期=IF([月の番号]<=3,”Q4″,IF([月の番号]<=6,”Q1″,IF([月の番号]<=9,”Q2″,”Q3″)))
上記の計算式の内容は、Excel関数でおなじみのIF関数と同じです。
例えば、年度の“[月の番号]<=3”という部分は、“3月以下である場合”ということを意味します。図表1186行目と1187行目で年度と四半期がそれぞれ区分されているのが分かります。
なお、このカレンダーテーブルは連続した日付列を持つ「一意のデータ」です。
このカレンダーテーブルと、SalesDataのような「ファクトテーブル」の販売日などの日付列の間で「リレーションシップ」をとることで、集計に便利な「タイムインテリジェンス関数」を利用できるようになります。
タイムインテリジェンス関数とは
タイムインテリジェンス関数とは、次回解説予定のDAX(Data Analysis Expressions) の特徴的な関数で、年、四半期、月、日などの期間=タイムを使用してデータを操作=インテリジェンスし、前年比や累計などを計算する際に便利な関数です。
例えば、「SAMEPERIODLASTYEAR関数」を用いることで前年同月比などを簡単に計算できます。
年度累計を表示したければ「TOTALYTD関数」を用い、四半期累計を計算したければ「TOTALQTD関数」を用います。
すべて簡単な英語表記になっているので、比較的イメージしやすいと思います。

・時系列データを上手に分析するには、カレンダーテーブルが必要だよ。
・カレンダーテーブルを用いることで、年度累計や前年比などを簡単に計算できるタイムインテリジェンス関数を利用できるようになるよ。
タイムインテリジェンス関数に関する論点は、第16回 既存データから新たな情報を得る! メジャーとDAX も参照してください。
最近、「なんちゃってカレンダーテーブル」が横行している件(その1)
「カレンダーテーブル」は、マイクロソフトの定義に従わなければなりません。
これは、モダンExcelを使う際の決まりであり、マイクロソフト所定のルールだからです。
巷で横行する「なんちゃってカレンダーテーブル」では、モダンExcelが正しく起動しませんので、くれぐれもご注意ください。「なんちゃってカレンダーテーブル」は、計算を誤り、分析結果に重大な影響が及びます。

「なんちゃってカレンダーテーブル」だと、経営判断を誤りかねないね!
良い子は「なんちゃってカレンダーテーブル」は、使わないようにしようね!
マイクロソフトの公式Docsには、「正しいカレンダーテーブル」について、次のような記載があります。
なお、これはモダンExcelの先にあるPower BIのDocsですが、「正しいカレンダーテーブル」の要件はモダンExcelでも一緒です。

これらの要件を満たしたものだけが「正しいカレンダーテーブル」です。
裏を返せば、これらの要件を一つでも満たさないものは「なんちゃってカレンダーテーブル」なので、モダンExcelが正しく動作しないことになります。
よく見かける「なんちゃってカレンダーテーブル」の一例が、「該当する期間だけ」としたもの。
上記マイクロソフトの定義に従えば、「日付列は年間全体にわたっている必要があります。」とあるわけですから、例えば「1/1~3/15」までの取引データを分析する場合であっても、「1/1~12/31」など1年分の日付を持つ「正しいカレンダーテーブル」を用意しなければならないわけです。それは、マイクロソフトの定義に従えば当然のことで、「日付列は年間全体にわたっている必要があります。」となっているからです。
最近、「なんちゃってカレンダーテーブル」が横行している件(その2)
次のような「カレンダーテーブル」の作成方法に関する記述にも、留意が必要です。
ちなみに、マイクロソフトでは「カレンダーテーブル」の日本語表記を「日付テーブル」と言っていますが、国際的には「カレンダーテーブル」と表現するのが一般的です。

上記のように、「正しいカレンダーテーブル」を作るにはいくつかの方法があることを、マイクロソフトは公式に表明しています。要約すれば、こうです。

「正しいカレンダーテーブル」は、
パワークエリもしくはパワーピボット(DAXを含む)で作成してね!
なお、Excelのワークシートで「カレンダーテーブル」を作成することもできます。巷では、この方法をよく見かけます。その場合、実はある「ひと手間」が必要になるのです。この「ひと手間」がないと、DAXでタイムインテリジェンス関数を使う際、非常に煩雑なDAX式となってしまいます。
煩雑なDAX式は、計算誤り、不正確な分析を引き起こすことにもつながりますので、注意してください。
こうしたことを踏まえ、モダンExcel研究所では、Excelのワークシートで「カレンダーテーブル」を作成することを推奨していません。
「正しいカレンダーテーブル」の作り方など、モダンExcel初心者が知っておくべき「カレンダーテーブル」に関する情報は、拙著「モダンExcel入門」第2章、PART2、112ページ~、「時系列分析に必須のカレンダーテーブル」をご参照ください。
最近、「なんちゃってカレンダーテーブル」が横行している件(その3)
本件に関し、日本のPower BI先駆者たちも、注意喚起しています。
Power BIのMVP(マイクソフトが公認するプロ)で第一人者の一人、ゆーごさん(清水優吾氏)も、次のようなツイートで「なんちゃってカレンダーテーブル」について、強い懸念を示しています。
Yugo Shimizu (清水 優吾) (microsoft.com)
余談ですが、小生はゆーごさんに、パワークエリやDAXの基本を、2017年5月からご指南いただいております。

ゆーごさんも指摘するように、カレンダー(日付)テーブルには制約があるのです。
「なんちゃってカレンダーテーブル」では、絶対にダメなのです。
なぜなら、それがマイクロソフトのルールだからです。
「モダンExcel」「Power BI」を使う人は、必ず「正しいカレンダーテーブル」を使ってください。
そうしないと、「モダンExcel」や「PowerBI」がきちんと動作せず、誤った結果となります。
間違った結果を基に経営判断をすれば、大変なことにもつながりかねません。
今すぐ「なんちゃってカレンダーテーブル」を捨ててください。
必ずマイクロソフトの公式見解を踏まえた「正しいカレンダーテーブル」を使うようにしてください。
「モダンExcel研究所」を楽しむ際の【注意事項】
コンテンツコピー、スクレイピングなど【厳禁】 ☚【検知ツール設置済】☚悪質な場合【法的措置】を講じます
(過負荷によるサーバー障害が生じた経験上、ご協力お願いいたします!)

モダンExcel研究所
フォローお待ちしてます!
「モダンExcel」の入門書

1件のピンバック
DAXをものにする! 基本ポイントはこれだ! | モダンExcel研究所
コメントは現在停止中です。