Zusätzliche Zeitintelligenzberechnungen

Abgeschlossen

Es gibt andere DAX-Zeitintelligenzfunktionen, die die Rückgabe eines einzelnen Datums betreffen. In dieser Lerneinheit lernen Sie diese Funktionen kennen, indem Sie sie in zwei verschiedenen Szenarien anwenden.

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

Neue Vorkommen berechnen

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 ist es, das folgende Measure der Tabelle Sales hinzuzufügen, die die Anzahl der unterschiedlichen Kunden seit bestehen (LTD) zählt. „Seit bestehen“ 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 seit Bestehen bis zum Ende jedes Monats liefert.

Der Screenshot zeigt ein Matrixvisual mit Gruppierung nach Year und Month in den Zeilen und Revenue, Revenue YTD, Revenue YoY % und Customers LTD.

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

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

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

Screenshot einer Matrixdarstellung mit Gruppierungen nach Year und Month in den Zeilen und Revenue, Revenue YTD, Revenue YoY %, und New Customers. Die Werte New Customers sind hervorgehoben.

Beachten Sie für die Variable CustomersPrior, dass die Funktion DATESBETWEEN Datumsangaben bis zum ersten Datum im Filterkontext minus eins enthält. Da Power BI Datumsangaben intern als Zahlen speichert, können Sie Zahlen hinzufügen 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.

Screenshot eines Modelldiagramms, das aus drei Tabellen besteht: „Product“, „Date“ und „Inventory“. Die Tabellen „Product“ und „Date“ stehen jeweils in einer Eins-zu-Viele-Beziehung zur Tabelle „Inventory“.

Beachten Sie, dass im Diagramm drei Tabellen angezeigt werden: Product, Date und Inventory. In der Tabelle Inventory werden für jedes Datum und Produkt Momentaufnahmen von Einheitensalden gespeichert. Vor allem darf die Tabelle keine fehlenden Datumsangaben und keine doppelten Einträge für ein Produkt am gleichen Datum enthalten. Der letzte Momentaufnahmedatensatz wurde 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.

Screenshot eines Matrixvisuals mit dem Titel „FY2020 Mountain-200 Bike Stock”. Die Produkte sind in den Zeilen und die Monate in den 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 aus diesem Grund das Feld UnitsBalance aus dem Matrixvisual.

Nun fügen Sie der Tabelle Inventory ein Measure hinzu, dass den Wert UnitsBalancefür eine einzelne Datei zusammenfasst. Das Datum ist das letzte Datum von jedem Zeitraum. Dies kann durch die Verwendung der Funktion LASTDATE erreicht werden. Formatieren Sie das Measure als ganze Zahl mit dem 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 (Maßnahmen erlauben keine direkten Verweise auf Spalten). Da jedoch für jedes Produkt und jedes Datum nur eine Zeile vorhanden ist, wird die Funktion SUM nur auf eine einzige Zeile angewendet.

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.

Screenshot der Matrix jetzt mit den Spalten „Juni 2020“ und „Gesamt“ als 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 birgt inhärente Probleme: Ein aufgezeichnetes Datum existiert möglicherweise nicht, weil es noch nicht eingetreten ist oder weil Lagerbestände an Wochenenden nicht erfasst 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 die Funktion LASTNONBLANK verwenden, um diese Aufgabe abzuschließen.

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

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).

Der Screenshot zeigt, dass das Matrixvisual jetzt Werte für Juni 2020 und die Summe umfasst.

Bei der Funktion LASTNONBLANK handelt es sich um 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 erfolgt die Iteration von FIRSTNONBLANK in aufsteigender chronologischer Reihenfolge.) Für jedes Datum wertet es den übergebenen Ausdruck aus. Wenn ein anderes Ergebnis als BLANK auftritt, gibt die Funktion das Datum zurück. Dann wird dieses Datum verwendet, um die Funktion CALCULATE zu filtern.

Hinweis

Die Funktion LASTNONBLANK wertet den Ausdruck im Kontext der Zeile aus. Die Funktion CALCULATE muss verwendet werden, um den Zeilenkontext in den Filterkontext zu überführen, damit der Ausdruck korrekt ausgewertet werden kann.

Jetzt sollten Sie in der Tabelle Inventory die Spalte UnitsBalance ausblenden. Dadurch wird verhindert, dass Berichtsautoren Einheitensalden für Momentaufnahmen unangemessen zusammenfassen.