守らないなら一向にかまわない。タイムインテリジェンス関数がまともに使えなくなって苦労するだけ。と説明をすることはありますけどね。でも、もっと大事なことことから考えれば 1/1 から 12/31 まで含めないとならないことに気づくと思うのです。
どういうことか
ファクトテーブルがこんな感じになっているとき
日付 | 値 |
---|---|
2019-03-25 | 10,000 |
2019-04-15 | 10,100 |
... | ... |
2020-07-10 | 9,000 |
2020-08-15 | 8.000 |
日付テーブルをこんな感じにしてしまう人が割といらっしゃる。
Date | Year | Month | Day |
---|---|---|---|
2019-03-25 | 2020 | 3 | 25 |
2019-03-26 | 2020 | 3 | 26 |
... | ... | ... | ... |
2020-08-14 | 2020 | 8 | 14 |
2020-08-25 | 2020 | 8 | 15 |
連続した日付は持っているから日付テーブルとして定義することは可能っぽいんだけど、とてもよろしくないのだ。
なぜよ
モデリングやメジャーを勉強していると必ず日付テーブルは用意しましょうね。Power BI Desktop で自動で用意される日付テーブル使う場合はこうですよとか、独自に用意するときはこうですねってなっていて、このとき 1/1 から 12/31 までを含めてねって言われるはずだ。
自動で用意される日付テーブルが便利な時はあるとしても、フォーマットを変更できないのだから独自に日付テーブルを用意するわけで、このときおかしなことを始める人がいるんだよね。教えた人が悪いのか、教わった人が悪いのか、それはわかりかねるのだけど、いずれにしても不幸な話ではある。
タイムインテリジェンス関数が必要としている
タイムインテリジェンス関数はとても便利だ。ましてやよく使われる集計や分析であるから便利な関数が用意されているわけである。最適化ということもあってもおかしくない。
で、タイムインテリジェンス関数は日付テーブル存在している日付列の値から結果を導き出しているので、よろしくないものとした例でいうと2019-03-24 以前の集計ができなくなってしまうのである。タイムインテリジェンス関数を用いて、2019-01-01 から 2019-03-24 と 2020-08-26 から 2020-12-31 を扱うことができなくなるんですよ。DATEADD でも STARTOFYEAR でも 試してみるとよい。
タイムインテリジェンス関数の扱う一番大きな間隔は "年" だから 1/1 から 12/31 を含めてよって話。
データモデルに存在しないデータの集計はできない
そもそもデータモデルに存在しないデータを用いた集計することができないのだから、ディメンションテーブル(ここでは日付テーブル)には集計に利用される行をすべて用意しなければならないのだ。ファクトテーブルにはその名の通り事実だけが必要で、ファクトテーブルに存在しないディメンションデータをもれなく用意しておくことでデータモデル本来の価値を達成できるというものだ。データモデルに存在さえすれば、それを用いて集計ができるということである。
日付 | 値 |
---|---|
2019-03-25 | 10,000 |
2019-04-15 | 10,100 |
... | ... |
2020-07-10 | 9,000 |
2020-08-15 | 8.000 |
というとき、本来の機能が実現する 日付テーブルを用意すれば、
Date | Year | Month | Day |
---|---|---|---|
2019-01-01 | 2020 | 1 | 1 |
2019-01-02 | 2020 | 1 | 2 |
... | ... | ... | ... |
2020-12-30 | 2020 | 12 | 30 |
2020-12-31 | 2020 | 12 | 31 |
こんな感じの集計ができるわけだ。
年 | 月 | メジャー |
---|---|---|
2019 | 1 | |
2019 | 2 | |
2019 | 3 | 10,000 |
2019 | 4 | 10,100 |
... | ... | ... |
2020 | 8 | 8,000 |
2020 | 9 | |
2020 | 10 | |
2020 | 11 | |
2020 | 12 |
メジャーが BLANK を返す時、なにを指し示しているか、だ。
2019 と 2020 の年単位で集計したときその結果(見た目)は変わらない。でも、月単位で集計をし表示したときはじめて有意な表示ができるようになるよね。2020-01 の集計結果として BLANK を得たということは、ファクトテーブルには 2020-01 のデータが存在しないことを明示できるということ。ないものはないものとした集計結果、存在するものは存在するものとした集計結果 いずれも明示できることがデータモデルには必要なのだ。
思ったこと🙄
Power BI はデータの可視化ツールだ。と思っている人が多いのだけど、ビジュアル(可視化)は機能の一部でしかないですからね。ビジュアルのためにデータを意図的に絞り込んだり改ざんをしてはいけませんよ。ということに繋がってしまいそうだなと。