Power BIのストリーミングデータセットの日時型についてのあれこれ


はじめに

GravioでセンサーデータをPower BIで可視化しようとしていまいち思ったように出なかったのでちょっと調べてみたので書いておく。
かなり雑に調べたので間違ってたら教えて下さい。

前提

  • クラウド版のPower BI。DesktopでもProでもありません
  • ストリーミングデータセットは下図のように設定
  • Postmanでゴニョゴニョ形式をイジってみた

調査結果

色々調査した結果、下記のような仕様になってるようだ。

  • 内部ではUTCで扱っている
  • APIで渡した値にタイムゾーン情報がついていた場合はちゃんと計算してUTCとして格納される
  • タイムゾーン指定子は Z (UTC)、もしくは ±hhmm ±hh:mm ±hh など。基本的にはISO8601に沿っていれば良い
  • JST などの略称はエラーになる
  • タイムゾーンを指定しないときはUTCとして扱われる
  • レポートやグラフの表示はUTC表示以外に変更できない → これを変えたくて色々調べたが。。もしやり方を知ってる人がいたら教えてほしいです。。

結論

とにかくUTCで扱われる。ただ、タイムゾーンを指定しなければなんとなくローカルタイムで扱ったようには見えるので、あまり深く考えずタイムゾーンを指定しないのが吉。。。。

試したパターン

UTC 2020/6/19 03:00:00 で格納される

JSTを ±hh[[:]mm] 形式で指定

"timestamp" :"2020-06-19T12:00:00+09:00"
"timestamp" :"2020-06-19T12:00:00+0900"
"timestamp" :"2020-06-19T12:00:00+09"

UTC 2020/6/19 12:00:00 で格納される

UTCを明示的に指定

"timestamp" :"2020-06-19T12:00:00Z"
"timestamp" :"2020-06-19T12:00:00+0000"

タイムゾーン指定なし

"timestamp" :"2020-06-19T12:00:00"

エラーになる

日本標準時を略語で指定

"timestamp" :"2020-06-19T12:00:00 JST"

Gravioの場合

SendHttpRequestを使う場合

  • Bodyを "[{\"data\": 10, \"timestamp\":\"" + av.Timestamp + "\"}]" とするとUTC時刻がタイムゾーン指定なしで送られるのでUTC時刻で格納される
  • Bodyを "[{\"data\": 10, \"timestamp\":\"" + ToLocalTime(av.Timestamp) + "\"}]" とするとローカルタイムがタイムゾーン指定なしで送られるのでローカルタイムで格納される!

SendRecordを使う場合

  • av.Timestampをそのまま渡すとUTC時刻がUTC指定(Z)されて送られるのでUTC時刻で格納される
  • ToLocalTime(av.Timestamp)を渡してもローカルタイムがタイムゾーン指定(+09:00)されて送られるのでUTC時刻で格納される
  • ステップ出力の変数をDateTime型ではなくString型にするとタイムゾーン指定が外れ、ローカルタイム時刻で格納される!

ただし・・・

ローカルタイム時刻が格納されるが、UTC表現でのローカルタイム時刻なので、実際の時刻はローカル時刻ではないので注意 (ややこしい・・・)

(追記 2020/8/11)

当たり前ですが忘れてました。日本時間の場合、UTC時間で無理やり9時間足すことになるので、相対日付のフィルターを使って最近N日とかやっててもリアルタイムでデータが表示されません。未来の日付なので。。。