Bereits vor kurzem wurde hier verkündet: DeltaMaster macht Schlagzeilen! Dieser Blogbeitrag hat uns gelehrt, wie man ein bestimmtes Element (z. B. Verkäufer des Tages) per MDX in der Berichtsüberschrift anzeigen lassen kann. In diesem Eintrag wird das Thema dynamische Überschriften weiter vertieft und es wird gezeigt, wie in Abhängigkeit von bestimmten Bedingungen unterschiedliche Texte in der Überschrift angezeigt werden können. Als Beispiel werden wir Textbausteine definieren, die uns je nach Datenlage unterschiedliche Texte zurückgeben.
Unsere Überschrift soll einen Bericht aus dem Chair-Modell ergänzen und uns damit vorab verraten, um wie viel Prozent der Deckungsbeitrag im Vergleich zum Vorjahr gestiegen bzw. gefallen ist. Und das Ganze sowohl kumuliert als auch nicht kumuliert.
Ein Blick auf das MDX in der fertigen Überschrift verrät: Für die Textbausteine wurden scheinbar Measures verwendet (Näheres zur Verwendung der Syntax siehe DeltaMaster deltas! 5.5.3. (4)).
Um diese dynamische Überschrift nachzubauen, beginnen wir zunächst mit der Erstellung der Measure für folgenden Textbaustein: Text DB, ∆VJ %, nicht kum. (measure254)
Das MDX-Statement enthält eine CASE-Prüfung, ob das abgefragte Tupel (DB, nicht kum., ∆VJ %) größer oder kleiner 0 ist. Abhängig davon wird der Text „gestiegen“ bzw. „gefallen“ ausgegeben:
case when ([Measures].[Deckungsbeitrag], [Kumulation].[Kumulation].[Kumulation].&[1], [Periodenansicht].[Periodenansicht].[temp 8]) > 0 then 'gestiegen' when ([Measures].[Deckungsbeitrag], [Kumulation].[Kumulation].[Kumulation].&[1], [Periodenansicht].[Periodenansicht].[temp 8]) < 0 then 'gefallen' else NULL end
[Periodenansicht].[Periodenansicht].[temp 8] steht hier für das Periodenansichtselement ∆VJ %.
Den Textbaustein Text DB, ∆VJ %, kum. (measure252) erstellen wir analog. Im MDX Statement muss lediglich das Kumulationselement [Kumulation].[Kumulation].[Kumulation].&[1] gegen [Kumulation].[Kumulation].[Kumulation].&[2] ausgetauscht werden.
Nun fehlen uns noch die Measures mit denen die jeweiligen Werte angezeigt werden sollen (measure255, measure252). Hierzu legen wir zwei einfache Filterwerte an. Jeweils für nicht kum. und kum.
Nun haben wir alle Textbausteine erstellt und können die Überschrift zusammensetzen. Wenn wir jetzt über die Sicht durch die Perioden schalten, verändert sich der Text passend zur Datenlage.
Aufmerksamen Lesern ist sicher aufgefallen, dass bei dem obigen Beispiel eine Bedingung fehlt. Wie verhält sich die Überschrift, wenn sich der Deckungsbeitrag im Vergleich zum Vorjahr nicht verändert hat? Diese Konstellation ist zwar betriebswirtschaftlich unwahrscheinlich, aber dennoch nicht auszuschließen. Außerdem sollen ja unsere Textbausteine auch für andere Kennzahlen eingesetzt werden können. Mit der nachfolgenden Ergänzung in der CASE Bedingung ist es jedoch alleine nicht getan.
case when ([Measures].[Deckungsbeitrag], [Kumulation].[Kumulation].[Kumulation].&[1], [Periodenansicht].[Periodenansicht].[temp 8]) > 0 then 'gestiegen' when ([Measures].[Deckungsbeitrag], [Kumulation].[Kumulation].[Kumulation].&[1], [Periodenansicht].[Periodenansicht].[temp 8]) < 0 then 'gefallen' when ([Measures].[Deckungsbeitrag], [Kumulation].[Kumulation].[Kumulation].&[1], [Periodenansicht].[Periodenansicht].[temp 8]) = 0 then 'unverändert' else NULL end
Belässt man es bei dieser Ergänzung, würde im Falle eines unveränderten Deckungsbeitrags leider folgender Text angezeigt werden: „Im Sep 2012 ist der nicht kumulierte DB gegenüber Vorjahr um 0% unverändert.“ Damit der Satz grammatikalisch korrekt ist, müssen das „um“ und die „0%“ wegfallen.
Damit das „um“ dynamisch verschwindet, muss eine weitere Measure definiert werden, welche dann wiederum als Textbaustein in der Überschrift verwendet wird. Das bisher statisch eingegebene „um“ wird also durch eine weitere Measure ersetzt. Das MDX-Statement für diesen benutzerdefinierten Analysewert lautet wie folgt:
case when ([Measures].[Deckungsbeitrag], [Kumulation].[Kumulation].[Kumulation].&[1], [Periodenansicht].[Periodenansicht].[temp 8]) = 0 then NULL else 'um' end
Analog muss eine weitere Measure für den kumulierten „um“-Baustein angelegt werden.
Ebenfalls müssen unsere Filterwerte erweitert werden. Nämlich um eine IIF- bzw. CASE-Bedingung. Damit soll geprüft werden, ob der Wert gleich 0 ist oder nicht. Wenn er 0 ist, soll uns die Measure nichts, also NULL, zurückgeben.
Es gibt zwei Möglichkeiten die Filtermeasure anzupassen. Entweder legt man einen neuen Analysewert an und verweist innerhalb der IIF- bzw. CASE-Bedingung auf die bestehende Measure oder man schreibt alles, also auch den Filter, in eine einzige neue Measure. Der oben erstellte Filteranalysewert wird dann nicht mehr benötigt und kann gelöscht werden. Das MDX-Statement für diese neue Measure lautet folgendermaßen:
iif( ([measures].[deckungsbeitrag], [Kumulation].[Kumulation].&[1], [Periodenansicht].[Periodenansicht].[temp 8]) = 0, NULL,([measures].[deckungsbeitrag], [Kumulation].[Kumulation].[temp], [Periodenansicht].[Periodenansicht].[temp 8]) )
Analog gilt wieder das Gleiche für die Filtermeasure mit der Fixierung auf kumulierte Werte.
Als Nächstes müssen die einzelnen Bausteine in der Überschrift wieder richtig zusammengesetzt werden, z. B. so:
Bei einem gleichbleibenden Deckungsbeitrag gegenüber Vorjahr würde das Ergebnis dann so aussehen (nach Aktualisierung per F9-Taste):