21
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

日付テーブルには 1月1日 から 12月31日 までを含めるのですぞという話。Power BI 謎マナーではありません。

Last updated at Posted at 2020-08-14

守らないなら一向にかまわない。タイムインテリジェンス関数がまともに使えなくなって苦労するだけ。と説明をすることはありますけどね。でも、もっと大事なことことから考えれば 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 はデータの可視化ツールだ。と思っている人が多いのだけど、ビジュアル(可視化)は機能の一部でしかないですからね。ビジュアルのためにデータを意図的に絞り込んだり改ざんをしてはいけませんよ。ということに繋がってしまいそうだなと。

その他

21
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?