Gleitender Durchschnitt mit DAX berechnen

Es sind diese Tage, an denen man feststellt, dass der gleitende Durchschnitt zwar als Power BI Quickmeasure vorhanden ist, aber dieses nur die von Power BI bereitgestellte Datumshierarchie unterstützt. Zum Glück gibt es auch ein entsprechendes DAX Pattern von SQLBI, jedoch passt auch dieses nicht ganz zu der vorhandenen Datumstabelle. Dieser Blogbeitrag zeigt, wie ich das DAX Pattern für die Berechnung des gleitenden Durchschnitt auf meine Datumstabelle angepasst habe.

Doch kurz zurück zum „Gleitender Durchschnitt“ Quickmeasure Problem. Es gehört zu den meistbesprochenen Themen, dass ein gutes Datenmodell über eine eigene Datumstabelle verfügen sollte und nicht die von Power BI bereitgestellte „automatische Datums-/Uhrzeittabelle“ (Datumshierarchie) verwenden sollte. Jedoch kann Power BI bei einer benutzerdefinierten Datumstabelle nicht erkennen, was z.B. die Spalten für die Aggregation auf Ebene des Monats oder des Jahres sind. Daher unterstützt der Quickmeasure Assistent für den „Gleitenden Durchschnitt“ nur die von Power BI bereitgestellte Datumshierarchie, um genau diesen „Zeitraum“ definieren zu können.

Quickmeasure Dialog für Gleitender Durchschnitt mit Fehlermeldung: "Es werden nur von Power BI bereitgestellte Datumshierarchien unterstützt"
Der gleitende Durchschnitt aus den Quickmeasures unterstützt nur die von Power BI bereitgestellte Datumshierarchien.

Eine weitere gute Quelle für gängige DAX-Formeln ist die Seite DAX Patterns von SQLBI, auf der man den gleitenden Durchschnitt unter „Moving averages“ findet. Jedoch benötigt dieses DAX-Pattern die dazugehörige SQLBI Datumstabelle bzw. die fortlaufende Spalte „Year Month Number“. Da ich aber weiterhin meine bereits vorhandene Datumstabelle verwenden wollte, habe ich die DAX-Formel wie folgt angepasst.

Verkaufsbetrag AVG 12M = 
 -- Anzahl der Monate für den gleitenden Durchschnitt definieren
VAR _MonthsInRange = 12
 -- Letzten Tag des gefilterten Monat ermitteln
VAR _LastDateRange =
    ENDOFMONTH ( Datum[Datum] )
 -- Ersten Tag des gefilterten Monatsbereich (-12 + 1 = -11) ermitteln 
VAR _FirstDateRange =
    STARTOFMONTH ( DATEADD ( _LastDateRange, - _MonthsInRange + 1, MONTH ) )
 -- Gefilterter Monatsbereich von Tage auf Monatsebene zusammenfassen
VAR _MonthRange =
    SUMMARIZE (
        FILTER (
            ALLNOBLANKROW ( Datum[Monat], Datum[Datum] ),
            Datum[Datum] >= _FirstDateRange
                && Datum[Datum] <= _LastDateRange
        ),
        Datum[Monat]
    )
VAR _Result =
 -- Prüfung ob die gewählte Anzahl an Monaten (in der Datumstabelle) vorhanden sind
    IF (
        COUNTROWS ( _MonthRange ) >= _MonthsInRange,
        -- Berechnung des gleitenden Durchschnitts auf Basis des Monatsbereichs
        CALCULATE (
            AVERAGEX ( _MonthRange, CALCULATE(SUM ( Verkaufsbeleg[Verkaufsbetrag] )) ),
            ALLNOBLANKROW( Datum )
        )
    )
RETURN
    _Result

Alternativ dazu habe ich auch den DAX-Code für den gleitenden Durchschnitt vom Quickmeasure mit der Power BI bereitgestellten Datumshierarchie auf meine eigene Datumstabelle umgestellt.

Verkaufsbetrag AVG 12M =
VAR __LAST_DATE =
    ENDOFMONTH ( Datum[Datum] )
VAR __DATE_PERIOD =
    DATESBETWEEN (
        Datum[Datum],
        STARTOFMONTH ( DATEADD ( __LAST_DATE, -11, MONTH ) ),
        __LAST_DATE
    )
RETURN
    AVERAGEX (
        CALCULATETABLE (
            SUMMARIZE ( VALUES ( Verkaufsbeleg ), Datum[Monat] ),
            __DATE_PERIOD
        ),
        CALCULATE (
            SUM ( Verkaufsbeleg[Verkaufsbetrag] ),
            ALLNOBLANKROW ( Datum[Datum] )
        )
    )

Falls du also auf der Suche nach einer DAX-Formel zu Berechnung des gleitenden Durchschnitts in Power BI bist, hoffe ich, dass dir dieser Blogartikel weiterhilft. Bei weiteren Fragen hinterlasse doch einfach einen Kommentar oder schreib mich über LinkedIn an.

Links:

Veröffentlicht von

Marcus Wegener

Marcus Wegener

Marcus Wegener ist Anwendungsentwickler für Business Intelligence und erstellt Lösungen, mit denen sich große Datenmengen schnell analysieren lassen. Kunden nutzen seine Lösungen, um die Vergangenheit zu analysieren, die Gegenwart zu steuern und die Zukunft zu planen, um damit mehr Erfolg zu generieren. Dabei ist seine einzigartige Kombination aus Wissen und Auffassungsgabe ein Garant für ihren Erfolg.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.