In OLAP-Datenbanken haben wir die Möglichkeit, Dimensionsattribute als Dimensionen bzw. Hierarchien zu modellieren. Damit können Berichte nach Attribut-Ausprägungen gefiltert werden, als ob es sich um eine eigene Dimension handelt. Das Modellieren von Attribut-Dimensionen ist nicht nur bei regulären Dimensionen möglich, sondern auch bei Parent-Child-Dimensionen. In diesem Blog zeigen wir anhand eines Beispiels, wie Berichte nach einer solchen Attribut-Dimension gefiltert werden, wenn Datensätze nur für einzelne Ebenen in der Parent-Child-Dimension geführt werden.
In unserem Szenario ist die Organisationsstruktur eines Unternehmens als Parent-Child-Dimension und eine Measure-Group modelliert, die die Anzahl der Mitarbeiter zählt. Die Mitarbeiter befinden sich auf der untersten Ebene der Organisation und stellen die Blattelemente der Dimension dar. Die Measure-Group „AnzahlMitarbeiter“ besitzt nur Datensätze für die Blattelemente.
Die Elemente der Dimension „Organisation“ können vom Typ Konzern, Filiale, Abteilung, Unterabteilung oder Mitarbeiter sein. Diese Information wird als Attribut „OrganisationselementTyp“ modelliert.
Das Attribut „OrganisationselementTyp“ wird als Attribut-Dimension bzw. 1-Level-Dimension definiert. Damit wird „OrganisationselementTyp“ in der Filterleiste von DeltaMaster sichtbar und kann als Filter verwendet werden.
Der Bericht lässt sich nun beispielsweise nach dem Element Abteilung filtern, wie in Abbildung 3 dargestellt. Allerdings kann man hierbei sehen, dass zwar nach der Dimension gefiltert wurde, aber die Kennzahl „AnzahlMitarbeiter“ überall leer ist (sofern leere Zeilen im Bericht eingeblendet werden).
Bei der Analyse des MDX-Ausdrucks des Berichts sehen wir, dass durch das Filtern nach „OrganisationselementTyp“ eine WHERE-Bedingung in der MDX-Abfrage generiert wird. Da die Measure-Group „AnzahlMitarbeiter“ nur Daten für Blattelemente bzw. Elemente von Typ Mitarbeiter enthält und die Attribut-Dimension nicht hierarchisch, sondern als eine flache Liste aufgebaut ist, wird kein Wert für Elemente außer dem „OrganisationselementTyp“ Mitarbeiter gefunden.
SELECT
{[Measures].[AnzahlMitarbeiter]} ON AXIS(0),
{Generate([Organisation].[Organisation_PC].Levels(0).AllMembers,
Descendants([Organisation].[Organisation_PC].CurrentMember,
[Organisation].[Organisation_PC].Levels(4),SELF_AND_BEFORE))}
DIMENSION PROPERTIES [Organisation].[Organisation_PC].[Level 01].[ElementTyp] ON AXIS(1)
FROM [Chair]
WHERE ([Organisation].[OrganisationselementTyp].[OrganisationselementTyp].&[Abteilung])
Lösung durch Einsatz einer Filter-Kennzahl
Es wird eine Filter-Kennzahl für die „AnzahlMitarbeiter“, fixiert auf alle Typen, erstellt.
Die Filter-Kennzahl wird entlang der Dimension „Organisation“ aggregiert. Da jedes Dimensionselement nur einen Typ haben kann, gibt das Element Alle Typen den richtigen Wert zurück.
Damit sich der Nutzer nicht um das Anlegen der Filter-Kennzahl kümmern muss, können die Kennzahl „AnzahlMitarbeiter“, sowie weitere Kennzahlen derselben Measure-Group mittels eines Scopes im Cube-Skript wie folgt überschrieben werden:
-----------------------------------------
-- Attribut-Dimension aus PC-Dimension
-----------------------------------------
SCOPE (
MeasureGroupMeasures("AnzahlMitarbeiter")
);
THIS = ([Measures].CurrentMember,
[Organisation].[OrganisationselementTyp].[Alle Typen]);
END SCOPE;
Damit werden im Bericht die Mitarbeiterzahlen über alle Filteroptionen im Attribut-Dimension „OrganisationselementTyp“ korrekt summiert und dargestellt.
Fazit zum Filtern von Parent-Child-Dimensionen nach Attribut-Dimensionen
In einem Szenario, in dem eine Kennzahl nur mit den Blattelementen einer Parent-Child-Dimension verknüpft und ein Attribut der Parent-Child-Dimension als Attribut-Dimension modelliert ist, kann das Filtern nach Ausprägungen der Attribut-Dimension leere Werte zurückliefern, wenn das ausgewählte Attribut einer höheren Ebene der Parent-Child-Dimension entspricht. Die Verwendung einer Filter-Kennzahl, fixiert auf das All-Element der Attribut-Dimension, kann dieses Problem lösen.