Eine wesentliche Anforderung an Business-Intelligence-Lösungen ist die Möglichkeit, Daten aus der dem System zugrundeliegenden OLAP-Datenbank nicht nur zum Zwecke der Analyse und des Standardreportings zu lesen, sondern im Zuge von Planungs-, Forecasting-, Hochrechnungs- und Simulationsprozessen auch schreiben zu können. Microsoft Analysis Services unterstützt diese Funktionalität bereits seit Release 2000 und hat die entsprechenden Features mit den neueren Versionen 2005 und 2008 kontinuierlich erweitert.
Hierbei verfolgt Microsoft einen grundsätzlich guten Ansatz konsequent: Beim (Über-)Schreiben von Daten werden existierende Werte niemals verändert, sondern stets die Differenz zwischen Eingabe und gegebenenfalls bereits existierenden Zellwerten bestimmt und dann nur dieses Delta in einer relationalen Rückschreibetabelle (Writeback Table) gespeichert – und zwar unter Vermerkung eines Zeitstempels und des angemeldeten Domänenbenutzernamen. So lassen sich originale Werte und alle nachfolgenden Änderungen jederzeit zurückverfolgen und bei Bedarf auch selektiv rückgängig machen. Der Writeback lässt sich in BIDS mit wenigen Mausklicks auf der Ebene der MeasureGroup aktivieren; technisch entsteht dadurch eine zusätzliche Partition, für die seit Analysis Services 2008 sogar zwischen ROLAP- und MOLAP-Speicherformat gewählt werden kann.
Dieser generell äußerst begrüßenswerte Grundansatz basiert jedoch auf einer entscheidenden Prämisse: der Additivität der zugrundeliegenden Analysewerte. Handelt es sich bei den zu planenden Zahlen also um Flussgrößen wie beispielsweise Umsätze, Kosten oder Absätze, funktioniert das Konzept tadellos. Wenn jedoch nicht- oder semiadditive Werte wie Preise, Lagerbestände oder Personalzahlen erfasst werden sollen, entsteht eine scheinbar unlösbare Situation, zumal die Anforderung an das Datenmodell seitens Microsoft aus dem Leser nun sicher nachvollziehbaren Gründen ja sogar so weit reicht, dass keine einzige Measure der betroffenen MeasureGroup eine vom Default “Sum” abweichende Aggregationsvorschrift besitzen darf.
Doch mit einem kleinen Kunstgriff lässt sich das Dilemma auflösen: Wenn die nichtadditiven Werte in einer Hilfs-MeasureGroup als Measures mit Sum-Aggregator eingegeben und anschließend per MDX-Formel in die eigentliche MeasureGroup übernommen werden, wo sie wie gewünscht mit LastNonEmpty aggregiert werden, genießt man die oben beschriebenen Vorteile des Microsoft-Writeback-Paradigmas uneingeschränkt und erzielt das gewünschte Ergebnis.
Als Beispiel soll ein Szenario dienen, in dem auf der Basis von Artikelpreisen, die in unregelmäßigen Abständen aktualisiert werden (=Bestandscharakter), durch Multiplikation mit Planmengen (Flussgröße, also additiv) ein Planumsatz pro Periode und Kunde errechnet wird.
Hierzu wird ein Cube erstellt, der zwei gleichdimensionale und -granulare MeasureGroups enthält. In der ersten MeasureGroup “Planeingabe” werden Menge, Preis (Eingabegröße) und Umsatz gespeichert; alle drei Measures sind additiv und haben den Defaultaggregator Sum. Für diese MeasureGroup wird der Writeback aktiviert. In der zweiten MeasureGroup “Preis Fortschreibung” existiert eine einzige Measure “Preis Fortschreibung” mit Aggregator LastNonEmpty.
Zur korrekten Berechnung des Umsatzes mit der trivialen Basisformel “Preis * Absatz” muss die OLAP-übliche Vorgehensweise, bei der zuerst über alle Dimensionen aggregiert und erst anschließend gegebenenfalls Kalkulationsregeln berücksichtigt werden, umgekehrt werden. Hierzu dient in Analysis Services der Scope-Befehl, mit dem die gewünschte Berechnungsebene detaillierter als bei den meisten Wettbewerbsprodukten definiert werden kann.
Der erste Scope-Befehl sorgt für die Fortschreibung des Preises durch einfache Vorgängersuche innerhalb derselben Measure mittels Rekursion:
Eine serverseitige Kumulationsregel innerhalb der dazu definierten separaten Dimension sorgt für mehr Komfort bei der Anzeige:
Der zweite Scope-Befehl führt die eigentliche Multiplikation auf den gewünschten Ebenen durch:
Letztlich wird der zuvor ermittelte Umsatz auf allen höheren Zeitebenen (im Beispiel mit dem AllMember “Ewigkeit” lediglich eine) durch einfaches “Aggregate” der Werte der darunterliegenden Ebene aggregiert.
Im Ergebnis ergibt sich folgendes Bild:
(Ohne Wertfortschreibung ergäbe sich ein “ewiger Umsatz” von 300 * 55 = 16.500.)
Als weiteres Komfortelement dient die Wertweitergabe der DeltaMaster-Planungsfunktionen: Zu Eingabe und Anzeige dient die nicht zum Writeback freigegebene Measure “Preis Fortschreibung”, die der einfacheren Lesbarkeit für den Anwender halber im Frontend in “Preis” umbenannt wurde. Von hier aus erfolgt eine Wertweitergabe auf die Eingabemeasure “Preis Eingabe”:
Das hier beschriebene Beispielmodell stellen wir auf Anfrage gerne bereit.