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:
Diese 3 Tabellen importieren wir nach PowerPivot:
Leser Tabelle:
Bücher Tabelle:
Verleih Tabelle:
Wir fügen die folgenden Relationen hinzu:
Die Auswertung nach Leser und Gebühr zeigt, dass wir hier noch kein richtiges Ergebnis haben:
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:
Wir erhalten folgendes Ergebnis:
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:
Das nicht spannende Teil-Ergebnis liefert:
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:
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:
Die Gesamtformel filtert nun die Teilgebühr in jeder Zeile, in der die Anzahl der Bücher > 0 ist:
Eine anschaulich grafische Erklärung der n:m Funktionsweise liefert der folgende Beitrag:
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