PowerPivot Tuning Tipp Nr. 4: N:M (Many-to-Many) Beziehungen vermeiden
avatar

PowerPivot enthält in der jetzigen Version keinen internen Mechanismus um n:m Beziehungen aufzulösen. Sie sollten aus Performance Gründen möglichst auf n:m Relationen verzichten. Wenn es sich nicht vermeiden lässt und eine solche Relation unbedingt benötigt wird, dann zeigt der folgende Artikel einen möglichen Weg: http://sqlblog.com/blogs/marco_russo/archive/2009/12/07/many-to-many-relationships-in-powerpivot.aspx 

Das Beispiel sei hier exemplarisch und leicht abgewandelt kurz aufgegriffen. Wir haben 3 Ausgangstabellen, davon sind 2 Dimensionstabellen (Bücher und Leser) und eine Transaktionstabelle (Verleih).

Wir haben 3 Leser, 3 Bücher und insgesamt 4 Transaktionen:

image

Diese 3 Tabellen importieren wir nach PowerPivot:

Leser Tabelle:

image

Bücher Tabelle:

image

Verleih Tabelle:

image

Wir fügen die folgenden Relationen hinzu:

image

Die Auswertung nach Leser und Gebühr zeigt, dass wir hier noch kein richtiges Ergebnis haben:

image

Es wird fälschlicherweise die Summe über alle Leser ausgegeben. Um die richtige Summe jedes einzelnen Lesers zu berechnen, muss die folgende Formel (unter Excel Pivot und nicht unter PowerPivot!) hinzugefügt werden:

image

Wir erhalten folgendes Ergebnis:

image

Nun stimmt die Berechnung. Aber wie funktioniert diese Formel? Wir dekomponieren die einzelnen Schritte. Wir holen uns mit der folgenden Formel zunächst die Gebühr je Buch:

image

Das nicht spannende Teil-Ergebnis liefert:

image

Nun müssen wir diese Werte für jede Leser /Buch Kombination filtern, um die richtigen Gebühren zu ermitteln. Dazu fügen wir in die Verleih Tabelle die folgende Formel hinzu:

image

Wir erhalten nun die Anzahl der Zeilen je Leser, was der Anzahl der Bücher entspricht. Über die in PowerPivot gebildeten Relationen bekommen wir die richtige Zuordnung:

image

Die Gesamtformel filtert nun die Teilgebühr in jeder Zeile, in der die Anzahl der Bücher > 0 ist:

image

Eine anschaulich grafische Erklärung der n:m Funktionsweise liefert der folgende Beitrag:

http://sqlblog.com/blogs/alberto_ferrari/archive/2010/10/19/powerpivot-and-many-to-many-relationships.aspx

Allerdings ist der Aufwand recht hoch und die Performance wird deutlich negativ beeinflusst. In einem solchen Szenario sind die Analysis Services eindeutig besser.

Fazit: Versuchen Sie n:m Abbildungen zu vermeiden. Wenn es sich nicht vermeiden lässt, ziehen Sie die Analysis Services in Betracht. Bedenken Sie, dass unter PowerPivot (wie hier gezeigt) ein verhältnismäßig sehr hoher Rechenaufwand nötig ist, um diese Form der Relationen korrekt aufzulösen. Ferner sind, wie hier gezeigt, Berechnungsformeln hinzuzufügen.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bereits in dieser Serie erschienen:

PowerPivot Tuning Tipp Nr. 1: Schlüsselwerte immer als Integer Wert definieren

PowerPivot Tuning Tipp Nr. 2: Nur benötigte Felder importieren

PowerPivot Tuning Tipp Nr. 3: Möglichst wenig Tabellen und Verknüpfungen

PowerPivot Tuning Tipp Nr. 4: N:M (Many-to-Many) Beziehungen vermeiden

Schreibe einen Kommentar