Die Abweichungsanalyse von Ist- zu Planwerten ist sicher eine der wichtigsten Analysen im täglichen Geschäft eines Controllers. Dabei wird zum Beispiel gemessen, ob der geplante Umsatz oder die geplanten Kosten erreicht werden. Je weiter das Jahr fortgeschritten ist, umso weniger Einfluss kann auf die Planerfüllung noch genommen werden. Deswegen ist es wichtig diesen Vergleich frühzeitig und regelmäßig anzustellen, um entsprechend gegenwirken zu können. Ein sehr gutes Werkzeug zur Visualisierung dieser Abweichungen ist das in DeltaMaster enthaltene Basisverfahren „Trompetenkurve“.
Kommen bei einer solchen Abweichungsanalyse Währungseffekte zum Tragen, wird die Analyse aber um ein Vielfaches schwerer. Denn Abweichungen vom Plan können zum Beispiel durch Umsatzeinbußen entstanden sein, oder aber auch durch sich verändernde Wechselkurse. Wie diese Währungseffekte bei der Analyse von Kennzahlen eliminiert werden können, soll der folgende Blogbeitrag zeigen.
Ein vorhandenes Datenmodell wird dabei um eine zusätzliche Dimension erweitert, die es erlaubt, die zu analysierenden Werte nicht nur mit den Kursen der jeweiligen Wertart zu analysieren, sondern auch mit Kursen anderer Wertarten, also zum Beispiel Istwerte mit Plankursen.
Hierfür wird das Datenmodell, welches bereits mit einer Währungsumrechnungsfunktion ausgestattet ist (siehe Währungskursumrechnung in BI-Datenmodellen), in DeltaMaster Modeler um eine neue Dimension namens FX-Simulation erweitert.
Diese Dimension besteht aus nur einer Ebene und enthält kein Summenelement.
Die neue Dimension kann aus einer speziellen Tabelle befüllt werden. Empfehlenswert ist aber die Nutzung der ohnehin im Modell vorhandenen Tabelle der Wertartendimension T_Import_Wertart_manuell, welche über einen Unionbefehl in der darauf referenzierenden View um einen Datensatz erweitert wird, der es erlaubt, die Währungssimulation standardmäßig zu deaktivieren.
Außerdem hat die Nutzung der vorhandenen Tabelle den Vorteil, dass sich bei der später noch aufgeführten Umrechnungsfunktion per MDX auf die Wertartendimension bezogen werden kann.
Anschließend wird eine neue Measuregroup angelegt, welche FX_Simulation heißt. Wichtig hierbei ist, dass in die Spalten „Create Table“ und „Create Proc“ jeweils ein „-“ eingetragen wird. Das hat zur Folge, dass für diese Measuregroup keine Faktentabelle und auch keine Prozedur zur Befüllung der Faktentabelle angelegt wird.
Aus diesem Grund muss im Modelerbericht „MeasureGroups Source Tables“ auch keine Quelltabelle definiert werden.
Weiterhin ist es notwendig, die neue Dimension der neu erstellten Measuregroup zuzuordnen…
…und eine „Dummykennzahl“ anzulegen. Diese Kennzahl wird über die Spalte „Visible?“ unsichtbar gesetzt.
Sowohl die Measuregroup als auch die Measure werden nur benötigt, um die neue Dimension FX-Simulation in den entsprechenden Würfel zu integrieren, ohne sie mit ihm zu verknüpfen (siehe Skalierung mittels Dimension „Maßfaktor“), denn alle notwendigen Daten (Umrechnungs-kurse und Analysewerte) zur Währungssimulation sind bereits im Modell enthalten.
Im anschließend erstellten OLAP-Modell ist die neue Dimension FX-Simulation mit den entsprechenden Elementen zu finden.
Standardmäßig ist das oberste Element „No FX-Simulation“ aktiviert, über welches die Währungssimulation deaktiviert werden kann. Bevor nun die im Modell enthaltenen Analysewerte mit den verschiedenen Umrechnungskursen durch die Auswahl des entsprechenden Elementes umgerechnet werden können, müssen über das BIDS (SQL Server Business Intelligence Development Studio) im OLAP-Würfel noch ein paar Zeilen MDX-Code hinterlegt werden.
Im oberen Teil wird die vorhandene Währungsumrechnungsfunktion um die Auswahl des Elementes „No FX-Simulation“ (mit dem Schlüssel 0) erweitert. Damit ist sichergestellt, dass bei Auswahl dieses Elementes, die Währungsumrechnung funktioniert wie bisher.
-- Umrechnung zu Originalkursen Scope ( [Period].[Period].[Month].Members, [Currency].[Currency].[Currency].Members, [CurrencyView].[CurrencyView].[CurrencyView].&[GC], [FX_Simulation].[FX_Simulation].[FX_Simulation].&[0], { [Measures].[Amount] } ); THIS = iif([Measures].[CurrencyRate] = 0 , NULL, ([Measures].CurrentMember,[CurrencyView].[CurrencyView].&[LC])/ ([Measures].[CurrencyRate]) ); End Scope;
Im zweiten Teil wird die Funktion zur Währungssimulation erstellt. Dabei wird bei der Auswahl eines beliebigen Elementes in der Dimension FX-Simulation (außer das Element „No FX-Simulation“) die Kennzahl Amount mit dem Umrechnungskurs der jeweiligen Wertart umgerechnet. Hierbei kommt uns die Nutzung der oben erwähnten Tabelle der Wertartendimension zugute, da einfach über die Funktion StrToMember und die Referenzierung auf das ausgewählte Element der Dimension FX-Simulation der Kurs der entsprechenden Wertart zur Währungsumrechnung herangezogen wird.
-- Umrechnung zu Kursen entspr. eingestellter Wertart Scope ( [Period].[Period].[Month].Members, [Currency].[Currency].[Currency].Members, [CurrencyView].[CurrencyView].[CurrencyView].&[GC], Except( [FX_Simulation].[FX_Simulation].[FX_Simulation].Members, [FX_Simulation].[FX_Simulation].[FX_Simulation].&[0]), { [Measures].[Amount] } ); THIS = iif(([Measures].[CurrencyRate], StrToMember("[ValueType].[ValueType].[ValueType].&[" + [FX_Simulation].[FX_Simulation].CurrentMember.Properties("KEY") + "]")) = 0 , NULL, ([Measures].CurrentMember,[CurrencyView].[CurrencyView].&[LC])/ ([Measures].[CurrencyRate], StrToMember("[ValueType].[ValueType].[ValueType].&[" + [FX_Simulation].[FX_Simulation].CurrentMember.Properties("KEY") + "]")) ); End Scope;
Im unten aufgeführten Beispiel ist sehr gut ersichtlich, wie sich ändernde Kurse bei Währungsumrechnungen auf das Ergebnis auswirken können.
Geplant wurde mit einem Umrechnungskurs von Dollar zu Euro von 1,29. Tatsächlich schwankte der Kurs über das Jahr aber zwischen 1,22 und 1,29.
Dies führt bei einem fiktiv geplanten und auch erreichten Jahresumsatz von 120.000 USD (Zeile 1) und einer anschließenden Umrechnung in Euro zu einer Abweichung von immerhin 2.808 Euro zwischen tatsächlichem (Zeile 2) und geplantem Kurs (Zeile 3).
Über die neue Dimension FX-Simulation kann so jeder Wert im Modell zu einem beliebigen Kurs umgerechnet und etwaige Währungseffekte für die Analyse ausgeblendet werden.