Langsam veränderliche Dimensionen (SCD – Slowley Changing Dimensions) werden innerhalb von Data Warehouse Lösungen eingesetzt um Änderungen in Dimensionstabellen festzustellen und/oder zu historisieren. Entsprechende Methoden werden auch beim Laden von Daten aus externen System verwendet, bei denen sich Änderungsdaten nicht auf spezielle Felder beziehen, Änderungen jedoch dokumentiert werden sollen oder auch allgemein beim inkrementellen Laden von Daten.
Die SQL Server Integration Services 2008 (ebenso die 2005er Version) bieten einen Wizard um langsam veränderliche Dimensionen zu erstellen.
Der SCD Wizard erstellt automatisch verschiedene Tasks und Update Scripts für die Änderungstypen “veränderliches Attribut”, “Verlaufsattribut”, “Festes Attribut” und “Abgeleitetes Element” und unterstützt damit Änderungen vom Typ 1 und vom Typ 2. Leider fügt die Komponente beim erneuten öffnen immer wieder die Standard Tasks und Update Scripts dem Datenfluss hinzu, wodurch ein späteres verändern unter Umständen sehr viel zusätzliche Arbeit mit sich bringt. Die beiden folgenden Bilder zeigen einen erstellten Datenfluss mit manuell veränderten Ausgängen der SCD Komponente (Bild 1) und den Datenfluss nach erneutem Aufruf der Komponente (Bild 2).
Die Komponente unterstützt nur Microsoft SQL Server und hat leider keine gute Performance. Ein Demopaket benötigt auf meinem Notebook für 121.317 Datensätze 50 Minuten.
Etwas schneller dagegen ist die von Todd McDermid entwickelte “Kimball Method SSIS Slowley Changing Dimension Component” die bei Codeplex zu finden ist und unter der MS-RL License zur Verfügung gestellt wird. Todd McDermid ist auch für die “SSIS Community Tasks and Components” Seite bei Codeplex verantwortlich.
Die Kimball SCD Komponente bietet gegenüber der Standard Microsoft SCD Komponente eine wesentlich Verbesserte Performance, die 121.317 Datensätze werden innerhalb von 27 Sekunden verarbeitet. Die Komponente erstellt keine entsprechende Tasks für die Ausgänge wie die Standard SCD Komponente, wodurch nachträgliche Veränderungen an der Komponente auch nicht den gesamten Datenfluss beeinflussen. Die eingehenden Daten werden über die Eingänge “Source System”, “Existing Dimension” und “Special Members” (optional) verbunden , wodurch die existierenden Daten nicht zwingend auf einem SQL Server gespeichert sein müssen.
Weiterhin unterstützt die Komponente, wie anhand des Namens erwartet, einige Kimball “best practices”. Sämtliche Vorteile der Komponente, wie auch eine sehr ausführliche und gute Beschreibung der Komponente, sind auf der Codeplex Seite zu finden.
Neben der Komponente für den SQL Server 2005 und 2008 gibt es auch noch einige Demo Pakete, mit denen ich auch den kleinen Performancetest auf meinem Notebook gemacht habe. Ein paar Infos zur Performance liefert Todd auf Codeplex im Artikel Performance Improvement?.