はじめに
これまで別の記事でも紹介しましたが、Dataverse では、データフローという機能で、他のデータからデータをインポート、定期的に同期することが可能です。
その際、日時のデータをインポートすると、以下のような感じで時間が 9 時間ずれてしまうことがあるため、対策を備忘のため整理しておきます。
- インポート時
- インポート後
Dataverse 側の日時列の設定
Dataverse 側で日時の種類の列を使う場合、以下いずれかの設定となります。
既定ではユーザーローカルとなり、この場合、例えば、日本のタイムゾーンで 9 時と入力すると、内部的には 0 時 (UTC) で保存されますが、表示上は 9 時となります。
ただし、上述のデータフローでデータをインポートする際は、14 時のデータをインポートすると、こちらは日本時間の 14 時と解釈せず、UTC の 14 時と判断して、インポート後には 23 時 (日本時間の) と表示されてしまいます。
考えられる対策としては、以下があります。
- 対策 1「タイムゾーン非依存」を利用する
- 対策 2 データフロー側でタイムゾーンを UTC に変換してインポートする 例) 日本時間 14 時の場合、UTC 5 時に変換してインポートする
- 対策 3 元データの方で -9 時間しておく
対策 1 は一番楽そうですが、UTC で時間を処理する他システム (例:Power Automate) と連携する際、日本時間として保存した時間が UTC として解釈されてしまい時間が加算されてしまうリスクがあります。そのため、他システム連携時に -9 時間しておく必要が出てきます。
また、マルチタイムゾーンで Dataverse のデータを扱う場合、日本の人は日本の 9 時として保存、アメリカの人はアメリカの 9 時として保存した場合、表示上、データ上、どちらも 9 時となり混乱してしまいます。
対策 3 は、元データがデータ連携する際、UTC の時間で処理をしてくれるのであれば何もする必要はありません。ただ、Excel などでデータを持っており、日本の時間で表示されている場合、-9 時間しておくような作業が必要になります。ファイルが複数あると、ファイルごとにその処理をする必要があるため、少し面倒かもしれません。
ということで、今回は、対策 2 の方法を整理しておきます。
データフロー側でタイムゾーンを UTC に変換してインポートする
今回はこのようなデータを用意します。日本時間想定で、StartTime、EndTime の列を持っています。
とりあえずテーブルを読み込んだ状態は以下の通りです。
このままだと、日本時間の 14 時が UTC の 14 時と解釈されて、+9 時間されちゃうので、あらかじめ -9 時間しておきます。こちらは、カスタム列を追加して以下のようにします。
DateTimeZone.From([StartTime]) - #duration(0,9,0,0)
-9 時間されています。
EndTime 側も同様のことをやります。
Deadline 列は元々日付にしていたので、日時に変換してから -9 時間しました。
列のマッピングで、UTC の時刻の方でマッピングしていることを確認します。
インポートしたところ、時刻がずれなく表示されるようになりました。
まとめ
今回は、Dataverse のデータフローで日時のデータを変換してインポートする方法を紹介しました。時間のずれは、市民開発者の方にとって頭を悩ませるポイントの一つだと思いますので、今後 Dataverse 使う際の参考になれば幸いです。












