Beginnen wir mit einer einfachen Tabelle:

Abbildung 1 – Die einfache Tabelle zunächst (Abbildung des Autors)

Jede Zeile im Matrix -Visible zeigt den gesamten On-line -Umsatz für jeden Monat.
So weit, ist es intestine.

Die Interpretation ist, dass wir sehen, dass die gesamten On-line -Verkäufe, die nach Monat gefiltert sind.

Aber das ist nicht die ganze Wahrheit.

Schauen wir uns das Datenmodell an:

Abbildung 2 – Der Teil des Datenmodells mit der Datumstabelle und der Faktentabelle (Abbildung des Autors)

Wenn Sie genau hinschauen, sehen Sie, dass die Beziehung zwischen den beiden Datumsspalten aufgebaut ist.

Es gibt keine Beziehung zur Monatsspalte.

Wenn wir diese Route nehmen, ist die obige Interpretation nicht ganz genau.

Die vollständige Interpretation sollte sein: Jede Zeile zeigt die Gesamtzahl der On-line -Verkäufe, die nach der Datums Tabelle gefiltert sind. Die Zeilen der Datums Tabelle sind nach den Monaten gruppiert. Jede Reihe zeigt den Gesamtumsatz für alle Tage für jeden Monat.

Wir sind ein Schritt näher an das Verständnis von DAX im Allgemeinen und die Zeit intelligenz im Besonderen, wenn wir dieses Element erkennen.

Lass uns noch einen Schritt weiter gehen.

YTD und die grundlegende Abfrage

Fügen wir nun ein YTD -Maß hinzu, um zu untersuchen, was passiert:

Abbildung 3 – Das YTD -Maß und die Ergebnisse befinden sich in der gleichen Tabelle wie zuvor (Abbildung des Autors)

Die Maßnahme ist nichts Besonderes und die Ergebnisse sind leicht zu verstehen.

Lassen Sie uns nun einen Blick darauf werfen, was genau das ist Datesytd () Funktion tut.

Die Erklärung von Dax.Information sagt: „Gibt eine zurück Datensatz im Jahr bis zum letzten Datum im Filterkontext sichtbar “.

Was bedeutet das genau?

Um diese Frage einzuführen, schreiben wir zuerst eine DAX -Abfrage, um die Liste der Daten im Juni 2024 zu erhalten, wie es in der obigen Visualisierung der Fall ist:

DEFINE
    VAR YearFilter = TREATAS({ 2024 }, 'Date'(12 months))
    VAR MonthFilter = TREATAS({ 6 }, 'Date'(Month))
    
    
EVALUATE
    SUMMARIZECOLUMNS('Date'(Date)
                        ,YearFilter
                        ,MonthFilter
                        )

Das Ergebnis ist eine Liste von 30 Tagen für Juni:

Abbildung 4 – Basisabfrage, um alle Tage für Juni 2024 zu erhalten (Abbildung des Autors)

Dies ist der Filter, der in der oben gezeigten Matrix für die Zeile für Juni 2024 angewendet wird.

Was ist das Ergebnis, wenn wir die DateSYTD () -Funktion auf das Ergebnis anwenden?

Hier ist die Frage:

DEFINE
    VAR YearFilter = TREATAS({ 2024 }, 'Date'(12 months))
    VAR MonthFilter = TREATAS({ 6 }, 'Date'(Month))
    
    VAR BasisDates = CALCULATETABLE(
                            SUMMARIZECOLUMNS('Date'(Date)
                                        ,YearFilter
                                        ,MonthFilter
                                        )
                                    )
    
    VAR YTDDates = DATESYTD(TREATAS(BasisDates, 'Date'(Date))
                                    )
                                    
EVALUATE
    YTDDates

Und hier das Ergebnis:

Abbildung 5 – Liste der Daten beginnt am ersten Januar bis zum letzten Tag im Juni 2024 (Abbildung des Autors)

Es handelt sich um eine Liste von 182 Reihen, die alle Daten von Anfang des Jahres bis zum letzten Tag im Juni 2024 enthalten.

Dies ist die Definition von YTD.

Wenn wir uns die folgende Maßnahme ansehen:

On-line Gross sales (YTD) =
VAR YTDDates = DATESYTD('Date'(Date))

RETURN
    CALCULATE((Sum On-line Gross sales)
                ,YTDDates
                )

Wir erkennen, dass die Variable ytddates „nur“ eine Liste von Daten ist, die als Filter für die Funktion calculate () angewendet werden.

Dies ist der Schlüssel zu Allzeit -Intelligenzfunktionen.

Gehen Sie ein Jahr zurück – einige Beispiele

Was passiert, wenn Sie eine andere Funktion auf das Ergebnis anwenden?

Zum Beispiel, Sameperiodlastyear ()?

Um diese Frage zu beantworten, verwende ich die folgende DAX -Abfrage:

DEFINE
    VAR YearFilter = TREATAS({ 2024 }, 'Date'(12 months))
    VAR MonthFilter = TREATAS({ 6 }, 'Date'(Month))
    
    VAR BasisDates = CALCULATETABLE(
                            SUMMARIZECOLUMNS('Date'(Date)
                                        ,YearFilter
                                        ,MonthFilter
                                        )
                                    )
    
    VAR YTDDates = DATESYTD(TREATAS(BasisDates, 'Date'(Date))
                                    )
                                    
    VAR YTDDatesPY = SAMEPERIODLASTYEAR(YTDDates)
                                    
EVALUATE
    YTDDatesPY

Ich habe die Aufruf von samperiodlastyear () absichtlich von DateSytd () getrennt, um das Lesen zu erleichtern. Es wäre möglich gewesen, DateSytd () in samperiodlastyear () zu nisten.

Diesmal haben wir 181 Reihen, da 2024 ein Schaltjahr warfare.
Und die Daten werden um ein Jahr zurückgezogen:

Abbildung 6 – Das Ergebnis der Abfrage nach Anwendung von samperiodlastyear () (Abbildung vom Autor)

Wenn wir additionally eine Zeit intelligenz auf eine Maßnahme anwenden, gibt die Funktion, beispielsweise DateSytd (), eine Liste von Daten zurück.
Bitte beachten Sie: Wenn Sie den Filter anwenden, beliebig Bestehende Filter in der Datumstabelle werden entfernt.

Benutzerdefinierte Logik

Lassen Sie uns dieses Wissen über die benutzerdefinierte Zeit intelligenzlogik nutzen.

Lassen Sie uns zunächst den Filter für Jahr und Monat leicht ändern:

DEFINE
    VAR YearMonthFilter = TREATAS({ 202406  }, 'Date'(MonthKey))
    
EVALUATE
    SUMMARIZECOLUMNS('Date'(Date)
                        , YearMonthFilter
                        )

Das Ergebnis dieser Abfrage ist das gleiche wie zu Beginn dieses Artikels.

Dieses Mal habe ich den Filter mit einem numerischen Wert in der Spalte (monatKey) festgelegt.

Wie kann ich zum Vorjahr zurückkehren?

Wenn Sie mathematisch denken, ist es nur durch Subtrahieren von 100:

202406 – 100 = 202306

Versuchen wir es:

Abbildung 7 – Das Ergebnis der Abfrage nach Abzug von 100 aus der Spalte (Monthkey) (Abbildung des Autors)

Sie können dies auch mit anderen numerischen Formaten tun.

Wenn Sie zum Beispiel ein Geschäftsjahr wie folgt nehmen: 2425 (für das Geschäftsjahr 24/25)

Sie können 101 ableiten, um das vorherige Geschäftsjahr zu erhalten: 2425 – 101 = 2324

Ein weiteres Beispiel für eine benutzerdefinierte Zeit intelligenzlogik ist ein laufender Durchschnitt, in dem wir für jeden Tag den Durchschnittswert in den letzten 10 Tagen berechnen:

Abbildung 8 – Der Code und die Ergebnisse der Maßnahme für einen gleitenden Durchschnitt in den letzten zehn Tagen (Abbildung des Autors)

Da der Inhalt des Variablen -Daterange wieder eine Liste von Daten ist, kann ich die Funktion sameperiodlastyear () auf sie anwenden und das Ergebnis erhalten, das ich benötige:

DEFINE
    VAR YearFilter = TREATAS({ 2024 }, 'Date'(12 months))
    VAR MonthFilter = TREATAS({ 6 }, 'Date'(Month))
    
    // 1. Get the primary and final Date for the present Filter Context
    VAR MaxDate = CALCULATE(MAX( 'Date'(Date) )
                            ,YearFilter
                            ,MonthFilter
                            )
    
    VAR MinDate =
        CALCULATE(
            DATEADD( 'Date'(Date), - 10, DAY )
            ,'Date'(Date) = MaxDate
            )
    
    // 2. Generate the Date vary wanted for the Transferring common (4 months)
    VAR  DateRange =
     CALCULATETABLE(
        DATESBETWEEN( 'Date'(Date)
            ,MinDate
            ,MaxDate
        )
    )
    
EVALUATE
    SAMEPERIODLASTYEAR( DateRange )

Und das ist das Ergebnis:

Abbildung 9 – Das Ergebnis für den gleitenden Durchschnitt für das Vorjahr (Abbildung des Autors)

Diese Logik gibt 11 Zeilen zurück, da sie den letzten Tag des Monats enthält. Abhängig vom erforderlichen Ergebnis müssen wir die Artwork und Weise, wie wir die erste und letzte Daten der Datumsliste berechnen (der auf die Maßnahme angewandte Filter), anpassen.

Dies ist natürlich eine Wiederholung dessen, was ich oben gezeigt habe. Es zeigt jedoch, dass der gleiche Ansatz auf verschiedene Szenarien angewendet werden kann.

Sobald Sie dies verstehen, wird Ihre Arbeit mit Zeit intelligenzfunktionen und anderen Funktionen, die Werte Tabellen als Eingabe akzeptieren, viel einfacher zu verstehen und zu meistern.

Abschluss

Während ich Dax Studio für die Abfragen verwendet habe, können Sie dieselben Abfragen im DAX -Abfrage -Software im Energy BI -Desktop verwenden.

Ich habe diese Fragen absichtlich verwendet, um zu demonstrieren, dass wir ständig mit Tabellen in DAX arbeiten, obwohl wir uns dessen möglicherweise nicht immer bewusst sind.

Aber es ist ein wichtiges Element, das uns auf dem Weg zum Verständnis von DAX hilft.

Obwohl ein Teil des hier gezeigten DAX -Codes mit dem Aufkommen der Neuen veraltet sein kann Kalenderbasierte Zeit Intelligence Function in Energy BI, die hier erläuterten Prinzipien bleiben gültig. Die Funktionen wie Datesytd () oder samperiodlastyear () existieren immer noch und arbeiten auf die gleiche Weise wie zuvor. Derzeit wird sich auf dieser Seite nichts ändern, wie die hier beschriebenen Konzepte noch gültig sind.

Referenzen

Wie in meinen vorherigen Artikeln verwende ich den Contoso -Beispiel -Datensatz. Sie können den ContoSoretailDW -Datensatz kostenlos von Microsoft herunterladen Hier.

Die Contoso -Daten können unter der MIT -Lizenz frei verwendet werden, wie beschrieben in diesem Dokument. Ich habe den Datensatz geändert, um die Daten auf zeitgenössische Daten zu verschieben.

Von admin

Schreibe einen Kommentar

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