ナレッジベース

パブリッシュ後、日付計算、フィルター、およびタイムスタンプに予期しない結果が表示されます


発行: 01 Oct 2013
最終修正日: 19 Dec 2019

問題

ワークブックやデータ ソースをパブリッシュした後、NOW() や TODAY()、相対日付フィルター、およびタイムスタンプ (前回の更新など) に基づいた計算は、予期しない結果を表示します。計算、フィルター、およびタイムスタンプは別のタイムゾーンで計算されているように表示されます。

環境

  • Tableau Online
  • Tableau Server

解決策

ビューに表示される日付のタイム ゾーンと日付/時刻フィールドを調整するには:

  1. Tableau Desktop でワークブックを開きます。
  2. [分析] > [計算フィールドの作成] を選択します。
    • 日付/時刻フィールドの場合、次に似た計算を作成します。
      DATEADD('hour',<number of hours>,[<datetime field>])
    • 日付のみのフィールドの場合、次に似た計算を作成します。
      IF DATEPART('hour', NOW()) > <PST time of midnight> then DATEADD('day', 1, <datetime field>) else <datetime field> end
      • ​例: IF DATEPART('hour', NOW()) > 6 THEN DATEADD('day', 1, [Date]) else [Date] END この式は、午前 6 時になると [日付] フィールドに 1 日が加算され、それ以外は同日とすることを示しています。
      • 日付関数 DATEPART または DATEADD の詳細については、Tableau ヘルプの「日付関数」を参照してください。 
  3. ビューで使用する日付/時刻フィールドを、新しく作成された計算フィールドに置き換えます。
  4. ワークブックまたはデータ ソースをパブリッシュします。


相対日付フィルターを、データセットの最新の時間にフィルターする計算に置き換えるには:

  1. 次のような計算を作成します。
    [DateTimeField] >= {FIXED: MAX(DATETRUNC('hour',[DateTimeField]))} 
  2. [フィルター] シェルフに計算を配置し、"True" を表示するよう選択します


相対日付フィルターを、目的のタイムゾーンの "この時間" にフィルターする計算に置き換えるには:

  1. 次のような計算を作成します。次の計算では、太平洋時間 (Tableau Online 10ay) から東部時間 (仮定のユーザー) に変換します。
    [DateTimeField] >= DATEADD('hour', 3, NOW()) 
  2. [フィルター] シェルフに計算を配置し、"True" を表示するよう選択します

原因

データ ソースまたはワークブックをパブリッシュした後、NOW()、TODAY()、相対日付フィルター、およびタイムスタンプは、Tableau Server や Tableau Online のタイムゾーンにローカライズされます。

 

詳細情報

地域がサマー タイムを使用している場合は、シフトする時間数が変わる場合があります。次の計算は、サマー タイムが 3 月の第 2 日曜日に始まり、11 月の第 1 日曜日に終わると仮定して、UTC を太平洋時間に変換します。
DATEADD('hour',
IF [<datetime field>] <= IFNULL(
    { FIXED DATETRUNC('year', [<datetime field>]) : MIN(
    IF DATEPART('month', [<datetime field>]) = 3
    THEN
    DATEADD('minute', 119, DATEADD('day',    IF DATEPART('weekday', DATETRUNC('month', [<datetime field>])) >1
    THEN 7 - (DATEPART('weekday', DATETRUNC('month', [<datetime field>])) - 1)
    ELSE 0
    END
    + 7,    DATETRUNC('month', [<datetime field>])
    ))
    END
    )}
, TODAY()+1)
OR [<datetime field>] >=
    { FIXED DATETRUNC('year', [<datetime field>]) : MIN(IF DATEPART('month', [<datetime field>]) = 11
    THEN
    DATEADD('minute', 119, DATEADD('day',    IF DATEPART('weekday', DATETRUNC('month', [<datetime field>])) >1
    THEN 7 - (DATEPART('weekday', DATETRUNC('month', [<datetime field>])) - 1)
    ELSE 0
    END,    DATETRUNC('month', [<datetime field>])
    ))
    END
    )}
THEN -8
ELSE -7
END,
[<datetime field>])



この記事についてディスカッションする... フィードバック フォーラム
この記事で問題は解決しましたか?