Wir beginnen gerade mit dem Entwurf für ein neues Data Warehouse und versuchen zu entwerfen, wie unsere Datums- und Zeitdimensionen funktionieren. Wir müssen in der Lage sein, mehrere Zeitzonen zu unterstützen (wahrscheinlich mindestens GMT, IST, PST und EST). Wir dachten anfangs, dass wir eine breite kombinierte Datums- / Zeitdimension bis zu einer Granularität von vielleicht 15 Minuten haben würden. Auf diese Weise haben wir einen Schlüssel in unseren Faktentabellen und alle unterschiedlichen Datums- und Zeitdaten für alle unterstützten Zeitzonen befinden sich in einer Dimensionstabelle. (dh Datumsschlüssel, GMT-Datum, GMT-Zeit, IST-Datum, IST-Zeit usw.)
Kimball schlägt vor, eine von der Tageszeitdimension getrennte Tagesdimension zu verwenden, um zu verhindern, dass die Tabelle zu groß wird (Data Warehouse-Toolkit, S. 249). Dies klingt jedoch in Ordnung. Dies würde bedeuten, dass wir für jede Zeitzone zwei Schlüssel in unseren Faktentabellen haben Wir müssen unterstützen (eine für das Datum und eine für die Tageszeit).
Da ich in diesem Bereich sehr unerfahren bin, hoffe ich, dass jemand da draußen die Kompromisse zwischen den beiden Ansätzen kennt, dh die Leistung im Vergleich zur Verwaltung aller verschiedenen Zeitzonenschlüssel. Vielleicht gibt es auch andere Ansätze. Ich habe einige Leute gesehen, die davon gesprochen haben, eine separate Zeile in der Faktentabelle pro Zeitzone zu haben, aber das scheint ein Problem zu sein, wenn Faktentabellen Millionen von Zeilen sind, müssen Sie sie vervierfachen, um Zeitzonen hinzuzufügen .
Wenn wir das 15-Minuten-Korn machen, haben wir 131.400 (24 * 15 * 365) Zeilen pro Jahr in unserer Datums- / Zeitdimensionstabelle, was für die Leistung nicht allzu schrecklich klingt, aber wir werden es nicht sicher wissen, bis wir einige testen Prototyp-Abfragen. Das andere Problem mit separaten Zeitzonenschlüsseln in der Faktentabelle ist, dass die Abfrage die Dimensionstabelle basierend auf der gewünschten Zeitzone mit einer anderen Spalte verknüpfen muss. Vielleicht ist dies etwas, das SSAS für Sie erledigt, da bin ich mir nicht sicher .
Danke für alle Gedanken, -Matt
quelle
Antworten:
Wenn Sie Datum und Uhrzeit getrennt haben, können Sie Aggregate sehr einfach nach Zeit erstellen. Zum Beispiel: Wenn Sie eine Abfrage ausführen möchten, um herauszufinden, welcher Zeitraum des Tages am meisten beschäftigt ist. Dies ist sehr einfach unter Verwendung einer separaten Zeitdimension durchzuführen.
Außerdem sollten Sie nur einen Zeitschlüssel haben. Entscheiden Sie sich für eine GMT / EST-Zeit und verwenden Sie diese in der Faktentabelle. Wenn Sie Berichte basierend auf der anderen Zeitzone ausführen müssen, konvertieren Sie sie einfach in Ihre Anwendung oder Abfrage.
quelle
Geography
Tabelle aufnehmen, aber wenn keines zutrifft, können Sie es als Attribut Ihrer Faktentabelle hinzufügen.Nur eine Fortsetzung unserer Entscheidung, unser DataWarehouse so zu implementieren, dass es mehrere Zeitzonen unterstützt und so effizient wie möglich ist: Wir haben eine Tabelle mit Zeitzonen (ID, Name usw.) sowie eine "Zeitzone" erstellt Brücke "Tabelle, die so aussieht:
Auf diese Weise können wir unsere normalen Datums- und Zeitdimensionstabellen klein halten. Alle unsere Fakten sind mit den UTC-Datums- / Zeitschlüsseln verknüpft. Wenn wir nach einer anderen Zeitzone berichten / gruppieren müssen, müssen wir uns nur über die Zeitzonenbrückentabelle verbinden und verknüpfen Sie die lokalen Datums- / Zeitschlüssel mit den Datums- und Zeitdimensionstabellen. Wir füllen unsere Zeitzonenbrückentabelle mit C # -Code, der von SSIS aufgerufen wird, da dies viel weniger kompliziert war als das direkte Ausführen von TZ-Inhalten von SqlServer.
quelle
Ich habe die Idee eines Lagers mit einer kombinierten
DateTime
Dimension abgelehnt gesehen, aber ich habe keinen wirklich klaren Grund dafür gesehen. Hier ist die Faktentabelle, die ich gerade erstelle:Die
DateTime
Felder werden mit einer DateTime-Tabelle verknüpft:Dies entspricht einer Auflösung von einer halben Stunde. Es gibt also 48 Datensätze pro Tag, 350.400 in 20 Jahren - ziemlich überschaubar.
Datum / Uhrzeit des Ereignisses werden beim Speichern in UTC übersetzt, aber mit dem
LocalTimeZoneSK
Feld und einer Brückentabelle können wir uns leicht verbinden, um die Ortszeit zu erhalten:Um Transaktionen heute zu erstellen, UTC-Zeit:
So erstellen Sie Transaktionen heute in Ortszeit für die Transaktion:
Sie könnten versucht sein, die Dinge zu vereinfachen, indem Sie die
TimeZoneSK
durch einenREAL
Versatz ersetzen (z. B. -5,0 für die zentrale Sommerzeit in den USA). Dies wird jedoch nicht möglich sein, wenn sich Datum / Uhrzeit für einen Faktendatensatz in der Sommerzeit befinden und andere nicht.Wenn die Ereignisse für einen Faktendatensatz in verschiedenen Zeitzonen auftreten können, z. B. in einer Sendung oder einem Flug, benötigen Sie für jedes Datum ein Zeitzonenfeld und bis zu fünf Byte pro Datum.
quelle
SMALLINT
s zu einer Milliarden-Zeilen-Faktentabelle kostet jedoch 12 GB plus Overhead, und jetzt sprechen Sie von echtem Geld. Für Daten, bei denen nur das Datum gespeichert werden muss, können Sie sie natürlich auf den Datensatz "12:00 Uhr" für das entsprechende Datum verweisen.