2016-05-31 5 views
0


Ist Datum/Zeit Dimension in meinem Fall empfohlen

Ich bin ein Data Warehouse entwerfen, die Anrufe und Telefondaten enthält. In meiner Faktentabelle (fact Anrufe) Ich habe mehrere DATETIME Felder wie CallStart, CallEnd, CallAnswered, CallRecordSaved, etc ... (alle von denen haben year, month, day, hour, minute, second)

Meine Frage ist, sollte ich diese Felder als DATETIME Datentyp speichern oder sollte ich sie verweisen zu einer anderen Tabelle (Datum/Zeit-Dimension) unter Berücksichtigung, dass ich plane, einen Würfel aus diesem DW zu generieren und die Zeitdifferenz zwischen einigen dieser DateTime-Werte zu berechnen.

Was denkst du ??

+2

Wenn Sie den Unterschied zwischen zwei Werten berechnen möchten, würde ich empfehlen, sie mit den zugrunde liegenden Datentypen zu speichern. Dimensionstabellen für Unterschiede verwenden zu müssen, ist umständlich. –

+0

@GordonLinoff Ich stimme zu, aber ich muss fragen, ob die Analyse ohne Datum/Zeit-Dimension viel schwerer wäre (Beispiel: Anrufe bekommen, nach Monat, Tag usw.). – Fourat

+0

Stimmen Sie mit Gordon und Fourat überein. Ich hätte CallStart als Datetime und dann Duration int als Sekunden. Alle Vorteile von datetime ohne die Dauer für jede Aggregationsfunktion zu berechnen –

Antwort

0

Was ich in der Vergangenheit getan habe, ist eine Datum/Zeit-Dimension für die wichtigsten Daten und dann eine andere Dimension (sagen wir "Call" in Ihrem Fall), die eine ganze Menge von Daten speichert könnte an einem Ort nützlich sein. Diese Dimension muss nicht alle Spalten der Datumstabelle enthalten und enthält normalerweise nur Datums-/Uhrzeitfelder für diese zusätzlichen Eigenschaften.

Dies gibt Ihnen einige der besten von beiden Welten, obwohl es nicht für jeden Fall geeignet ist - es hat den Vorteil, diese Dimension Felder zurück in die Tatsache als Schlüssel für die Datum/Uhrzeit-Tabelle in einem zu ziehen wenn es sich als notwendig herausstellt, ist es in dieser Hinsicht irgendwie zukunftsfähig.

1

Ich mag die früheren Kommentare und stimme zu, dass Sie nur eine vollständige Dimension in einem Feld tun müssen - callStart. Aber welche Anrufvolumen betrachten Sie? Durchschnittlich 1 Anruf pro Minute, 10 pro Minute usw. Wie hoch sind Ihre Spitzen? Wenn die Anrufrate reibungslos variiert, können Sie Ihre Zeitgranularität erhöhen. Benötigen Sie Datum und Uhrzeit in derselben Dimension? Könnten Sie Zeit-Buckets und das Datum als separate Dimensionen haben? Ähnlich mit der Dauer. Halte es als Dauer und als Bucket-Wert. Sie haben das Datum bereits ab Anrufbeginn. bearbeiten Um auf die Frage zurückzukommen. Ich würde die Datetime für jeden speichern, aber ich würde nur den Anfang mit einer Dimension verknüpfen. Der Rest wäre für die Anzeige, aber nicht für die Navigation verfügbar.

+0

Ich muss die Datetime-Werte speichern (für Verlaufszwecke), also mache ich keine Berechnungen in der ETL. Mittlerweile gefällt mir die Idee, den CallStart auf eine Datums-/Uhrzeitdimension und die anderen Felder als Datetime in einer separaten Dimension zu referenzieren. Außerdem, jetzt bekomme ich 100+ Anrufe pro Minute (Durchschnitt) und wächst – Fourat

Verwandte Themen