2009-05-19 12 views
4

Sind gerade in Datawarehousing und brauchen Ihre Hilfe, um eine Verwirrung zu klären. Sagen wir, ich habe Mitarbeiter Dimension und Abteilung Dimension. Wenn ich einen Bericht habe, in dem ich Felder aus dimEmployee (Name, Gehalt, Position) und Felder aus der Abteilung (AbtNr, Beschreibung, Manager) auflisten muss, wie mache ich das? Erstelle ich eine Faktentabelle (faktenlos), die eine Verbindungstabelle zwischen diesen beiden Dimensionen darstellt? Oder muss ich diese beiden Tabellen anders entwerfen. Jeder redet über Fakten und Dimensionen, aber denken wir überhaupt darüber nach, Dimensionstabellen zu verknüpfen?Datawarehouse - So verknüpfen Sie Dimensionen

Vielen Dank für Ihre Einblicke.

RK

Antwort

0

Wenn Sie sprechen über Dimension und Faktentabellen Sie in der Regel auf aggregierten Daten beziehen. Sie können einen Bericht verfassen, der über die Anzahl der Mitarbeiter pro Abteilung berichtet.

Es klingt wie Sie mit Datenlisten zu tun haben. Dies kann besser mit Direct SQL erreicht werden. so etwas wie

SELECT person.Name, person.Salary, Person.Position, 
Department.DeptNo, Department.Desc, Department.Manager 
From person 
    join Department on person.DeptId = Department.Id 
3

Es müsste eine Beziehung zwischen Mitarbeiter und Abteilung sein. Dies wird in der Regel durch Hinzufügen einer Spalte "DepartmentId" zur Employee-Tabelle erreicht.

0

Typische Dimensionen für jedes Problem gehören Zeit (immer), Geographie (z. B. Abteilung, Gebiet, Staat, etc.), usw. In Ihrem Fall klingt es wie Gehaltsspannen in einer Unternehmensleiter, Positionen, etc. sein könnte sachdienlich.

Faktentabellen enthalten normalerweise Dinge, die additiv sind (z. B. die Anzahl der Personen in einem bestimmten Gehaltsbereich, Position usw.).

Ich bin nicht sicher, dass Mitarbeiter als eine Dimension qualifizieren würde; klingt eher nach einer Tatsache für mich.

1

Vielen Dank für Ihre Antworten. Also, wenn es eine Anforderung ist insgesamt Mitarbeiter in einer Abteilung in einem bestimmten Gehaltsbereich und auch eine Anforderung zur Liste Mitarbeiter in einer Abteilung zu finden. Das Design wie diese

dimEmployee
EmpID
Dept aussehen
Namen
etc ...

dimDept
DeptId
Desc
-Manager
etc ....

fctEmpDept
EmpID
DeptId
Gehalt

Wenn ich über Data-Warehouse zu lesen, sehe ich nur Dimensionen und Faktentabellen. Ich war wirklich verwirrt darüber, wie die Tabellen strukturiert werden, wenn es Anforderungen gibt, Listen für normale Berichtszwecke zu zeigen. Offensichtlich könnten einige Dimensionen mit Fremdschlüsseln verknüpft sein.

+0

In Ihrem Design ist es also möglich, dass ein Mitarbeiter mehreren Abteilungen angehört? Oder müssen Sie Mitarbeiter im Laufe der Zeit von einer Abteilung zur anderen verfolgen (eine SCD)? Wenn nicht, ist Andomars einfachere Lösung wahrscheinlich genau das, was Sie brauchen. –

1

Wenn Sie Ihre Dimensionen voneinander unabhängig halten, keine Abteilungsreferenz in der Personendimension, keine Personenreferenz in der Abteilungsdimension, kann eine Zuweisungsfaktentabelle als Brücke zwischen den beiden fungieren.

Zum Beispiel



Person Table 
------------ 

PersonID 
Forename 
Surname 
EffectiveFromDate 
EffectiveToDate 


Department Table 
---------------- 

DepartmentID 
DepartmentName 

etc 


AssignmentFact Table 
-------------------- 

AssignmentID (primary key) 
PersonID (foreign key to person table) 
ManagerID (foreign key to person table) 
DepartmentID (foreign key to department table) 
Salary 
CostCentre 
EffectiveFromDate 
EffectiveToDate. 

So ein Wechsel zu einer Person Zuordnung wie eine Änderung der Linienmanager oder eine Promotion erfordert keine Änderung der Dimensionen, sondern nur auf die Tatsache Tabelle, die eine schöne einfache historische Aufzeichnung bieten wird von Änderungen. Wenn Sie mehrere Faktentabellen haben, die diese Dimensionen teilen, zahlen Sie Dividenden. Versuchen Sie eine einfache Implementierung von beiden und geben Sie ihnen einen Versuch und ich bin sicher, dass Sie finden, dass es natürlicher ist.

0

Option A: Wenn jeder Mitarbeiter zu einer einzigen Abteilung gehören kann. Ich würde die AbteilungsID zur Faktentabelle hinzufügen.

Option B: Wenn ein Mitarbeiter zu mehreren Abteilungen gehören kann, würde ich mit einer dritten Alternative, Setup-Metrik-Tabellen (oder aggregierten Faktentabellen) gehen. Sie würden dann die Zusammenfassung Ihrer Mitarbeiter nach Abteilung vornehmen und die aggregierte Nummer in dieser neuen Tabelle speichern.

Option C: Sie könnten die Mitarbeiter-ID der Mitarbeiter-Tabelle hinzufügen, und das würde die Arbeit erledigen, aber Sie würden dann eine Hierarchie einrichten. Sie können dies tun, aber Ihre Joins werden schwieriger und weniger effizient, wenn Ihr Dataset wächst.

Ich würde mit einer der ersten 2 Optionen gehen, abhängig von Ihrer Mitarbeiter/Abteilung Beziehung.

Ich gebe zu, dass es andere Lösungen gibt, aber das wäre Ihre beste Wette.

+0

Für die Aufzeichnung ist Option C als "Snowflaking" bekannt, weil die Punkte des Sternschemas, wenn sie zu weit weggenommen werden, eigene Punkte haben, die optisch einer Schneeflocke ähneln. –

Verwandte Themen