Neulich im Projekt gab es die Anforderung, in einem SSAS Cube eine Many-To-Many Beziehung abzubilden. In diesem Artikel soll es nicht darum gehen, wie man diese Anforderung implementieren kann. Dafür gibt es einen sehr guten Artikel von Marc Russo:
http://www.sqlbi.eu/Portals/0/Downloads/M2M%20Revolution%201.0.93.pdf
Ich möchte hier auf ein Phänomen aufmerksam machen, das im Zusammenhang mit Many-To-Many Beziehungen zu beachten ist. Hat man eine solche Beziehung für seine Faktentabelle geschaffen und schaut sich die Zahlen im Cube an, so können die Zahlen für Verwirrung sorgen, insbesondere die Summenbildung scheint nicht nachvollziehbar zu sein. Hier hilft ein Eintrag, den ich auf sqlserveranalysisservices.com gefunden habe:
http://technet.microsoft.com/en-us/library/ms345139(SQL.90).aspx [UPDATE]
Dort steht der folgende wichtige Satz:
Except for the all member, the value for each member in a many-to-many dimension is the aggregate of the distinct set of granularity attribute members that exist with the many-to-many dimension member across the intermediate measure group.
Was bedeutet das? Das Beispiel in diesem Eintrag ist sehr gut verständlich. Es geht um Konten, die zu mehreren Personen gehören können. Gleichzeitig kann eine Person mehrere Konten besitzen; eine typische Many-To-Many Beziehung. Nehmen wir an, wir haben die folgende Siutation. Es gibt zwei Konten und drei Kunden. Das erste Konto gehört Jane und John zusammen, das zweite gehört Henry. Jane und John haben 100 $ auf ihr Konto eingezahlt, Henry hat 150 $ auf sein Konto eingezahlt. So weit so gut.
Da wir eine Many-To-Many Beziehung zwischen den Kunden und den Konten haben, würde eine Auflistung der Transaktionen nach Kunden wie folgt aussehen:
- John: $ 100
- Jane: $100
- Henry: $150
The amount for the all member of a Many-to-Many dimension is the aggregate of all facts.