LoginSignup
9
5

More than 1 year has passed since last update.

[Power BI] タイムゾーン(Time Zone)に要注意!

Last updated at Posted at 2022-01-29

はじめに

この記事を書いたところ、

@yugoes1021 さんより「DateTime.LocalNow() は Power BI Service 上では UTC なので、ご注意を:relaxed:

とご指摘をもらい、その後アドバイスももらいながら記事内の Power Query を修正しました。

結論

日時はUTCでとってきてから、タイムゾーンをあわせるのが安全。

today = DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9)

↓ ここから検証コーナー

なにが間違っていたか

当初、Power Query のカレンダーテーブルでは 「今日」today変数を

today = DateTime.Date(DateTimeZone.LocalNow())

と定義していました。

このtodayをもとにして各カラムの計算をしていっていました。

手元のPower BI Desktop 環境でチェックしたときには正しい日時がとれていたと思っていました。

検証

下記4つの関数をPower BI Desktop と Power BI Service で評価がどうなるか確かめます。

DateTime.LocalNow()
DateTimeZone.LocalNow()
DateTimeZone.UtcNow()
DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9)

Power BI Desktop

2022/01/29 20:20 頃に作業しています。

  • DateTime.LocalNow()
  • DateTimeZone.LocalNow()

はともに今の日時を表示。

  • DateTimeZone.UtcNow()

こちらは(当たり前ですが)UTCを表示。

  • DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9)

こちらも正しい日時を表示。

image.png

Power BI Service

このレポートを Power BI Service にアップして、データセットを更新します。

すると・・

  • DateTime.LocalNow()
  • DateTimeZone.LocalNow()
  • DateTimeZone.UtcNow()

この3つの関数はすべてUTCを表示。

  • DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9)

UTCをとってきてから、タイムゾーンをあわせたものだけ、正しい日時を表示しています。

image.png

Power BI ServiceのタイムゾーンはUTC

Power BI Desktop で DateTime.LocalNow() などのローカルタイムを取得すると、
自動的に日本のタイムゾーンで取得される。

そのレポートをそのままPower BI Service にUPすると、クラウドサービス(Power BI Service)側のタイムゾーンはUTCなので、期待している時間が取得できない。

日時を取得するときは明示的にUTCを取得して、日本のタイムゾーンに合わせてあげることが大事。

まとめ

日時を定義するときは明示的にUTCのタイムゾーンを取得→タイムゾーン変換するのが安全! :scream_cat:
クラウドサービス(Power BI Service)のローカルタイムゾーンはUTC! :thinking:

9
5
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
9
5