Eine Planungsanwendung sollte performant sein. Deshalb ist es wichtig, die richtige Dimensionalität für die Planungs-Measure-Gruppen auszuwählen. Oft besteht die Anforderung, auf einer niedrige Dimensionsebene z. B. auf Tagesebene zu planen, wobei die Verteilung der Monatswerte bzw. Wochenwerte auf die Tage immer das gleiche Muster zurückgeben kann; z. B. Montag hat immer den niedrigsten Umsatz der Woche. Statt die Werte auf Tagesebene zu schreiben, kann für dieses Szenario eine zweite Measure-Gruppe definiert werden, welche für jeden Tag einen Verteilungsfaktor enthält. Der Tageswert kann danach im Cube-Skript berechnet werden.
Im Folgenden wird der Aufbau einer Planungsanwendung mit dem dargestellten Ansatz näher erläutert.
Szenario
Es soll eine Umsatzplanung auf Tagesebene realisiert werden. Die Umsätze auf Tagesebene haben in der Regel die gleiche Verteilung; Wochenenden und Feiertage sollen nicht berücksichtigt werden.
Modell
Es wird eine Planungs-Measure-Gruppe „Deckungsbeitragsrechnung“ erstellt, diese Measure-Gruppe wird mit der Dimension „Periode“ auf Monatsebene und allen weiteren relevanten Dimensionen verknüpft.
Eine zweite Measure-Gruppe „Tagesverteilung“ wird definiert, diese ist nur mit der Dimension Periode über die Ebene Tag verknüpft. Die Rückschreibe-Option muss auch für die zweite Measure-Gruppe aktiviert werden.
Berechnung der Verteilungsfaktoren
Damit die Monatswerte auf Tagesebene verteilt werden, muss jeder Tag des Monats einen Faktor enthalten, wobei die Summe aller Tagesfaktoren des Monats 1 bzw. 100% beträgt.
Für unser Beispiel sollen nur die Arbeitstage berücksichtigt werden. Hierfür wurde die View V_Import_DIM_Periode erstellt, in der alle Arbeitstage der Periodentabelle durch die Modeler-Funktion dbo.F_BC_Holiday gekennzeichnet werden. Außerdem wird eine Umsatzverteilung nach Wochentagen verwendet (s. Abb. 1). Die ganze Berechnung wird in der View V_Import_FACT_Tagesverteilung realisiert, welche wiederum die Quelle der Measure-Gruppe Tagesverteilung ist.
ALTER VIEW [dbo].[V_Import_FACT_Tagesverteilung] AS SELECT -- Dimensions CONVERT(DATE, Periode) TagID, -- Measures wv.Verteilungsfaktor * CONVERT(FLOAT,1) / SUM(wv.Verteilungsfaktor) OVER (PARTITION BY YEAR(p.Periode), MONTH(p.Periode)) AS Verteilungsfaktor FROM V_Import_DIM_Periode p LEFT JOIN T_S_Wochenverteilung wv ON dbo.F_BC_DateID('dw', p.Periode, 0) = wv.Wochentag WHERE p.IstArbeitstag = 1
Nach der Berechnung der Verteilungsfaktoren wird das Muster der Wochenverteilung (s. Abb. 1) sichtbar.
Die Verteilungsfaktoren können auch auf Basis von Ist-Werten oder anderer Kriterien berechnet werden.
Berechnung der Tageswerte
Die Tageswerte werden durch eine SCOPE-Anweisung im Cube-Skript berechnet.
SCOPE ( [Periode].[Periode].[Tag].MEMBERS, [Measures].[Umsatz] ); THIS = [Measures].[Umsatz] * [Measures].[Verteilungsfaktor]; END SCOPE;
Das Ergebnis sieht dann folgendermaßen aus:
Dateneingabe
Die Eingabe der Werte soll auf Monats- und Tagesebene erfolgen. Damit dies möglich ist, muss in DeltaMaster die Wertweitergabe für die Kennzahl „Umsatz“ konfiguriert werden. Für Eingaben auf Monatsebene oder höher soll der Wert auf „Umsatz“ geschrieben werden, für Eingaben auf Tagesebene wird ein neuer „Verteilungsfaktor“ berechnet.
Da die Summe der Monatsfaktoren immer 100% ergeben soll, wird die Zellfixierung für den Monatswert aktiviert. Danach können die Tageswerte beliebig angepasst werden.