WINDOW
Gilt für: Berechnete Spalte Berechnete Tabelle Ergebnis Visuelle Berechnung
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:
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.
Zugehöriger Inhalt
INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
RANGE
RANK
ROWNUMBERRUNNINGSUM