Weitere Zeitintelligenzberechnungen

Abgeschlossen

Es gibt andere DAX-Zeitintelligenzfunktionen, die die Rückgabe eines einzelnen Datums betreffen. Sie erfahren mehr über diese Funktionen, indem Sie sie in zwei verschiedenen Szenarien anwenden.

Die DAX-Funktionen FIRSTDATE und LASTDATE geben das erste bzw. das letzte Datum im aktuellen Filterkontext für die angegebene Datumsspalte zurück.

Berechnen neuer Vorkommen

Eine weiteres Einsatzgebiet von Zeitintelligenzfunktionen ist das Zählen neuer Vorkommen. Im folgenden Beispiel wird gezeigt, wie Sie die Anzahl von neuen Kunden für einen Zeitraum berechnen können. Ein neuer Kunde wird in dem Zeitraum gezählt, in dem er seinen ersten Kauf getätigt hat.

Ihre erste Aufgabe besteht darin, der Tabelle Sales die folgende Measuredefinition hinzuzufügen, die die Anzahl der unterschiedlichen Kunden für Life-To-Date (LTD) zählt. „Life-To-Date“ bedeutet vom Anfang der Zeit bis zum letzten Datum im Filterkontext. Formatieren Sie das Measure als ganze Zahl mit Tausendertrennzeichen.

Customers LTD =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD

Fügen Sie dem Matrixvisual das Measure Customers LTD hinzu. Beachten Sie, dass dies ein Ergebnis der unterschiedlichen Kunden für LTD bis zum Ende jedes Monats liefert.

Abbildung eines Matrixvisuals mit Gruppierung für Jahr und Monat in den Zeilen „Revenue“, „Revenue YTD“, „Revenue YoY %“ und „Customers LTD“

Die DATESBETWEEN-Funktion gibt eine Tabelle mit einer Spalte von Datumsangaben zurück, die mit einem Startdatum beginnt und bis zu einem Enddatum fortgesetzt wird. Wenn das Startdatum BLANK ist, wird das erste Datum in der Datumsspalte verwendet. (Wenn das Enddatum BLANK ist, wird umgekehrt das letzte Datum in der Datumsspalte verwendet.) In diesem Fall wird das Enddatum durch die MAX-Funktion ermittelt, die das letzte Datum im Filterkontext zurückgibt. Wenn sich der Monat August 2017 im Filterkontext befindet, gibt die MAX-Funktion daher den 31. August 2017 zurück, und die DATESBETWEEN-Funktion gibt alle Datumsangaben bis zum 31. August 2017 zurück.

Als Nächstes ändern Sie das Measure, indem Sie es in New Customers umbenennen und eine zweite Variable hinzufügen, in der die Anzahl der unterschiedlichen Kunden vor dem Zeitraum im Filterkontext gespeichert werden soll. Die RETURN-Klausel subtrahiert nun diesen Wert von den LTD-Kunden, um ein Ergebnis zu erzeugen, das der Anzahl der neuen Kunden im Zeitraum entspricht.

New Customers =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
    'Sales Order'[Channel] = "Internet"
    )
VAR CustomersPrior =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MIN('Date'[Date]) - 1
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD - CustomersPrior

Abbildung eines Matrixvisuals mit Gruppierung für Jahr und Monat in den Zeilen „Revenue“, „Revenue YTD“, „Revenue YoY %“ und „New Customers“. Die Werte für „New Customers“ sind hervorgehoben.

Beachten Sie, dass die DATESBETWEEN-Funktion für die Variable CustomersPrior Datumsangaben bis zum ersten Datum im Filterkontext minus eins enthält. Da Microsoft Power BI Daten intern als Zahlen speichert, können Sie Zahlen addieren oder subtrahieren, um ein Datum zu verschieben.

Momentaufnahmeberechnungen

Gelegentlich werden Faktendaten als Momentaufnahmen gespeichert. Gängige Beispiele hierfür sind Lagerbestände oder Kontostände. Eine Momentaufnahme der Werte wird in regelmäßigen Abständen in die Tabelle geladen.

Sie können Momentaufnahmewerte (z. B. Lagerbestände) in jeder Dimension außer dem Datum zusammenfassen. Das Addieren von Bestandszahlen über Produktkategorien hinweg führt zu einer aussagekräftigen Zusammenfassung, das Addieren von Bestandszahlen über Tage hinweg jedoch nicht. Das Addieren des Aktienbestands von gestern zum heutigen Aktienbestand ist kein nützlicher Vorgang (es sei denn, Sie möchten das Ergebnis mitteln).

Wenn Sie Momentaufnahmetabellen zusammenfassen, können Measureformeln mithilfe von DAX-Zeitintelligenzfunktionen einen einzelnen Datumsfilter erzwingen.

Im folgenden Beispiel untersuchen Sie ein Szenario für das Unternehmen Adventure Works. Wechseln Sie zur Modellansicht, und wählen Sie das Modelldiagramm Inventory aus.

Abbildung eines Modelldiagramms, das aus drei Tabellen besteht: „Product“, „Date“ und „Inventory“. Die Tabellen „Product“ und „Date“ weisen jeweils eine 1:n-Beziehung zur Tabelle „Inventory“ auf.

Beachten Sie, dass das Diagramm drei Tabellen zeigt: Product, Date und Inventory. In der Tabelle Inventory werden Momentaufnahmen der Einheitenbestände für jedes Datum und Produkt gespeichert. Vor allem darf die Tabelle keine fehlenden Datumsangaben und keine doppelten Einträge für ein Produkt am selben Datum enthalten. Außerdem wurde der letzte Momentaufnahmedatensatz für den 15. Juni 2020 gespeichert.

Wechseln Sie nun zur Berichtsansicht, und wählen Sie Seite 2 des Berichts aus. Fügen Sie dem Matrixvisual die Spalte UnitsBalance der Tabelle Inventory hinzu. Die Standardzusammenfassung ist auf Summenwerte festgelegt.

Abbildung eines Matrixvisuals mit dem Titel „FY2020 Mountain-200 Bike Stock“. Die Produkte sind in Zeilen und die Monate in Spalten gruppiert. Für jedes Produkt und jeden Monat werden hohe Werte angezeigt.

Diese Visualkonfiguration ist ein Beispiel dafür, wie Sie einen Momentaufnahmewert nicht zusammenfassen sollten. Das Addieren täglicher Momentaufnahmebilanzen führt nicht zu einem sinnvollen Ergebnis. Entfernen Sie daher das Feld UnitsBalance aus dem Matrixvisual.

Nun fügen Sie der Tabelle Inventory eine Measuredefinition hinzu, die den Wert UnitsBalancefür ein einzelnes Datum addiert. Das Datum ist das letzte Datum jedes Zeitraums. Dieses wird mithilfe der LASTDATE-Funktion abgerufen. Formatieren Sie das Measure als ganze Zahl mit Tausendertrennzeichen.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTDATE('Date'[Date])
)

Hinweis

Beachten Sie, dass in der Measureformel die SUM-Funktion verwendet wird. Es muss eine Aggregatfunktion verwendet werden (Measures lassen keine direkten Verweise auf Spalten zu), aber da für jedes Produkt nur eine Zeile pro Datum vorhanden ist, bearbeitet die SUM-Funktion nur eine einzelne Zeile.

Fügen Sie dem Matrixvisual das Measure Stock on Hand hinzu. Der Wert für jedes Produkt basiert jetzt auf dem letzten Bestand der aufgezeichneten Einheiten für jeden Monat.

Abbildung eines Matrixvisuals mit dem Titel „FY2020 Mountain-200 Bike Stock“. Die Produkte sind in Zeilen und die Monate in Spalten gruppiert. Für jedes Produkt und jeden Monat werden niedrigere Werte angezeigt. Der Juni 2020 und die Summe sind BLANK.

Das Measure gibt für Juni 2020 BLANK zurück, da für das letzte Datum im Juni kein Datensatz vorhanden ist. Gemäß den Daten ist dies noch nicht geschehen.

Das Filtern nach dem letzten Datum im Filterkontext weist inhärente Probleme auf: Ein aufgezeichnetes Datum ist möglicherweise nicht vorhanden, da es noch nicht eingetreten ist oder da Aktienbestände nicht an Wochenenden aufgezeichnet werden.

Der nächste Schritt besteht darin, die Measureformel so anzupassen, dass das letzte Datum ohne BLANK-Ergebnis ermittelt wird, und dann nach diesem Datum zu filtern. Sie können diese Aufgabe mithilfe der DAX-Funktion LASTNONBLANK umsetzen.

Verwenden Sie die folgende Measuredefinition, um das Measure Stock on Hand zu ändern.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTNONBLANK(
        'Date'[Date],
        CALCULATE(SUM(Inventory[UnitsBalance]))
    )
)

Beachten Sie im Matrixvisual die Werte für Juni 2020 und die Summe (die für das gesamte Jahr steht).

Abbildung des Matrixvisuals, das jetzt Werte für Juni 2020 und die Summe enthält

Die LASTNONBLANK-Funktion ist eine Iteratorfunktion. Sie gibt das letzte Datum zurück, das ein anderes Ergebnis als BLANK erzeugt. Dieses Ergebnis wird erreicht, indem alle Datumsangaben im Filterkontext in absteigender chronologischer Reihenfolge iterativ durchlaufen werden. (Umgekehrt iteriert FIRSTNONBLANK in aufsteigender chronologischer Reihenfolge.) Für jedes Datum wertet die Funktion den übergebenen Ausdruck aus. Wenn ein anderes Ergebnis als BLANK auftritt, gibt die Funktion das Datum zurück. Mit diesem Datum wird dann die CALCULATE-Funktion gefiltert.

Hinweis

Die LASTNONBLANK-Funktion wertet den Ausdruck im Zeilenkontext aus. Für den Übergang vom Zeilenkontext zum Filterkontext muss die CALCULATE-Funktion verwendet werden, damit der Ausdruck richtig ausgewertet wird.

Sie sollten jetzt die Spalte UnitsBalance der Tabelle Inventory ausblenden. Dadurch wird verhindert, dass Berichtsautoren Einheitenwerte aus Momentaufnahmen unzulässig zusammenfassen.