In den Artikeln über Kontext haben wir beschrieben, was der Benutzerkontext und der Zeilenkontext ist. Mit dem speziellen Iterator Filter haben wir Kontexte weiter gefiltert oder Filter mit ALL() wieder aufgehoben. Was aber, wenn wir nur einen Teil der Filter aufheben wollen? Beispielsweise für einen Vorjahresvergleich? Dazu benötigen wir die CALCULATE()-Funktion.

Bossa Nova

Wir haben die Umsatzzahlen einer Modefirma, die zwei Marken herstellt, Bossa und Nova: Ausgangsdaten Die Umsatzzahlen sind stark vereinfacht – und es liegen nur Zahlen für die ersten drei Monate 2013 und 2014 vor. Zusammen mit einer Datumstabelle ergibt sich folgendes Modell: Datenmodell Eine Umsatzauswertung könnte dann wie folgt aussehen: einfache Umsatzauswertung

CALCULATE()

Periodenvergleich bedeutet, dass man eine weitere Spalte hat, in der jeweils das Ergebnis der Vorperiode steht. Mit einem berechneten Feld können wir

  • mit Filter() den Benutzerfilter nur einschränken (im Jahr 2014 finden wir keine Werte von 2013)
  • mit All() den Filter nur komplett löschen – und hätten überall den Umsatz 25.000 stehen.

CALCULATE() bietet uns genau die Funktionalität, die wir benötigen: Feld := CALCULATE(AUSDRUCK; FILTER1; FILTER2; FILTER3) Der Parameter AUSDRUCK ist die gewünscht Berechnung, beispielsweise eine Summe. Anschließend können wir beliebig viele Filter setzen – oder keinen. Das heißt der einfachste Calculate-Ausdruck sieht wie folgt aus:

Diese Berechnung ist wenig hilfreich, da man das gleiche Ergebnis auch mit SUM(Umsatz[Umsatz]) erreicht hätte. Daher verwenden wir einen einfachen Filter:

Calculate mit einfachem Filter

Filter überschreiben?

Ein einfacher Filter in der Calculate-Funktion schränkt den gesetzten Benutzerkontext ein. ABER: Wäre das generell so, dürfte im Jahr 2014 kein Wert auftauchen, da es im Jahr 2014 keinen Wert aus dem Jahr 2013 gibt (logisch!). Existiert im Benutzerkontext ein Filter, der in der Calculate-Funktion gesetzt wird, ÜBERSCHREIBT der Filter in der Calculate-Funktion den Filter im Benutzerkontext. Alle anderen Filter im Kontext bleiben aber erhalten! In unserem Fall ist die Datumstabelle bereits Teil des Benutzerkontextes und wird überschrieben. Der Filter für die Modemarke hingegen bleibt erhalten!

Filter kombinieren

Möchten wir immer das Ergebnis der Modemarke NOVA haben, erweitern wir unsere Funktion:

Die Filter werden mit einem “UND” verknüpft, müssen also alle gleichzeitig gelten. Daher ist das Ergebnis immer der Umsatz von 2013 der Marke Nova. Filter kombinieren

Ausblick

Periodenvergleiche mit einer festen Jahreszahl sind nur eingeschränkt einsetzbar. Im nächsten Artikel zeigen wir Ihnen, wie man das dynamischer macht.