Nach dem, was ich gelesen habe, liegt die empfohlene Granularität für eine Faktentabelle, die auf einer Auftragskopf- / Werbebuchungsstruktur basiert, auf Werbebuchungsebene. Dabei werden alle additiven Werte, die nur für den Auftragskopf gelten, für jede Position wiederholt:
Entwerfen von Dimensionsmodellen für Eltern-Kind-Anwendungen
Grundlagen der Dimensionsmodellierung
Unten (vom zweiten Link) ist ein Beispiel für ein solches Design:
In diesem Beispiel wird der Versandbetrag, der für die gesamte Bestellung gilt, für jede Werbebuchung wiederholt.
Wenn Sie jedoch alle Versandbeträge unter einem bestimmten Kunden rollen würden, hätten Sie den doppelten tatsächlichen Wert. Wie vermeiden Sie diese Verdoppelung des Wertes?
- Wird die Versandmenge für diese Tabelle als nicht additive Tatsache betrachtet?
- Ist eine spezielle Behandlung erforderlich?
- Gibt es einen Grund, nicht einfach zwei (nahezu identische) Faktentabellen zu haben? Eine für Bestellungen und eine für Bestellpositionen?
Sie können dies tun, indem Sie zuerst nach der Bestellnummer und dann nach dem Kundenschlüssel gruppieren. Hier ist ein Beispiel:
quelle
Sie können die Versandkosten gleichmäßig auf die Bestellpositionen verteilen. Auf diese Weise können Sie vom Kunden zusammenrollen.
quelle
Wenn möglich, würde ich die Versandkosten den Werbebuchungen zuordnen. Auf diese Weise können Sie die tatsächlichen Kosten und den Gewinn für einzelne Produkte so genau wie möglich bewerten.
Wenn dies nicht möglich ist, stimme ich @ Jamies Idee zu,
Shipping
eine spezielle Art von "Produkt" herzustellen.Dies wird von Kimball im Data Warehouse Toolkit (dritte Ausgabe), Seite 185, erörtert, obwohl er eine etwas andere Empfehlung abgibt:
quelle