ナレッジベース

NOW() および TODAY() 関数が予期しないタイム ゾーンの日時を返す


発行: 04 Mar 2013
最終修正日: 23 Oct 2023

問題

NOW() または TODAY() 関数を計算フィールドに使用すると、Tableau Desktop は異なるタイム ゾーンの時刻を返します。または、相対日付フィルターを使用している場合、アンカー日付は異なるタイム ゾーンに含まれます。

環境

  • Tableau Desktop
  • PostgreSQL
  • Tableau Server リポジトリ (PostgreSQL データベース)
  • Amazon Redshift
  • 異なるタイム ゾーンのマシンでホストされているデータ ソースへのライブ接続

解決策

オプション 1:

抽出を使用します。詳細については、「データの抽出」を参照してください。


オプション 2:

DATEADD() 関数を使って計算し、タイム ゾーンのオフセットに対応します。
例 1:
  • UTC を PST (太平洋標準時刻) に変換する場合、式:NOW()
  • は、次のようにできます。DATEADD('hour', -8, NOW())

注:サマー タイム期間中は、UTC と PDT の時差は -7 時間となります。

例 2:

相対日付フィルター向けに UTC を PST (太平洋標準時刻) に変換する方法は次のとおりです。

  1. 日付フィルターを [フィルター] シェルフから削除します。
  2. [分析] > [計算フィールドの作成] を選択します。
  3. 開いた [計算フィールド] ダイアログ ボックスで次の操作を行い、[OK] をクリックします。
    • 計算フィールドに名前を付けます。この例では、計算フィールドに "Last 3 Days Filter (過去 3 日間のフィルター)" という名前を付けます。
    • 式フィールドで、次のような計算を作成します。

      [Date Field] >= DATEADD('day', -3, DATEADD( 'hour', -8, TODAY() ) )

  4. "Last 3 Days Filter (過去 3 日間のフィルター)" を [フィルター] シェルフまでドラッグします。
  5. [フィルター] ダイアログで [True] をチェックし、[OK] をクリックします。

 

原因

ライブ接続している場合、Tableau Desktop は NOW() または TODAY() に関し、データ ソースにクエリを実行します。データ ソースが異なるタイム ゾーンのマシンでホストされている場合、データ ソースはそのタイム ゾーンの時刻を返す場合があります。

Redshift および PostgreSQL へのライブ接続は、これらのデータソースの日付時刻やタイム ゾーンのオフセットの扱い方が異なるため、UTC 時間を返すように設計されています。

 
この記事で問題は解決しましたか?