Wir beginnen mit dem Entwurf der Bausteine eines Data Mart / Warehouse und müssen in der Lage sein, alle Zeitzonen zu unterstützen (unsere Kunden kommen aus der ganzen Welt). Beim Lesen von Diskussionen online (und in Büchern) scheint eine gängige Lösung darin zu bestehen, eine separate Datums- und Zeitdimension sowie einen Zeitstempel in den Faktentabellen zu haben.
Die Frage, die ich nur schwer beantworten kann, ist jedoch, was die Datums- und Zeitdimensionen angesichts meiner dynamischen Zeitzonenanforderungen tatsächlich für mich tun. Eine Zeitdimension ist etwas sinnvoller, aber ich habe Schwierigkeiten mit der Datumsdimension. Ein allgemeiner Entwurfsansatz für eine Datumsdimension umfasst normalerweise Eigenschaften wie Tagesname, Wochentag, Monatsname usw. Das Problem, das ich mit all dem habe, ist, dass am Dienstag, dem 31. Dezember 2013, um 23:00 Uhr in UTC Mittwoch ist , 1. Januar 2014 in allen Zeitzonen nach UTC + 2.
Wenn ich also all diese Zeitzonen-Konvertierungen für jede einzelne Abfrage (und jeden Bericht) durchführen muss, wozu dann diese Eigenschaften haben und speichern, die ich wahrscheinlich nie verwenden werde (wie es scheint)? Einige Leute schlagen vor, Faktenzeilen für jede Zeitzone zu haben, aber das scheint mir lächerlich. Wir müssen in der Lage sein, jeden Monat Millionen von Datensätzen zu speichern.
Andere schlagen vor, eine Zeitzonen-Brückentabelle zu haben, die zwar sinnvoll ist, aber auch zusätzliche Komplexität und zusätzliche Verknüpfungen erfordert, um etwas zu erreichen, das meine Client-Apps und -Berichte ab einem Datum leicht herausfinden sollten (die Berichterstellung erfolgt hauptsächlich webbasiert) wo es eine Vielzahl von Bibliotheken gibt, die beim Konvertieren, Anzeigen und Formatieren von Daten helfen können).
Das einzige, woran ich denken kann, ist die Leichtigkeit und möglicherweise Leistung der Gruppierung nach Datum und Stunde, aber wie schlecht es ist, nach Datumsteilen zu gruppieren (wir verwenden MS SQL, aber wir werden Millionen von Zeilen abfragen) oder sollten wir dies berücksichtigen Nur extrem einfache Datums- und Zeitdimensionen mit nicht viel mehr als Stunden-, Tag-, Monats- und Jahreszahlen zum größten Teil, da die meisten Literale wie Montag nicht viel bedeuten würden, wenn Zeitzonen ins Spiel kommen?
quelle
Antworten:
Zuerst...
Die Trennung
Datime/Time
in eineDate
Dimension und eineTime
Dimension ist definitiv der richtige Weg.Um mehrere Zeitzonen zu verwalten, müssen Sie das
DateKey
und das duplizieren,TimeKey
damit Sie Folgendes haben:LocalDateKey
LocalTimeKey
UtcDateKey
UtcTimeKey
Du sagst...
Wenn Sie die 4 Spalten haben, die ich oben aufgeführt habe, können Sie die Faktentabelle mithilfe von Tabellen- Aliasen mit der Datums- und / oder Zeitdimension verknüpfen (in der Kimball-Terminologie werden diese Alias-Dimensionstabellen als "Rollenspieldimensionen" bezeichnet) Sie hätten so etwas wie das Folgende:
Abschließend...
Da Sie einen Data Mart und keine OLTP-Datenbank erstellen, sollte die Generierung der lokalen und Utc-Zeiten in Ihrer ETL durchgeführt werden , NICHT in clientseitigen Anwendungen aus den folgenden Gründen (abgesehen von der Lokalisierung der UTC-Zeit bis zum Bericht Leserperspektive):
StandardisedDateKey
oderCorporateHQDateKey
anstelle einer UTC-Datumstabelle, die Sie auf der Grundlage eines anderen vom Unternehmen vereinbarten Standards standardisierenquelle
Date
undTime
Dimensionen anstelle einer einzelnen verwendenDateTime
? Eine Faktentabelle kann mehrere Daten haben, und das Speichern von zwei INTs anstelle von jeweils einem kann sich summieren.Ich entschuldige mich im Voraus für die Kürze dieser Antwort und plane, näher darauf einzugehen, wenn ich nicht bei der Arbeit bin.
Datums- und Zeittabellen bieten mit Sicherheit Vorteile, da sie eine einfache Aggregation Ihrer Daten ermöglichen. In vielen Fällen ist es die einfachste Möglichkeit, solche Dinge nach Monat oder Werktagen zu sortieren. Dies ersetzt jedoch nicht unbedingt die Nützlichkeit eines Zeitstempels. In Ihrem speziellen Fall ein UTC-Zeitstempel. Sobald Sie diesen Zeitstempel haben, müssen Sie ihn nur noch in der Berichts- oder Präsentationsebene in die Ortszeit ändern. Um Bereichsscans zu vermeiden, stellen Sie sicher, dass Sie Ihren Anforderungsbereich auch in UTC-Zeit konvertieren.
Wenn Sie weitere Fragen oder Kommentare haben, können Sie diese gerne stellen.
quelle