KNOWLEDGE BASE

Datumsberechnungen, Filter und Zeitstempel führen zu unerwarteten Ergebnissen nach dem Veröffentlichen


Veröffentlicht: 01 Oct 2013
Zuletzt geändert am: 19 Dec 2019

Problem

Nach der Veröffentlichung einer Arbeitsmappe oder Datenquelle führen Berechnungen, die auf NOW() oder TODAY() basieren, relative Datumsfilter und Zeitstempel (wie beispielsweise zur Angabe der letzten Aktualisierung) zu unerwarteten Ergebnissen. Die Berechnungen, Filter und Zeitstempel wurden möglicherweise in einer anderen Zeitzone berechnet.

Umgebung

  • Tableau Online
  • Tableau Server

Lösung

So passen Sie die Zeitzone von Datum- und Datum/Uhrzeit-Feldern an, die in der Ansicht angezeigt werden:

  1. Öffnen Sie die Arbeitsmappe in Tableau Desktop.
  2. Wählen Sie Analyse > Berechnetes Feld erstellen aus.
    • Für ein Datum/Uhrzeit-Feld erstellen Sie eine Berechnung ähnlich der folgenden:
      DATEADD('hour',<number of hours>,[<datetime field>])
    • Für ein Feld, das nur ein Datum enthält, erstellen Sie eine Berechnung ähnlich der folgenden:
      IF DATEPART('hour', NOW()) > <PST time of midnight> then DATEADD('day', 1, <datetime field>) else <datetime field> end
      • Beispiel: IF DATEPART('hour', NOW()) > 6 THEN DATEADD('day', 1, [Date]) else [Date] END Mit diesem Ausdruck wird ein weiterer Tag zum Datumsfeld "Datum" hinzugefügt, wenn der Zeitpunkt mindestens 6 Stunden nach Mitternacht liegt. Ansonsten bleibt das Datum unverändert.
      • Weitere Informationen zu den Datumsfunktionen DATEPART oder DATEADD finden Sie in der Tableau-Hilfe unter Datumsfunktionen
  3. Ersetzen Sie das in der Ansicht verwendete Datum/Uhrzeit-Feld durch das neu erstellte berechnete Feld.
  4. Veröffentlichen Sie die Arbeitsmappe oder Datenquelle erneut.


So ersetzen Sie einen relativen Datumsfilter durch eine Berechnung, die das Datenset auf Werte der letzten Stunde filtert:

  1. Erstellen Sie eine Berechnung ähnlich der folgenden:
    [DateTimeField] >= {FIXED: MAX(DATETRUNC('hour',[DateTimeField]))} 
  2. Platzieren Sie die Berechnung im Container "Filter", und wählen Sie die Anzeige von "True" 


So ersetzen Sie einen relativen Datumsfilter durch eine Berechnung, die in der gewünschten Zeitzone auf "diese Stunde" filtert:

  1. Erstellen Sie eine Berechnung ähnlich der folgenden. Durch folgende Formel wird Pacific Time (Tableau Online 10ay) in Eastern Time (fiktiver Benutzer) umgewandelt:
    [DateTimeField] >= DATEADD('hour', 3, NOW()) 
  2. Platzieren Sie die Berechnung im Container "Filter", und wählen Sie die Anzeige von "True" 

Ursache

Nach dem Veröffentlichen einer Datenquelle oder einer Arbeitsmappe werden die Funktionen NOW(), TODAY(), Filter des Typs "Relatives Datum" und Zeitstempel entsprechend der Zeitzone von Tableau Server oder Tableau Online lokalisiert.

 

Zusätzliche Informationen

Die Anzahl von Stunden, um die Zeit zu wechseln kann sich ändern, wenn Ihr Gebiet die Sommerzeit einhält. Die folgende Berechnung konvertiert UTC zur Pazifik-Zeitzone, in der Annahme, dass die Sommerzeit am 2. Sonntag im März beginnt und am 1. Sonntag im November aufhört):
DATEADD('Stunde',
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>])



Über diesen Artikel diskutieren... Feedback-Forum
Hat dieser Artikel das Problem gelöst?