WINDOW
Si applica a: Calcolo visivo misura tabella calcolata colonna calcolata
Restituisce più righe posizionate all'interno dell'intervallo specificato.
Sintassi
WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
Parametri
Termine | Definizione |
---|---|
da | Indica dove viene avviata la finestra. Può essere qualsiasi espressione DAX che restituisce un valore scalare. Il comportamento dipende dal parametro <from_type> : - Se <from_type> è REL, il numero di righe da riportare indietro (valore negativo) o in avanti (valore positivo) dalla riga corrente per ottenere la prima riga nella finestra. - Se <from_type> è ABS e <from> è positivo, allora è la posizione dell'inizio della finestra dall'inizio della partizione. L'indicizzazione è basata su 1. Ad esempio, 1 indica che la finestra inizia dall'inizio della partizione. Se <from> è negativo, è la posizione dell'inizio della finestra dalla fine della partizione. -1 indica l'ultima riga nella partizione. |
from_type | Modifica il comportamento del parametro <from>. I valori possibili sono ABS (assoluto) e REL (relativo). Il valore predefinito è REL. |
a | Uguale a <from>, ma indica la fine della finestra. L'ultima riga è inclusa nella finestra. |
to_type | Uguale a <from_type>, ma modifica il comportamento di <to>. |
relazione | (Facoltativo) Espressione di tabella da cui vengono restituite le righe di output. Se specificato, tutte le colonne in <partitionBy> devono provenire da essa o da una tabella correlata. Se omesso: - <orderBy> deve essere specificato in modo esplicito. - Tutte le colonne <orderBy> e <partitionBy> devono essere complete e provenire da una singola tabella. - L'impostazione predefinita è ALLSELECTED() di tutte le colonne in <orderBy> e <partitionBy>. |
axis | (Facoltativo) Asse nella forma visiva. Disponibile solo nei calcoli visivi e sostituisce la <relazione>. |
orderBy | (Facoltativo) Clausola ORDERBY() contenente le colonne che definiscono la modalità di ordinamento di ogni partizione. Se omesso: - <la relazione> deve essere specificata in modo esplicito. - Per impostazione predefinita, l'ordinamento viene eseguito in base a ogni colonna in <relazione> non già specificata in <partitionBy>. |
valori blank | (Facoltativo) Enumerazione che definisce come gestire i valori (blank) durante l'ordinamento. Questo parametro è riservato per usi futuri. Attualmente, l'unico valore supportato è DEFAULT, in cui il comportamento per i valori numerici è vuoto viene ordinato tra zero e valori negativi. Il comportamento per le stringhe è costituito dall’ordinamento dei valori blank prima di tutte le stringhe, incluse le stringhe vuote. |
partitionBy | (Facoltativo) Clausola PARTITIONBY() contenente le colonne che definiscono la modalità di partizionamento della <relazione>. Se omesso, la <relazione> viene considerata come una singola partizione. |
matchBy | (Facoltativo) Clausola MATCHBY() contenente le colonne che definiscono come trovare le corrispondenze con i dati e identificare la riga corrente. |
reset (ripristina) | (Facoltativo) Disponibile solo nei calcoli visivi. Indica se il calcolo viene reimpostato e a quale livello della gerarchia di colonne della forma visiva. I valori accettati sono: NONE, LOWESTPARENT, HIGHESTPARENT o un numero intero. Il comportamento dipende dal segno intero: - Se zero o omesso, il calcolo non viene reimpostato. Equivalente a NONE. - Se positivo, l'intero identifica la colonna a partire dal più alto, indipendentemente dalla granularità. HIGHESTPARENT equivale a 1. - Se negativo, l'intero identifica la colonna a partire dal più basso, rispetto alla granularità corrente. LOWESTPARENT equivale a -1. |
Valore restituito
Tutte le righe della finestra.
Osservazioni:
Ad eccezione delle colonne aggiunte dalle funzioni di tabella DAX, ogni colonna in <relazione>, quando <matchBy> non è presente o ogni colonna in< matchBy > e <partitionBy>, quando <matchBy>è presente, deve avere un valore esterno corrispondente per definire la riga corrente su cui operare. Se <from_type> e <to_type> entrambi hanno valore ABS, il codice seguente si applica solo alle colonne <partitionBy>:
- Se è presente esattamente una colonna esterna corrispondente, viene usato il relativo valore.
- Se non è presente alcuna colonna esterna corrispondente:
- WINDOW determinerà innanzitutto tutte le colonne che non dispongono di una colonna esterna corrispondente.
- Per ogni combinazione di valori esistenti per queste colonne nel contesto padre di WINDOW, viene valutato WINDOW e vengono restituite le righe corrispondenti.
- L'output finale WINDOW è un'unione di queste righe.
- Se sono presenti più colonne esterne corrispondenti, viene restituito un errore.
Se tutte le colonne della <relazione> sono state aggiunte dalle funzioni di tabella DAX, viene restituito un errore.
Se <matchBy> è presente, WINDOW tenterà di usare le colonne <matchBy> e <partitionBy> per identificare la riga.
Se <matchBy> non è presente e le colonne specificate all'interno di <orderBy> e<partitionBy> non possono identificare in modo univoco ogni riga in <relazione>, allora:
- WINDOW tenterà di trovare il minor numero di colonne aggiuntive necessarie per identificare in modo univoco ogni riga.
- Se è possibile trovare tali colonne, WINDOW aggiungerà automaticamente queste nuove colonne a <orderBy> e ogni partizione viene ordinata usando questo nuovo set di colonne orderBy.
- Se non è possibile trovare tali colonne, viene restituito un errore.
Viene restituita una tabella vuota se:
- Il valore esterno corrispondente di una colonna <orderBy> o <partitionBy> non esiste all'interno della <relazione>.
- L'intera finestra si trova all'esterno della partizione oppure l'inizio della finestra si trova dopo la fine.
Se WINDOW viene utilizzato all'interno di una colonna calcolata definita nella stessa tabella della <relazione> e <orderBy> viene omesso, viene restituito un errore.
Se l'inizio della finestra viene visualizzato prima della prima riga, viene impostato sulla prima riga. Analogamente, se la fine della finestra si trova dopo l'ultima riga della partizione, viene impostata sull'ultima riga.
<la reimpostazione> può essere usata solo nei calcoli visivi e non può essere usata in combinazione con <orderBy> o <partitionBy>. Se <la reimpostazione> è presente, <è possibile specificare l'asse> , ma <la relazione> non può.
Esempio 1 - Misura
La misura seguente:
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]))
)
Restituisce la media di 3 giorni dei prezzi unità per ogni prodotto. Si noti che la finestra di 3 giorni è costituita da tre giorni in cui il prodotto ha vendite, non necessariamente tre giorni di calendario consecutivi.
Esempio 2 : misura
La misura seguente:
RunningSum =
SUMX (
WINDOW (
1, ABS, 0, REL,
ALLSELECTED (
'Date'[Fiscal Year],
'Date'[Month Number Of Year]
),
PARTITIONBY ( 'Date'[Fiscal Year] )
),
[Total Sales]
)
Restituisce la somma in esecuzione per Total Sales by Month Number Of Year, riavviando per ogni anno fiscale:
Year | Mese numero dell'anno | Sales Amount | RunningSum |
---|---|---|---|
FY2018 | 1 | $ 1.327.675 | $ 1.327.675 |
FY2018 | 2 | $ 3.936.463 | $ 5.264.138 |
FY2018 | 3 | $ 700.873 | $ 5.965.011 |
FY2018 | 4 | $ 1.519,.275 | $ 7.484.286 |
FY2018 | 5 | $ 2.960.378 | $ 10.444.664 |
FY2018 | 6 | $ 1.487.671 | $ 11.932.336 |
FY2018 | 7 | $ 1.423.357 | $ 13.355.693 |
FY2018 | 8 | $ 2.057.902 | $ 15.413.595 |
FY2018 | 9 | $ 2.523.948 | $ 17.937.543 |
FY2018 | 10 | $ 561.681 | $ 18.499.224 |
FY2018 | 11 | $ 4.764.920 | $ 23.264.145 |
FY2018 | 12 | $ 596.747 | $ 23,860.891 |
AF2019 | 1 | $ 1.847.692 | $ 1.847.692 |
AF2019 | 2 | $ 2.829.362 | $ 4.677.054 |
AF2019 | 3 | $ 2.092.434 | $ 6.769.488 |
AF2019 | 4 | $ 2.405.971 | $ 9.175.459 |
AF2019 | 5 | $ 3.459.444 | $ 12.634.903 |
AF2019 | 6 | $ 2.850.649 | $ 15.485.552 |
AF2019 | 7 | $ 2.939.691 | $ 18.425.243 |
AF2019 | 8 | $ 3.964.801 | $ 22.390.045 |
AF2019 | 9 | $ 3.287.606 | $ 25.677.650 |
AF2019 | 10 | $ 2.157.287 | $ 27.834.938 |
AF2019 | 11 | $ 3.611.092 | $ 31.446.030 |
AF2019 | 12 | $ 2.624.078 | $ 34.070.109 |
FY2020 | 1 | $ 3.235.187 | $ 3.235.187 |
FY2020 | 2 | $ 4.070.046 | $ 7.305.233 |
FY2020 | 3 | $ 4.429.833 | $ 11.735.066 |
FY2020 | 4 | $ 4.002.614 | $ 15.737.680 |
FY2020 | 5 | $ 5.265.797 | $ 21.003.477 |
FY2020 | 6 | $ 3.465.241 | $ 24.468.717 |
FY2020 | 7 | $ 3.513.064 | $ 27.981.781 |
FY2020 | 8 | $ 5.247.165 | $ 33.228.947 |
FY2020 | 9 | $ 5.104.088 | $ 38.333.035 |
FY2020 | 10 | $ 3.542.150 | $ 41.875.184 |
FY2020 | 11 | $ 5.151.897 | $ 47.027.081 |
FY2020 | 12 | $ 4.851.194 | $ 51.878.275 |
Esempio 3 - Calcolo visivo
Query DAX di calcolo visivo seguente:
TotalSalesRunningSumByYear = SUMX(WINDOW(0, ABS, 0, REL, ROWS, HIGHESTPARENT), [SalesAmount])
Restituisce le vendite totali cumulative per mese, calcolate ogni anno. I valori 1 e -2 possono essere usati invece di HIGHESTPARENT, con gli stessi risultati.
Lo screenshot seguente mostra la matrice visiva e l'espressione di calcolo visivo:
Esempio 4 - Calcolo visivo
Query DAX di calcolo visivo seguente:
TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])
Restituisce le vendite totali cumulative per mese, calcolate lungo ogni trimestre.
Contenuto correlato
INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
GAMMA
RANK
ROWNUMBERRUNNINGSUM