Wie erstelle ich eine Geschichte Faktentabelle?

9

Ich habe einige Entitäten in meinem Data Warehouse:

  1. Person - mit den Attributen personId, dateFrom, dateTo und anderen können diese geändert werden, z. Nachname, Geburtsdatum und so weiter - langsam wechselnde Dimension

  2. Dokument - Dokument-ID, Nummer, Typ

  3. Adresse - AdresseId, Stadt, Straße, Haus, Wohnung

Die Beziehungen zwischen (Person und Dokument) sind Eins-zu-Viele und (Person und Adresse) ist Viele-zu-Viele.

Mein Ziel ist es, eine Geschichte Faktentabelle zu erstellen, die uns folgende Fragen beantworten kann:

  1. Welche Personen mit welchen Dokumenten lebten zu einem definierten Datum an einer definierten Adresse?

2, Welche Geschichte der Bewohner hat die definierte Adresse in einem definierten Zeitintervall?

Dies ist nicht nur für das, was DW entworfen wurde, aber ich denke, es ist das Schwerste im DW-Design.

Beispiel: Miss Brown mit personId = 1, Dokumente mit documentId = 1 und documentId = 2 wurden seit 01/01/2005 bis 02/02/2010 an Adresse mit addressId = 1 gelebt und dann nach addressId = 2 verschoben wo seit 02.03.2010 bis zum aktuellen Datum gelebt wurde (NULL?). Seit dem 05. 04. 2006 hat sie ihren Nachnamen in Frau Green geändert und ihr erstes Dokument mit Dokument ID = 1 bis Dokument ID = 3 seit 06/07/2007. Herr Black mit personId = 2, documentId = 4 wurde seit 02/03/2010 bei addressId = 1 bis zum aktuellen Datum gelebt.

Das erwartete Ergebnis in unserer Abfrage für Frage 2, wo addressId = 1 ist und das Zeitintervall seit 01/01/2000 bis jetzt ist, muss wie folgt aussehen:

Zeilen:

%Vor%

Ich hatte eine Idee, eine Faktentabelle mit zusammengesetztem Schlüssel (personId, documentId, addressId, dateFrom) zu erstellen, aber ich habe keine Ahnung, wie ich diese Tabelle laden und dann das erwartete Ergebnis mit dieser Struktur erhalten soll.

Ich werde mich für jede Hilfe freuen!

    
Argnist 21.05.2011, 07:54
quelle

1 Antwort

3

Interessante Frage @Argnist!

Um eine gemeinsame Sprache für mein Beispiel zu erstellen, möchten Sie ein

  • DimPerson (PK = kcPerson, suggrate Schlüssel für eindeutige Personen = kPerson, geben Sie 2 Dim)
  • DimDocument (PK = kcDocument, Schlüssel für eindeutige Dokumente vorschlagen = kDocument, Typ 2 dim)
  • DimAddress (PK = kcAddress, suggieren Schlüssel für eindeutige Adressen = kAddress, geben Sie 2 Dim)

Ein Kollege hat ein kurzes Blog über die Verwendung von zwei Ersatzschlüsseln geschrieben, um die obigen Dims zu erklären. Zwei Ersatzschlüssel in Dimensionen verwenden ".

Ich würde immer hinzufügen DimDate mit PK in der Form yyyymmdd zu jedem Data Warehouse mit zusätzlichen Attributspalten.

Dann hätten Sie Ihre Faktentabelle als

  • FactHistory (FKs = kcPerson, kPerson, kcDokument, kDocument, kcPerson, kPerson, kDate) plus irgendwelche zusätzlichen Maßnahmen.

Wenn Sie sich dann den "kc" -Einträgen anschließen, können Sie die aktuellen Informationen zu Person / Dokument / Adresse anzeigen. Wenn Sie den "k" -Symbolen beitreten, können Sie die historischen Dimensionsdaten für Person / Dokument / Adresse anzeigen.

Der Nachteil davon ist, dass diese Faktentabelle eine Zeile für jede Kombination aus Person / Dokument / Adresse / Datum benötigt. Aber es ist wirklich eine sehr enge Tabelle, da die Tabelle nur eine Anzahl von Fremdschlüsseln hat.

Der Vorteil davon ist, dass es sehr einfach ist, nach den Fragen zu fragen, die Sie gestellt haben.

Alternativ könnten Sie Ihre Faktentabelle als

haben
  • FactHistory (FKs = kcPerson, kPerson, kcDokument, kDocument, kcPerson, kPerson, kDateFrom, kDateTo) plus irgendwelche zusätzlichen Maßnahmen.

Dies ist offensichtlich viel kompakter, aber die Abfrage wird komplexer. Sie könnten auch einen Blick auf die Faktentabelle werfen, um die Abfrage zu erleichtern!

Die Wahl der Lösung hängt von der Häufigkeit der Änderung der Daten ab. Ich vermute, dass es sich nicht so schnell ändern wird, also könnte das alternative Design der Faktentabelle besser sein.

Ich hoffe, das hilft.

    
Marcus D 27.05.2011, 15:23
quelle