Slowly Changing Dimensions (SCD) sind ein gängiges Konzept im Bereich der Datenmodellierung, insbesondere in Data Warehouses und Business-Intelligence-Systemen. Sie treten auf, wenn sich die Werte in Dimensionstabellen im Laufe der Zeit ändern, und es notwendig wird, diese Änderungen nachzuvollziehen, um historische Analysen durchzuführen. In diesem Blogartikel zeige ich, wie man SCDs in Power BI implementiert, indem man Stammdaten mit Bewegungsdaten verknüpft. Insbesondere gehe ich auf die Vor- und Nachteile der Verwendung von DAX-basierten berechneten Spalten ein.
Herausforderung: Verknüpfung von Bewegungsdaten mit sich ändernden Stammdaten
Eine häufige Herausforderung bei der Arbeit mit SCDs ist, dass eindeutige Schlüssel, die normalerweise verwendet werden, um Tabellen miteinander zu verknüpfen, nicht mehr eindeutig sind. Dies ist beispielsweise der Fall, wenn eine Filiale ihre Verkaufsfläche erweitert. Stellen Sie sich vor, eine Filiale (Store) vergrößert ihre Verkaufsfläche von 500 Quadratmetern auf 900 Quadratmeter. In diesem Szenario möchten wir im Zeitverlauf analysieren, wie sich die Umsätze in Relation zur Verkaufsfläche entwickelt haben.
Der Schlüssel für diese Filiale, z.B. die StoreID, ist jedoch nicht mehr eindeutig, da er nun auf zwei unterschiedliche Flächen verweist. Eine einfache Verknüpfung der Tabellen über diese ID ist somit nicht möglich. An dieser Stelle kommt der sogenannte „Surrogate-Key“ ins Spiel, ein eindeutiger Indikator, der nur innerhalb der BI-Lösung existiert und zur Unterscheidung der verschiedenen Zeiträume genutzt wird.
Lösung mit Power Query: Aufwand und Grenzen
Lars Schreiber hat in einem früheren Artikel gezeigt, wie man diese Problematik innerhalb von Power Query lösen kann. Dabei wird ein Surrogate-Key in Power Query generiert, um die Beziehung zwischen den Tabellen zu ermöglichen. Allerdings kann diese Methode, insbesondere bei großen Datenmengen, sehr rechenintensiv und aufwendig sein, da das Query Folding nicht mehr vollständig greift und die Transformationen in Power Query komplex werden können.
Alternative Lösung: Berechnete Spalten mit DAX
In meinen Projekten habe ich daher oft einen alternativen Ansatz gewählt, bei dem ich eine berechnete Spalte mit DAX verwende. Diese Methode möchte ich im Folgenden näher erläutern.
Schritt 1: Generierung eines fortlaufenden Schlüssels
Zunächst wird innerhalb der Store-Tabelle ein fortlaufender Key generiert, der als Surrogate-Key fungiert. Dies kann einfach in Power Query durch die Erstellung eines Indexes geschehen, der jede Position durchnummeriert und somit eine eindeutige StoreID generiert, die jedoch nur in der BI-Applikation existiert.
Schritt 2: Zuordnung des Surrogate-Keys in den Bewegungsdaten
Um die Bewegungsdaten korrekt mit den Stammdaten zu verknüpfen, muss der Surrogate-Key auch in den Umsatzdaten verfügbar sein. Anstatt diesen in Power Query zu berechnen, erfolgt die Ermittlung über eine berechnete Spalte in DAX. Diese berechnete Spalte wird erstellt, nachdem die Daten aus Power Query geladen wurden und sich im Datenmodell befinden.
Schritt 3: DAX-Formel zur Ermittlung des Surrogate-Keys
Die DAX-Formel in der berechneten Spalte durchsucht die Store-Tabelle nach der maximalen StoreID, die den Kriterien für den Gültigkeitszeitraum entspricht. Dabei wird sichergestellt, dass das Umsatzdatum innerhalb des gültigen Zeitraums liegt, in dem die Quadratmeterzahl für die Filiale zutrifft. Dies ermöglicht eine exakte Zuordnung der Umsätze zu den entsprechenden Flächen im Zeitverlauf.
Vorteile der DAX-basierten Lösung
Diese Methode hat mehrere Vorteile:
Effizienz: Da die Berechnung in DAX erfolgt, werden die Transformationen erst durchgeführt, wenn die Daten bereits im Datenmodell geladen sind, was die Performance verbessert.
Flexibilität: Die DAX-Formel kann dynamisch an verschiedene Szenarien angepasst werden, ohne dass die Daten in Power Query erneut transformiert werden müssen.
Fehlerresistenz: Durch die Aggregation der Ergebnisse wird verhindert, dass Bewegungsdaten fälschlicherweise verdoppelt werden, falls es Überschneidungen im Gültigkeitszeitraum der Stammdaten gibt.
Fazit
Die Verwendung von DAX-basierten berechneten Spalten zur Implementierung von Slowly Changing Dimensions in Power BI bietet eine effiziente und flexible Alternative zu Power Query. Insbesondere bei großen Datenmengen oder komplexen Transformationsanforderungen kann dieser Ansatz deutliche Vorteile in Bezug auf Performance und Anpassungsfähigkeit bieten.
Hast du bereits Erfahrung mit Slowly Changing Dimensions in Power BI gemacht? Welche Methode bevorzugst du – die Arbeit in Power Query oder den Einsatz von DAX? Teile deine Gedanken und Erfahrungen in den Kommentaren!
Comentarios