WINDOW

Gibt mehrere Zeilen zurück, die sich innerhalb des angegebenen Intervalls befinden.

Syntax

WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Parameter

Begriff Definition
from Gibt an, wo das Fenster beginnt. Hierbei kann es sich um einen beliebigen DAX-Ausdruck handeln, der einen Skalarwert zurückgibt.
Das Verhalten richtet sich nach dem Parameter <from_type>:
– Wenn <from_type> auf REL festgelegt ist, ist dies die Zeilenanzahl, die von der aktuellen Zeile zurück (negativer Wert) oder vorwärts (positiver Wert) gewechselt werden muss, um die erste Zeile im Fenster zu erhalten.
– Wenn <from_type> auf ABS festgelegt und <from> positiv ist, dann ist dies die Position des Fensterbeginns, berechnet vom Anfang der Partition. Die Indizierung erfolgt auf der Basis 1. Zum Beispiel bedeutet 1, dass das Fenster am Anfang der Partition beginnt. Wenn der <from>-Wert negativ ist, ist dies die Position des Fensterbeginns vom Ende der Partition. -1 steht für die letzte Zeile in der Partition.
from_type Ändert das Verhalten des <from>-Parameters. Mögliche Werte sind ABS (absolut) und REL (relativ). Die Standardeinstellung lautet REL.
zu Identisch mit <from>, aber gibt das Ende des Fensters an. Die letzte Zeile ist im Fenster enthalten.
to_type Identisch mit <from_type>, ändert jedoch das Verhalten von <to>.
relation (Optional) Ein Tabellenausdruck, über den die Ausgabezeilen zurückgegeben werden.
Wenn angegeben, müssen alle Spalten in <partitionBy> von dort oder aus einer zugehörigen Tabelle stammen.
Bei Auslassung:
– <orderBy> muss explizit angegeben werden.
– Alle <orderBy>- und <partitionBy>-Ausdrücke müssen vollqualifizierte Spaltennamen sein und aus einer einzigen Tabelle stammen.
– Für alle Spalten in <orderBy> und <partitionBy> wird standardmäßig ALLSELECTED() verwendet.
Achse (Optional) Eine Achse in der visuellen Form. Nur in visuellen Berechnungen verfügbar und ersetzt <relation>.
orderBy (Optional) Eine ORDERBY()-Klausel mit den Ausdrücken, die definieren, wie jede Partition sortiert wird.
Bei Auslassung:
– <relation> muss explizit angegeben werden.
– Standardmäßig erfolgt die Sortierung nach jeder Spalte in <relation>, die nicht bereits in <partitionBy> angegeben ist.
Leerzeichen (Optional) Eine Enumeration, die definiert, wie leere Werte beim Sortieren behandelt werden.
Dieser Parameter ist für die zukünftige Verwendung reserviert.
Derzeit ist der einzige unterstützte Wert DEFAULT, wobei das Verhalten für numerische Werte darin besteht, dass leere Werte zwischen 0 und negativen Werten angeordnet werden. Bei Zeichenfolgen werden leere Werte vor allen anderen Zeichenfolgen angeordnet, einschließlich leerer Zeichenfolgen.
partitionBy (Optional) Eine PARTITIONBY()-Klausel mit Spalten, die definieren, wie <relation> partitioniert wird. Bei Auslassung wird <relation> als eine einzelne Partition behandelt.
matchBy (Optional) Eine MATCHBY()-Klausel, die die Spalten enthält, die definieren, wie Daten abgeglichen werden und die aktuelle Zeile identifiziert wird.
reset (Optional) Nur in visuellen Berechnungen verfügbar. Gibt an, ob die Berechnung zurückgesetzt wird und auf welcher Ebene der Spaltenhierarchie der visuellen Form. Akzeptierte Werte sind: NONE, LOWESTPARENT, HIGHESTPARENT oder ein Integer. Das Verhalten hängt vom Integervorzeichen ab:
 – Wenn null oder ausgelassen, wird die Berechnung nicht zurückgesetzt. Gleichbedeutend mit NONE.
 – Wenn der Integer positiv ist, identifiziert er die Spalte beginnend mit dem höchsten Wert, unabhängig vom Aggregationsintervall. HIGHESTPARENT entspricht 1.
 – Wenn der Integer negativ ist, identifiziert er die Spalte beginnend mit dem niedrigsten Wert, relativ zum aktuellen Aggregationsintervall. LOWESTPARENT entspricht -1.

Rückgabewert

Alle Zeilen aus dem Fenster.

Bemerkungen

Mit Ausnahme von Spalten, die von DAX-Tabellenfunktionen hinzugefügt werden, muss jede Spalte in <relation>, wenn <matchBy> nicht vorhanden ist, oder jede Spalte in <matchBy> und <partitionBy>, wenn <matchBy> vorhanden ist, über einen entsprechenden äußeren Wert verfügen, um die aktuelle Zeile zu definieren, für die die Aktion ausgeführt werden soll. Wenn <from_type> und <to_type> beide den Wert ABS aufweisen, dann gilt das Folgende nur für die <partitionBy>-Spalten:

  • Wenn es genau eine entsprechende äußere Spalte gibt, wird deren Wert verwendet.
  • Wenn keine entsprechende äußere Spalte vorhanden ist, lautet das Vorgehen wie folgt:
    • WINDOW ermittelt zunächst alle Spalten, die nicht über eine entsprechende äußere Spalte verfügen.
    • Für jede Kombination vorhandener Werte für diese Spalten im übergeordneten Kontext von WINDOW wird WINDOW ausgewertet, und es werden die entsprechenden Zeilen zurückgegeben.
    • Die endgültige Ausgabe von WINDOW ist eine Vereinigung dieser Zeilen.
  • Wenn es mehr als eine entsprechende äußere Spalte gibt, wird ein Fehler zurückgegeben.

Wenn alle Spalten von <relation> von DAX-Tabellenfunktionen hinzugefügt wurden, wird ein Fehler zurückgegeben.

Wenn <matchBy> vorhanden ist, versucht WINDOW, die Spalten matchBy< und >partitionBy< zu verwenden>, um die Zeile zu identifizieren.
Wenn <matchBy> nicht vorhanden ist, und die in <orderBy> und <partitionBy> angegebenen Spalten nicht jede Zeile in <relation> eindeutig identifizieren können, gilt Folgendes:

  • WINDOW versucht, die kleinstmögliche Anzahl zusätzlicher Spalten zu finden, die zur eindeutigen Identifizierung jeder Zeile erforderlich sind.
  • Wenn solche Spalten gefunden werden, fügt WINDOW diese neuen Spalten automatisch an <orderBy> an, und jede Partition wird anhand dieses neuen Satzes von orderBy-Spalten sortiert.
  • Wenn keine solchen Spalten gefunden werden, wird ein Fehler zurückgegeben.

In den folgenden Fällen wird eine leere Tabelle zurückgegeben:

  • In <relation> ist kein entsprechender äußerer Wert einer <orderBy>- oder <partitionBy>-Spalte vorhanden.
  • Das gesamte Fenster liegt außerhalb der Partition, oder das Fenster beginnt nach dem Ende der Partition.

Wenn WINDOW innerhalb einer berechneten Spalte verwendet wird, die in derselben Tabelle wie <relation> definiert ist, und <orderBy> nicht angegeben ist, wird ein Fehler zurückgegeben.

Wenn Fensterbeginn vor der ersten Zeile liegt, wird er auf die erste Zeile festgelegt. Wenn sich das Ende des Fensters nach der letzten Zeile der Partition befindet, wird es auf die letzte Zeile festgelegt.

<reset> kann nur in visuellen Berechnungen verwendet werden und kann nicht in Kombination mit <orderBy> oder <partitionBy> verwendet werden. Wenn <reset> vorhanden ist, kann <axis> angegeben werden, aber <relation> kann nicht angegeben werden.

Beispiel 1 – Measure

Die folgende Messung:

3-day Average Price = 
AVERAGEX(
    WINDOW(
        -2,REL,0,REL,
        SUMMARIZE(ALLSELECTED('Sales'), 'Date'[Date], 'Product'[Product]),
        ORDERBY('Date'[Date]),
        KEEP,
        PARTITIONBY('Product'[Product])
    ), 
    CALCULATE(AVERAGE(Sales[Unit Price]))
)

Gibt den 3-tägigen Durchschnitt der Einzelpreise für jedes Produkt zurück. Beachten Sie, dass das 3-Tage-Fenster drei Tage umfasst, an denen das Produkt verkauft wurde, nicht unbedingt drei aufeinanderfolgende Kalendertage.

Beispiel 2 – Measure

Die folgende Messung:

RunningSum =
SUMX (
    WINDOW (
        1, ABS, 0, REL,
        ALLSELECTED (
            'Date'[Fiscal Year],
            'Date'[Month Number Of Year]
        ),
        PARTITIONBY ( 'Date'[Fiscal Year] )
    ),
    [Total Sales]
)

Liefert die laufende Summe für den Gesamtumsatz nach „Monat Jahreszahl“, wobei für jedes Geschäftsjahr neu begonnen wird:

Year Monat Jahreszahl Sales Amount LaufendeSumme
GJ2018 1 1.327.675 USD 1.327.675 USD
GJ2018 2 3.936.463 USD 5.264.138 USD
GJ2018 3 700.873 USD 5.965.011 USD
GJ2018 4 1.519.275 USD 7.484.286 USD
GJ2018 5 2.960.378 USD 10.444.664 USD
GJ2018 6 1.487.671 USD 11.932.336 USD
GJ2018 7 1.423.357 USD 13.355.693 USD
GJ2018 8 2.057.902 USD 15.413.595 USD
GJ2018 9 2.523.948 USD 17.937.543 USD
GJ2018 10 561.681 USD 18.499.224 USD
GJ2018 11 4.764.920 USD 23.264.145 USD
GJ2018 12 596.747 USD 23.860.891 USD
GJ2019 1 1.847.692 USD 1.847.692 USD
GJ2019 2 2.829.362 USD 4.677.054 USD
GJ2019 3 2.092.434 USD 6.769.488 USD
GJ2019 4 2.405.971 USD 9.175.459 USD
GJ2019 5 3.459.444 USD 12.634.903 USD
GJ2019 6 2.850.649 USD 15.485.552 USD
GJ2019 7 2.939.691 USD 18.425.243 USD
GJ2019 8 3.964.801 USD 22.390.045 USD
GJ2019 9 3.287.606 USD 25.677.650 USD
GJ2019 10 2.157.287 USD 27.834.938 USD
GJ2019 11 3.611.092 USD 31.446.030 USD
GJ2019 12 2.624.078 USD 34.070.109 USD
GJ2020 1 3.235.187 USD 3.235.187 USD
GJ2020 2 4.070.046 USD 7.305.233 USD
GJ2020 3 4.429.833 USD 11.735.066 USD
GJ2020 4 4.002.614 USD 15.737.680 USD
GJ2020 5 5.265.797 USD 21.003.477 USD
GJ2020 6 3.465.241 USD 24.468.717 USD
GJ2020 7 3.513.064 USD 27.981.781 USD
GJ2020 8 5.247.165 USD 33.228.947 USD
GJ2020 9 5.104.088 USD 38.333.035 USD
GJ2020 10 3.542.150 USD 41.875.184 USD
GJ2020 11 5.151.897 USD 47.027.081 USD
GJ2020 12 4.851.194 USD 51.878.275 USD

Beispiel 3 – visuelle Berechnung

Die folgende DAX-Abfrage für die visuelle Berechnung:

TotalSalesRunningSumByYear = SUMX(WINDOW(0, ABS, 0, REL, ROWS, HIGHESTPARENT), [SalesAmount])

gibt den kumulierten Gesamtumsatz nach Monat zurück, der pro Jahr berechnet wird. Die Werte 1 und -2 können anstelle von HIGHESTPARENT mit denselben Ergebnissen verwendet werden.

Der folgende Screenshot zeigt die visuelle Matrix und den Ausdruck der visuellen Berechnung:

DAX visual calculation

Beispiel 4 – visuelle Berechnung

Die folgende DAX-Abfrage für die visuelle Berechnung:

TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])

gibt den kumulierten Gesamtumsatz nach Monat zurück, der pro Quartal berechnet wird.

INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
RANGE
RANK
ROWNUMBERRUNNINGSUM