Christina Bräutigam

1. Vorstellung des Unary Operator Bugs

Es existiert ein Bug im Zusammenhang mit dem Unary Operator bei M2M Beziehungen und Parent Child. Allerdings greift der Bug nur bei „-“ als Unary Operator. Wird bei einem Knoten als Unary Operator „-“ verwendet, so funktioniert die Hochaggregation zum Eltern Knoten noch korrekt, aber auf dem „Großeltern“ Knoten wird der Wert addiert statt subtrahiert.

2. Lösungsansatz mittels MDX Query zum Identifizieren der kritischen Stellen

Als Lösungsansatz bietet es sich an, als erstes die kritischen Stellen (Knoten) zu identifizieren, und dann im zweiten Schritt die korrekte Hoch-Aggregation im Cube Skript abzubilden.

Die kritischen Knoten werden mittels eine Kontrollabfrage ermittelt, bei der man zum einem die Hochaggregation selbst nachbaut und zum anderen mit den auf den Knoten im Cube stehenden Werten vergleicht. Um die Hochaggregation nachzubauen, benutzt man zum einen die „DataMember“ Funktion und zum anderen die „UNARY_OPERATOR“ member property. Mit der DataMember Funktion kann man den Wert des „DataMember“ abrufen. Zur Erläuterung: Jedes „Nicht-Blatt“ in einer Parent Child Hierarchy besitzt ein system generiertes DataMember. Auf diesem DataMember stehen die Werte aus der jeweiligen Faktentabelle des „aktuellen“ Measures. Die „UNARY_OPERATOR“ member property liefert den Unary Operator eines Members zurück. Mittels Unary Operators lassen sich Aggregationen innerhalb einer Hierarchie kontrollieren. Die nachstehenden Unary Operators existieren (Quelle: https://msdn.microsoft.com/en-us/library/ms175417.aspx):

Unary operator Description
+ The value of the member is added to the aggregate value of the sibling members that occur before the member. This operator is the default operator if no unary operator column is defined for an attribute.
The value of the member is subtracted from the aggregate value of the sibling members that occur before the member.
* The value of the member is multiplied by the aggregate value of the sibling members that occur before the member.
/ The value of the member is divided by the aggregate value of the sibling members that occur before the member.
~ The value of the member is ignored.