1. 課題:PBI DesktopとPBI Serviceでの日時の取扱いの違い
PBIレポートに更新日時を表示したいことはよくあります。
PowerQury M言語のDateTime.LocalNow()で日時を取得して表示することができます。
しかし、DateTime.LocalNow()ではtime zoneに依存してしまうため、PBI DesktopとPBI Serviceで以下の違いが発生してしまいます。
- PBI Desktop:ローカルPCのtime zoneに依存して、日時を取得する。
- PBI Service:UTCで日時を取得する。
そのため、ローカルPCのtime zoneがUTCではない場合、PBI Desktopから発行したPBI Serviceでは日時にtime zoneのズレが生じてしまう。
PBI Desktopで表示したDateTime.LocalNow()
ローカルPCのtime zone(JST)で表示される。
PBI Serviceで表示したDateTime.LocalNow()
UTCで表示される。JSTとは9.00h差異が出る。
2. 対応方法①:PBI Desktop・ServiceともにUTC+9.00hでJSTを導出する
『DateTime.LocalNow()』ではなく、『DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9)』で日時を取得します。
UTCで日時を取得後に9.00hの差分を補正しています。
タイムゾーン型の項目を使えばうまくいくが、datetime型の項目に変換してしまうと、「4.注意点」の問題が発生するので注意!
3. 対応方法②:日付を文字列型に変換する
『DateTime.LocalNow()』もしくは『DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9)』など、日時を取得した後に型をテキスト型に変換します。
これにより、テキストで保持されるため、PBI DesktopとServiceでのtime zoneの影響を排除できます。
4. 注意点:datetime型に変換するとPBI ServiceはUTCになる
項目の型をdatetime型にした場合、PBI DesktopではローカルPCのtime zoneに自動変換され、PBI ServiceではUTCに自動変換されてしまうため、結局、PBI DesktopとServiceでtime zoneの差異が生じてしまいます。