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

Dynamische KPI-Kacheln für Repository-Anwendungen

Mit DeltaMaster 6 haben wir das Berichtswetter eingeführt. Dieser neue Visualisierungsstandard ermöglicht es uns, die Unternehmenslage auf einen Blick intuitiv zu erkennen. Anhand der Intensität der Farben Rot und Blau kann beurteilt werden, wie gut oder schlecht die „Wetterlage“ ist. Diese wird pro Bericht durch eine vorab definierte Filterkennzahl, der sogenannten „Wetterzelle“, bestimmt.

Diese als besonders wichtig eingestufte Kennzahl kann auch in Form einer Kachel präsentiert werden. Die Kombination von mehreren Kacheln nebeneinander ergibt ein Dashboard, das es erlaubt mit nur wenigen Blicken die Geschäftslage einzuschätzen. Dies ist entweder innerhalb einer DeltaMaster-Analysesitzung oder für die Anwendungen des genutzten Repositorys möglich. Innerhalb einer Analysesitzung werden die Kacheln auf Ordnerebene für die darunterliegenden Pivottabellen definiert. Dies erfolgt über die Eigenschaften des jeweiligen Ordners in der Berichtsmappe. Der zweite Fall, die Definition von dynamischen KPI-Kacheln für OLAP-Repository-Anwendungen, insbesondere die damit verbundene Erstellung von MDX-Abfragen, soll in diesem Blogbeitrag näher erläutert werden.


Die Anlage von KPI-Kacheln für Anwendungen aus dem Repository erfolgt über die Tabelle „ApplicationKPI“ in der Repository Datenbank. Die dort definierten Kacheln werden für das jeweilige Repository als Dashboard in der DeltaMaster-Portalansicht angezeigt.

Beispiel für ein Dashboard

Abbildung 1: Beispiel für ein Dashboard

Nachfolgend wird exemplarisch eine KPI-Kachel für eine Anwendung basierend auf der Chair-Demo erstellt.
Speichert man eine Analysesitzung als Anwendung im Repository, erscheint diese zunächst nur als graue Kachel mit dem Anwendungsnamen im DeltaMaster-Portal:

Anwendung aus Repository ohne definierte KPI-Kacheln

Abbildung 2: Anwendung aus Repository ohne definierte KPI-Kacheln

Um jedoch auf der Kachel eine KPI mit Wert und Berichtswetter anzuzeigen, muss die zunächst leere Tabelle „ApplicationKPI“ in der Repository Datenbank bearbeitet werden.

Tabelle „ApplicationKPI“

Abbildung 3: Tabelle „ApplicationKPI“

Eine KPI-Kachel bezieht sich immer auf einen Bericht mit einer definierten Wetterzelle. Wenn unter NumberDefiniton ein Eintrag vorhanden ist, wird die statische Wertangabe unter NumberValue ignoriert. Gleiches gilt für ColorDefinition und ColorValue. Wenn nichts unter NumberValue und NumberDefinition eingetragen ist, wird kein Feld aus der Tabelle in der Kachel anzeigt. Die Angabe der Farbe kann theoretisch weggelassen werden.

Beispieleinträge in „ApplicationKPI“-Tabelle

Abbildung 4: Beispieleinträge in „ApplicationKPI“-Tabelle

Auswirkungen auf KPI-Kachel

Abbildung 5: Auswirkungen auf KPI-Kachel

In unserem Chair-Beispiel soll für folgenden Bericht eine Anwendungskachel erstellt werden:

Beispielbericht aus Chair-Demo

Abbildung 6: Beispielbericht aus Chair-Demo

Zunächst übernehmen wir Anwendungs-ID (AppID), Wetterhinweis (Name) und Sichtauswahl (FilterText) in die ApplicationKPI Tabelle. Als NumberValue tragen wir vorerst eine 1 ein, damit die Eingaben auf der Kachel überhaupt angezeigt werden.

Kachel

Abbildung 7: Kachel

Die „NumberDefinition“ soll jedoch dynamisch mittels MDX-Abfrage auf die Chair-Datenbank ermittelt werden. Hierzu können wir uns eines Tricks behelfen ohne die MDX-Abfrage selbst erstellen zu müssen. Mit der Slice-Operation von DeltaMaster kann der Bericht per Rechtsklick auf den jeweiligen Spalten- bzw. Zeilenkopf der Wetterzelle so reduziert werden, dass nur noch eine Zelle mit dem benötigten Wert im Berichtsfenster angezeigt wird. Falls der Spalten- bzw. Zeileneditor in der Achsendefinition verwendet wurde, muss vorher auf Elementauswahl in der jeweilige Achse gewechselt werden, sonst ist die Slice-Operation nicht möglich.

Achsendefinition aufrufen

Abbildung 8: Achsendefinition aufrufen

Elementauswahl auswählen

Abbildung 9: Elementauswahl auswählen

Slice-Operation durchführen

Abbildung 10: Slice-Operation durchführen

Ergebnis nach durchgeführtem „Slicing“

Abbildung 11: Ergebnis nach durchgeführtem „Slicing“

Die Slice-Operation übernimmt die Achsendefinitionen in die WHERE Bedingung der MDX-Abfrage. Dies ist in unserem Fall auch notwendig, da das Ergebnis der MDX-Abfrage innerhalb der KPI-Kachel nur ein Wert sein darf. Anschließend löschen wir das mdx.log und berechnen den Wert mithilfe der F9-Taste neu. Die dafür erstellte MDX-Abfrage kann dann aus dem mdx.log kopiert und unter NumberDefiniton in der Tabelle ApplicationKPI eingefügt werden. Tragen Sie zusätzlich das passende NumberFormat ein (hier: „p1“).


WITH
MEMBER [Kumulation].[Kumulation].[temp] AS 'Iif([Periode].[Periode].CurrentMember.Level.Ordinal<1,Null,Aggregate(PeriodsToDate([Periode].[Periode].[Jahr], [Perio-de].[Periode].CurrentMember),[Kumulation].[Kumulation].[Kumulation].&[1]))', SOL-VE_ORDER=0, VISIBLE=1
MEMBER [Wertart].[Wertart].[temp 2] AS 'Iif([Wertart].[Wertart].[Wertart].&[P]=0,Null,([Wertart].[Wertart].[Wertart].&[I]-[Wertart].[Wertart].[Wertart].&[P])/Iif([Wertart].[Wertart].[Wertart].&[P]<0,-[Wertart].[Wertart].[Wertart].&[P],[Wertart].[Wertart].[Wertart].&[P]))', SOL-VE_ORDER=150, VISIBLE=1
SELECT 
FROM [Chair]
WHERE ([Kumulation].[Kumulation].[temp], [Periode].[Periode].[Monat].&[201509], [Wertart].[Wertart].[temp 2], [Measures].[DB])
CELL PROPERTIES VALUE

Tabelle „ApplicationKPI“

Abbildung 12: Tabelle „ApplicationKPI“

KPI-Kachel mit „NumberDefiniton“

Abbildung 13: KPI-Kachel mit „NumberDefiniton“

Jetzt fehlt noch das Berichtswetter. Dessen Farbe gibt an, ob der Wert im 12-Monats-Vergleich ein guter oder schlechter Wert war. Die Unterscheidung erfolgt über Intensität der Farbe Blau bzw. Rot. Je dunkler das Blau desto besser, je tiefer das Rot desto schlechter ist der Wert. Für unsere MDX-Abfrage bedeutet das, dass zunächst das MIN und das MAX der letzten 12 Monate für die Kennzahl unter den gegeben Filterkriterien (Wetterzellen) ermittelt werden muss. Abhängig vom Vorzeichen und Position des KPI-Wertes zwischen Min und Max sind unterschiedliche Bedingungen zu berücksichtigen, um am Ende einen normierten Wert zwischen -1 und 1 zu erhalten. -1 würde bedeuten, dass der Wert im Vergleich zu den letzten 12 Monaten der schlechteste ist. Wenn die MDX-Abfrage 1 ergibt, handelt es sich im bei der KPI um den besten Wert innerhalb des letzten Jahres. Der Wert 1 steht für das dunkelste Blau und -1 für das dunkelste Rot. Die MDX-Abfrage für die Berechnung des Berichtswetters lautet folgendermaßen:


WITH 
MEMBER [Measures].[__TEMP0__] AS 
'Min({[Periode].[Periode].[Monat].&[201509].Lag(11) : [Peri-ode].[Periode].[Monat].&[201505]},[Measures].[DB])', 
SOLVE_ORDER=10000 
MEMBER [Measures].[__TEMP1__] AS 'Max({[Periode].[Periode].[Monat].&[201509].Lag(11) : [Periode].[Periode].[Monat].&[201505]},[Measures].[DB])',
SOLVE_ORDER=10000 
MEMBER [Measures].[__WEATHER__] AS 'Iif([Measures].[__TEMP0__] >= 0, Iif([Measures].[DB] <= [Measures].[__TEMP0__] And [Measures].[DB] > 0, -1 * 1E-09, -1 * ([Measures].[DB] - [Measures].[__TEMP0__]) / ([Measures].[__TEMP1__] - [Measures].[__TEMP0__])),
Iif([Measures].[__TEMP1__] <= 0, Iif([Measures].[DB] >= [Measures].[__TEMP1__] And [Measures].[DB] < 0, -1 * 1E-09, -1 * ([Measures].[DB] - [Measures].[__TEMP1__]) / ([Measures].[__TEMP0__] - [Measures].[__TEMP1__])),
Iif([Measures].[DB] >= 0, -1 * ([Measures].[DB] / [Measures].[__TEMP1__]),
-1 * ([Measures].[DB] / [Measures].[__TEMP0__]))))',
SOLVE_ORDER=10001 
MEMBER [Kumulation].[Kumulation].[temp] AS 'Iif([Periode].[Periode].CurrentMember.Level.Ordinal<1,Null,Aggregate(PeriodsToDate([Periode].[Periode].[Jahr], [Peri-ode].[Periode].CurrentMember),[Kumulation].[Kumulation].[Kumulation].&[1]))',
SOLVE_ORDER=0, VISIBLE=1 
MEMBER [Wertart].[Wertart].[temp 2] AS 'Iif([Wertart].[Wertart].[Wertart].&[P]=0,Null,([Wertart].[Wertart].[Wertart].&[I]-[Wertart].[Wertart].[Wertart].&[P])/Iif([Wertart].[Wertart].[Wertart].&[P]<0,-[Wertart].[Wertart].[Wertart].&[P],[Wertart].[Wertart].[Wertart].&[P]))', 
SOLVE_ORDER=150, VISIBLE=1 
SELECT {[Measures].[__WEATHER__]} ON AXIS(0) 
FROM [Chair] 
WHERE ([Kumulation].[Kumulation].[temp], [Periode].[Periode].[Monat].&[201509], [Wertart].[Wertart].[temp 2])

In diesem Fall ergibt die Abfrage den Wert -1. Es handelt sich daher um den schlechtesten Wert der letzten 12 Monate.
Um sich etwas Zeit zu sparen, kann auf die MDX-Abfrage aus der NumberDefinition aufgebaut werden. Beispielsweise kann die Definition der berechneten Elemente [Kumulation].[Kumulation].[temp] und [Wertart].[Wertart].[temp 2] übernommen werden. Die berechneten Kennzahlen [Measures].[__TEMP0__], [Measures].[__TEMP1__] sowie [Measures].[__WEATHER__]} müssen ergänzt werden . Ebenfalls muss der SELECT und WHERE Teil geringfügig angepasst werden.

Vollständige „ApplicationKPI“-Tabelle

Abbildung 14: Vollständige „ApplicationKPI“-Tabelle

Kachel

Abbildung 15: Kachel

Wem die manuelle Erstellung einer KPI-Kachel für eine Repository-Anwendung recht aufwendig erscheint, kann sich auf den nächsten DeltaMaster-Release freuen. Ab Version 6.1.2. ist diese Vorgang komfortabel per GUI in DeltaMaster möglich. Die Berichte mit Wetterzelle können ausgewählt werden und es erfolgt eine automatische Generierung des MDX-Codes für eine dynamische Abfrage von KPI-Wert und Berechnung des Berichtswetters. Ebenfalls werden die Texte für Name und FilterText automatisch übernommen, können aber dennoch bei Bedarf angepasst werden. Das Prinzip der Kachelerstellung bleibt allerdings gleich, es wird eben nur bequemer.