Power BI Desktop 2018年2月の更新で "日付テーブルとしてマークする" という機能が追加された。この機能は、PowerPivot や SSAS では用意されていた機能なのだけど、やっぱり Power BI Desktop でも必要ということで追加されたのでしょう。
日付テーブルについては 以前のポストの通り
日付テーブル は必要か、それが問題だ - Qiita
必須ということではないけれども
リレーションシップ で使用する列のデータ型が 日付型 であれば 設定しなくても結果は変わらないので、必要であれば設定すればよい。
独自に用意した日付テーブルを "日付テーブルとしてマークする"と クイック メジャーが割と使えるようになるので設定してもいんじゃないかなと思う。
どのようなときに使うか
たとえば
ファクト テーブル上で日付を表す列のデータ型が日付時刻ではないとき使用できる。個人的には DWH などでよく見かけるかな。
テーブル 'ファクト'
DateKey | Quantity |
---|---|
20180105 | 1000 |
20180110 | 5000 |
... | ... |
20180210 | 700 |
20180220 | 300 |
... | ... |
テーブル 'カレンダー'
DateKey | Year | Month | Day | Dates |
---|---|---|---|---|
20180101 | 2018 | 1 | 1 | 2018-01-01 |
20180102 | 2018 | 1 | 2 | 2018-01-02 |
20180103 | 2018 | 1 | 3 | 2018-01-03 |
... | ... | ... | ... | ... |
このとき、
リレーションシップは 'カレンダー'[DateKey] 1 --> * 'ファクト'[DateKey]
そして、
タイム インテリジェンス関数に使うのでテーブル 'カレンダー' には 日付型 もしくは 日付時刻型の [Dates]列 がある。
TotalQuantity = SUM( 'ファクト'[Quantity] )
TotalQuantityLM =
CALUCLATE(
[TotalQuantity],
PREVIOUSMONTH( 'カレンダー'[Dates] ),
ALL( 'カレンダー' ) --- 日付テーブルとしてマーク & 日付列として指定しない場合に必要
)
タイム インテリジェンス関数自体は結果を返すけれども、伝搬されるフィルターによりメジャーで期待する結果が得られない。なので、結果セット各行で 'カレンダー'テーブルに適用されるフィルターを ALL 関数 で除外する必要がある。
日付テーブルとしてマークすると
自動的に適用される ALL
タイム インテリジェンス関数を使用する フィルターコンテキストに使用する場合、自動的に ALL( 'カレンダー' ) が適用されたものとなる。
TotalQuantityLM =
CALUCLATE(
[TotalQuantity],
PREVIOUSMONTH( 'カレンダー'[Dates] )
)
中の人が用意した 日付テーブル
Power BI Desktop の タイム インテリジェンス機能 で用意された日付テーブルはすべて削除される。なぜなら、独自に日付テーブルを用意したから。あわせて、用意された内部の日付テーブルを使用するメジャーはすべて機能しなくなるのは必然。