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

Analysewerte austauschen im Präsentationsmodus – Teil 2

Dieser Blogbeitrag knüpft an den Blogbeitrag „Analysewerte austauschen im Präsentationsmodus – Teil 1“ an und zeigt, wie mit dem Back-end die Umsetzung noch weiter optimiert werden kann.

Zielsetzung

Das Ziel ist, das Ergebnis aus dem vorangegangenen Blogbeitrag „Analysewerte austauschen im Präsentationsmodus – Teil 1“ mit dem Back-end so zu optimieren, dass nur ein relationaler Eingabebericht in DeltaMaster gepflegt werden muss.

Nebenbei verbessert sich die Darstellung der Hilfsdimension und auch der MDX-Code für den Analysewert wird kürzer.

Umsetzung

Zuerst legen wir uns eine Stammdatentabelle in der relationalen Datenbank an:

CREATE TABLE [dbo].[T_S_Werte](
					[WertBEZ] [nvarchar](50) NOT NULL,
					[SortierID] [smallint] NOT NULL,
					[Faktor] [smallint] NOT NULL
) ON [PRIMARY]

Wir erhalten damit die Tabelle [dbo].[T_S_Werte], die eine Spalte für die Bezeichnung des Analysewertes (WertBEZ) enthält, eine ID für die Sortierung (SortierID) und eine Faktorspalte (Faktor), die angibt, wie der Analysewert mit einem Faktor multipliziert wird, z.B. für Kosten (-1) und für positive Analysewerte 1.

Nun können wir diese Tabelle bearbeiten, beispielsweise auch mit einer relationalen Eingabeanwendung in DeltaMaster. Folgen wir dem Beispiel aus dem ersten Teil, so sieht die Tabelle wie folgt aus:2018-11-30_crew_Beispieltabelle

Abb. 1: Beispiel der Stammtabelle

Sicherlich fällt auf, dass hier ein Analysewert „Wert“ hinzugefügt wurde, obwohl dieser im Beispielemodell Chair gar nicht vorhanden ist. Das liegt daran, dass wir dieses Element im DeltaMaster-Filter ausblenden können, sodass in den anderen Berichten die Auswahl nicht in der Sicht angezeigt wird.

Nun wenden wir uns DeltaMaster ETL zu und legen eine neue Dimension an, die auf dieser Stammtabelle basiert, in diesem Beispiel „Werte“ genannt. Diese Dimension benötigt keinen ALL-Member, sie besitzt die ID aus der Spalte „SortierID“, den Namen aus der Spalte „WertBEZ“ und das Attribut Faktor aus der Spalte „Faktor“. Ebenso stellen wir eine Verknüpfung zwischen der Dimension und der Measure-Gruppe her, wobei wir als Quellspalte für die Measuregruppen-Dimension den Wert 1 nehmen.

Außerdem legen wir noch den Analysewert „Wert“ an, der mit NULL befüllt werden kann.

Nun erstellen wir das Modell neu und hinterlegen danach noch folgenden MDX-Code im Cube-Skript:

Scope([Measures].[Wert]);
[Measures].[Wert] = 
    (
     StrToMember('[Measures].[' + [Werte].[Werte].currentMember.Properties('Name') + ']')
     ,[Werte].[Werte].[Werte].&[1]
     ) 
     * StrToValue([Werte].[Werte].currentMember.Properties('Faktor'))
;
end scope;

Im Klartext: Wir überschreiben den neuen Analysewert „Wert“ mit dem Wert des Analysewerts, der den Namen des aktuellen Elements der Dimension Werte besitzt, mappen diesen auf das erste Element der Dimension, da wir die ID in der Measure-Gruppe für die Dimension „Werte“ auf 1 gemappt haben, und multiplizieren diesen mit dem dazugehörigen hinterlegten Faktor.

Im Front-end kann nun wieder der Name des Analysewerts mit dem MDX-Ausdruck {<viewX>} umbenannt werden, wenn dies erwünscht ist. Ebenso kann das Element „Wert“ der Dimension Werte aus der Sicht ausgeschlossen werden, sodass die Auswahl nicht in anderen Berichten in der Sicht auftaucht.

Bewertung des Endergebnisses

Als Endergebnis erhalten wir analog zum ersten Teil folgenden Bericht:

Abb. 2: Endergebnis

Diese ähnelt der Variante aus dem ersten Teil, nur dass wir den Dimensions-, Hierarchie- und Ebenennamen selbst wählen können, die Reihenfolge der Elemente jederzeit ändern können und eine Veränderung nur eine Anpassung in einer Tabelle bedeutet.