CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Dynamische Spaltendarstellung per MDX

Am Beispiel einer Planungsanwendung soll aufgezeigt werden, wie man im Präsentationmodus durch Auswahl in der Filterleiste die Anzeige von verschachtelten Berichtspalten dynamisch steuern kann.
Durch diese individuellen Steuermöglichkeiten durch den Planer kann die Anzahl an vorgefertigten Berichten reduziert werden.
Dieser Blogbeitrag erläutert Schritt für Schritt, welche Voraussetzungen hierfür im Datenmodell erfüllt sein müssen und wie man die notwendigen MDX-Objekte erstellt.

Beispielszenario

Im Rahmen einer Vertriebsplanung sollen die jeweiligen Planer die Art und die Anzahl der angezeigten Berichtsspalten im Planungsbericht individuell festlegen können. Es soll zwischen einer Planung für zwei oder fünf Jahre unterschieden werden. D. h. je nach Auswahl sollen in der Grafischen Tabelle zwei oder fünf Planspalten anzeigt werden. Ebenfalls soll der einzelne Planer je nach Bedarf entscheiden können, welche Spalten zusätzlich angezeigt werden sollen (Beispiel: Turnover und/oder Forecast und/oder kumulierter Vorjahresvergleich). Die jeweilige Auswahl soll bequem im Präsentationsmodus über den Filter erfolgen. Welche Spalten dabei zu Auswahl stehen, soll vom Bericht abhängig sein.

Grundprinzip

Für die dynamische Spaltenauswahl über die Filterleiste sind in diesem Beispiel zwei Hilfsdimensionen notwendig. Diese müssen zum Datenmodell hinzugefügt werden (hier: View Years und View Columns).
Die beiden Hilfsdimensionen enthalten jeweils berechnete Elemente. Über deren Auswahl wird gesteuert, welche Spalten die Grafische Tabelle darstellt.
Mit der Dimension View Years kann der Berichtsempfänger festlegen, ob im Bericht zwei bzw. fünf Planjahre angezeigt werden sollen.

Mit View Columns kann der Planer sich in einem vorgegebenen Rahmen (Filterkontext ist pro Bericht definiert) bestimmte Spalten (z. B. Anzeige von Forecast) auswählen. Der Bericht verändert sich entsprechend dieser Auswahl.

Durch MDX-Bedingungen wird geprüft, welche Elemente in den Hilfsdimensionen View Year bzw. View Columns ausgewählt sind. Dementsprechend werden im Bericht die dazugehörigen Spalten angezeigt.

Steuerung der dynamischen Anzeige von Planjahren

In der Hilfsdimension View Years (Dimensionsname ohne Alias: ReportContext1) hat der Planer die Wahl zwischen zwei und fünf Jahren.
Die Elemente 2 Plan Years (ReportContext1].[ReportContext1].[3 Jahre]) und 5 Plan Years ([ReportContext1].[ReportContext1].[6 Jahre]) sind im Cubeskript angelegt und verweisen auf den AllMember ([ReportContext1].[ReportContext1].[ ReportContext1 total) der Hilfsdimension. Für diese Elemente ist keine Berechnung hinterlegt.

Im Bericht ist auf der Spaltenachse für die Dimension Periode eine MDX-Bedingung hinterlegt, welche über die der Hilfsdimension View Years prüft, welches Element (2 Plan Years oder 5 Plan Years) ausgewählt ist. Je nach Auswahl werden die nächsten fünf bzw. zwei Jahre (.lead(2) bzw. .lead(5)) angezeigt, inklusive der aktuellen Periode ( von Periode). Daraus ergibt sich die Anzeige von jeweils drei bzw. sechs Jahren.


Über den Filterkontext des Berichts wird die Mehrfachselektion unterdrückt.
Der Anwender kann so entweder 2 Plan Years oder 5 Plan Years auswählen.

Dynamische Anzeige von Spalten in Abhängigkeit der Filterauswahl

Die Hilfsdimension View Columns (Dimensionsname ohne Alias: ReportContext2) ermöglicht es dem Planer im Präsentationsmodus die Anzeige von gewissen Spalten selbst zu steuern. Pro Bericht wird über den Filterkontext festgelegt, welche Auswahlmöglichkeiten zu Verfügung stehen sollen (z. B. Turnover, Vorjahresvergleich, Forecast).
Der Bericht muss so aufgebaut sein, dass alle möglichen Spalten bereits vorhanden sind. Über MDX-Bedingungen in der Spaltenachse (Spalteneditor) wird gesteuert, ob eine Spalte angezeigt wird oder nicht.
Eine Spalte wird nicht angezeigt, wenn die Bedingung nicht erfüllt wird, d. h. wenn z. B. Turnover in der Filterleiste nicht ausgewählt ist, wird die MDX-Bedingung nicht erfüllt und gibt NULL aus. Ist eine Zelle in der Spaltenachse NULL, wird die komplette Spalte nicht angezeigt.
Die Steuerung muss dabei in einer Zelle der betreffenden Spalte erfolgen (Hier: Dimension Schritt bzw. Step).


Der Prüfung in der Spaltenachse des Berichts ist ein weiterer Prüfschritt vorgelagert.
Pro Auswahlmöglichkeit (also pro dynamische Spalte) müssen zwei berechnete Elemente angelegt werden.

Das erste berechnete Element schafft die Auswahlmöglichkeit in der Hilfsdimension (z. B. Auswahl von Turnover). Hierfür sind Dummy-Elemente in der Datenbank angelegt. In der Datenbank haben die Elemente keine weitere Bezeichnung außer dem Elementschlüssel (1-15). Der Alias wurde direkt in DeltaMaster vergeben.
Da auch eine Mehrfachselektion möglich sein soll (z. B. gleichzeitige Auswahl von Turnover und Forecast) ist ein weiteres berechnetes Element notwendig (Turnover in Filter?), das prüft, ob z. B. Turnover in der Filterauswahl vorhanden ist. Dies wird über eine Schnittmengenprüfung realisiert. Die Schnittmenge wird mit dem MDX Operator Count gezählt. Befindet sich Turnover in der Auswahl ergibt sich eine Schnittmenge. Zählt man diese Menge ergibt sich die Anzahl 1.

In der Spaltenachse wird geprüft: Wenn das zweite berechnete Element größer 0 ist (= betreffende Spalte, z. B. Turnover, ist in Filterauswahl vorhanden), dann zeige die Spalte an, ansonsten NULL (führt dazu, dass die Spalte nicht angezeigt wird).
Damit die Spalte angezeigt werden kann, muss ein reales Element (keine Dummy) verwendet werden, das in der Kombination mit allen weiteren Dimensionselementen auf der Achse zur gewünschten Datenspalte führt.

Der Filterkontext muss pro Bericht noch so eingeschränkt werden, damit keine berechneten Elemente angezeigt werden und nur die Elemente, für die der Bericht auch Spalten bereithält.

Sind die oben beschriebenen Voraussetzungen (Hilfsdimensionen, Dummy-Elemente, berechneten Elemente, MDX-Code auf der Spaltenachse, Filterkontext) erfüllt, kann der Planer nun bequem über die Hilfsdimensionen in der Filterleiste die für den Planungsbericht gewünschten Spalten selektieren.

Tipp: Da für jede Spalte ein unterschiedliches MDX notwendig ist, dieses sich aber augenscheinlich nur kaum unterscheidet (Unterschiedliche Namen der berechneten Elemente), empfiehlt es sich in der ersten Zeile des MDX einen Kommentar mit einer fortlaufenden Nummer zu vergeben. So entsteht keine Verwechslungsgefahr und es können innerhalb des Spalteneditors ganze Zellen ohne aufwendiges Vergleichen von MDX-Code schnell kopiert und gezielt verändert werden.