Kardinalität reduzieren, um die Leistung zu verbessern
Selbst bei optimiertem DAX kann ein Semantikmodell langsam sein, wenn es zu viele Daten enthält. Die Kardinalität (die Anzahl eindeutiger Werte in einer Spalte) wirkt sich direkt auf die Modellgröße, den Arbeitsspeicherverbrauch und die Abfrageleistung aus. Die Verringerung der Kardinalität ist eine der effektivsten Methoden, um ein Modell schneller zu machen.
Verstehen, wie kardinalität sich auf die Leistung auswirkt
Semantische Modelle verwenden ein In-Memory-Komprimierungsmodul namens "VertiPaq", das die Datenspalte nach Spalte komprimiert. Spalten mit weniger eindeutigen Werten komprimieren besser und abfragen schneller. Eine Spalte mit 10 eindeutigen Werten komprimiert wesentlich effizienter als eine Spalte mit 10 Millionen eindeutigen Werten.
Spalten mit hoher Kardinalität verursachen zwei Probleme:
- Größeres Modell. Mehr eindeutige Werte erfordern mehr Speicher, wodurch die Speicherauslastung erhöht und die Datenaktualisierung verlangsamt werden kann.
- Langsamere Abfragen. Die Engine muss beim Filtern, Gruppieren oder Aggregieren mehr eindeutige Werte verarbeiten. Spalten mit hoher Kardinalität in Beziehungen erhöhen auch die Kosten für das Verbinden von Tabellen.
Denken Sie daran: Wenn Ihr Modell ein Wörterbuch ist, ist Kardinalität die Anzahl eindeutiger Wörter. Ein Wörterbuch mit einer Million Einträgen benötigt länger für die Suche als eines mit tausend Einträgen.
Identifizieren von Spalten mit hoher Kardinalität
Nicht alle Spalten tragen gleichmäßig zur Modellgröße bei. Um die größten Täter zu finden, suchen Sie nach Spalten mit diesen Merkmalen:
- GUIDs oder Ersatzschlüssel, die nicht in Beziehungen oder Berichten verwendet werden. Diese werden häufig standardmäßig geladen, dienen jedoch keinem Zweck im Modell.
- Zeitstempel mit hoher Genauigkeit. Eine Datetime-Spalte, in der Werte in Millisekunden gespeichert werden, weist weitaus eindeutigere Werte auf als eine Datumsspalte, in der Werte auf Tagesebene gespeichert werden.
- Freitext- oder Beschreibungsspalten. Textspalten mit eindeutigen Werten pro Zeile (z. B. Transaktionsbeschreibungen oder Kommentare) werden schlecht komprimiert.
- Eindeutige Bezeichner wie Bestellnummern, Rechnungsnummern oder Sitzungs-IDs, die für die Berichterstellung nicht benötigt werden.
In Power BI Desktop können Sie Spaltenstatistiken in der Modellansicht untersuchen. Die Datenvorschau in Power Query zeigt auch während der Transformation unterschiedliche Wertanzahlen an.
Anwenden von Reduktionsstrategien
Nachdem Sie Spalten mit hoher Kardinalität identifiziert haben, wenden Sie eine oder mehrere dieser Strategien an:
Entfernen Sie nicht verwendete Spalten. Wenn eine Spalte nicht in Beziehungen, Kennzahlen, Visualisierungen oder Sicherheitsrollen verwendet wird, sollte sie nicht importiert werden. Dies wird manchmal als vertikale Filterung bezeichnet. Überprüfen Sie Ihr Modell regelmäßig, um sicherzustellen, dass jede Spalte einen Zweck erfüllt.
Reduzieren Sie die Zeitpräzision. Wenn das Reporting nur eine tägliche Granularität erfordert, verkürzen Sie die DateTime-Spalten in Power Query vor dem Laden auf das Datum. Der Wechsel von DateTime (Millionen eindeutiger Werte) zu Date (einige Tausend) reduziert die Kardinalität drastisch.
Kontinuierliche Werte in Buckets speichern. Gruppieren Sie fortlaufende numerische Werte in Bereiche. Erstellen Sie z. B. anstelle exakter Altersstufen (0 bis 120) Altersbänder wie "18-25", "26-35" und "36-45". Dadurch werden eindeutige Werte reduziert, während der analytische Wert beibehalten wird.
Entfernen Sie unnötige Zeilen. Filtern Sie verlaufsgeschichtliche Daten, die für die Berichterstellung nicht mehr benötigt werden. Wenn Benutzer nur die letzten zwei Jahre analysieren, laden Sie keine fünf Jahre Daten. Dies ist die horizontale Filterung und reduziert sowohl die Kardinalität als auch die Gesamtanzahl der Zeilen.
Optimieren sie Spaltendatentypen. Das VertiPaq-Modul verwendet die Wertkodierung für numerische Daten (hocheffizient) und Hashcodierung für Text (weniger effizient). Wenn eine Spalte wie die Bestellnummer als Text mit einem Präfix (z. B. "SO123456") gespeichert wird, sollten Sie das Präfix entfernen und als Zahl speichern.
Tipp
Bevorzugen Sie das Erstellen berechneter Spalten in Power Query gegenüber berechneten DAX-Spalten. Power Query Spalten werden beim Laden von Daten verarbeitet und profitieren von einer besseren VertiPaq-Komprimierung. DAX-berechnete Spalten werden nach dem Laden evaluiert und in der Regel weniger effizient komprimiert.
Bewertung von Kompromissen
Die Kardinalitätsreduktion beinhaltet immer einen Kompromiss zwischen Granularität und Leistung. Das Aufrunden von Zeitstempeln auf die Tagesebene bedeutet, dass Sie keine Intra-Day-Muster analysieren können. Die Zusammenfassung von Altersangaben bedeutet, dass Sie nicht nach dem genauen Alter filtern können. Diese Entscheidungen sollten durch geschäftliche Anforderungen gesteuert werden.
Stellen Sie diese Fragen, bevor Sie die Kardinalität reduzieren:
- Hängt ein Bericht, ein Slicer oder eine Messung von dieser Detailstufe ab?
- Können Benutzer die benötigten Details von einer Drillthroughseite abrufen, die mit einer DirectQuery-Tabelle verbunden ist?
- Wird die Spalte in Sicherheitsregeln auf Zeilenebene verwendet?
Wenn das Unternehmen sowohl den Zugriff auf Zusammenfassungsebene als auch den Zugriff auf Detailebene erfordert, kann ein zusammengesetzter Modellansatz hilfreich sein. Verwenden Sie den Importspeichermodus für zusammengefasste Daten (schnelle Abfragen) und DirectQuery für Drillthrough auf Detailebene (On-Demand-Zugriff auf die Quelle).