# Window - funzione di script

Window() esegue calcoli da più righe, producendo un valore per ciascuna riga separatamente.

È possibile utilizzare le funzioni Window per eseguire operazioni come:

* Confrontare un numero individuale in una riga con quello medio, massimo o minimo all'interno di una colonna.

* Calcolare la classificazione di un valore individuale, all'interno della colonna o dell'intera tabella.

La funzione Window non cambia il numero di record nella tabella ma può comunque eseguire attività simili a funzioni di aggregazione, relazionali e di scala.

La funzione Window deve avere una cache all'interno dell'istruzione LOAD della tabella con cui si sta lavorando per effettuare aggiunte alla tabella. Ad esempio:

```
[Transactions]:
Load 
	*,
	Window(avg(Expression1),[Num]);
LOAD
	TransLineID,
	TransID,
	"Num",
	Dim1,
	Dim2,
	Dim3,
	Expression1,
	Expression2,
	Expression3
FROM [lib://AttachedFiles/transactions.qvd] (qvd);
```

Window supporta funzioni generali, come l'arrotondamento o operazioni numeriche di base. Ad esempio:

```
Load *, Round(Window(Sum(Salary),Department)) as SumSalary
```

```
Load *, Window(Sum(Salary),Department) + 5 as SumSalary
```

È possibile definire una finestra scorrevole per la funzione Window. Ciò imposta il numero di righe utilizzate quando si applica la funzione Window sulla riga corrente. Ad esempio, è possibile impostare la finestra in modo tale che includa le 3 righe precedenti e le 3 righe successive.

Sintassi:

Window (Window (input\_expr, [partition1, partition2, ...], [sort\_type, [sort\_expr]],[filter\_expr], [start\_expr,end\_expr]))

Tipo di dati restituiti: un nuovo campo aggiunto alla tabella risultante creata dall'istruzione LOAD.

Argomenti:

Argomenti

| Argomento | Descrizione |
| --- | --- |
| input\_expr | L'espressione di input calcolata e restituita dalla funzione. Dev'essere un'espressione qualsiasi basata su un'aggregazione, come Median(Salary). Ad esempio:<br><br>Window(Median(Salary)) as MedianSalary<br><br>L'input può essere anche un nome di campo senza alcuna aggregazione applicata. In questo caso, Window lo tratta come se la funzione Only() fosse applicata a quel campo. Ad esempio:<br><br>Window(Salary,Department) as WSalary<br><br>Facoltativamente, è possibile definire una partizione con l'espressione di input. La partizione è simile al raggruppamento ottenuto con la clausola group by, con la differenza che il risultato viene aggiunto come nuova colonna nella tabella di input. La partizione non riduce il numero di record della tabella di input. È possibile definire più campi di partizione.<br><br>Esempio:<br><br><br>LOAD<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-6) as MAX\_Sales\_City\_Last\_6\_Mos,<br>Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland')<br>+ AddMonths(OrderDate,-6) as Avg\_Sales\_Portland\_Last\_6\_Mos,<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-12) as MAX\_Sales\_City\_Last\_12\_Mos;<br>LOAD<br>City,<br>Sales,<br>OrderDate<br>FROM [lib://AttachedFiles/Sales Data.xlsx]<br>(ooxml, embedded labels, table is [Sales Data]); |
| partition1, partition2 | Dopo input\_expr, è possibile definire un numero qualsiasi di partizioni. Le partizioni sono campi che definiscono con quali combinazioni si applicano le aggregazioni. L'aggregazione viene applicata separatamente con ogni partizione. Ad esempio:<br><br>Window(Avg(Salary), Unit, Department, Country) as AvgSalary<br><br>Qui sopra, le partizioni sono Unit, Department e Country.<br><br>Le partizioni non sono obbligatorie, ma sono richieste per un'applicazione appropriata delle finestre ai campi. |
| sort\_type, [sort\_expr]] | Facoltativamente, specificare il tipo di ordinamento e l'espressione di ordinamento. sort\_type può avere uno dei due valori seguenti:<br><br><ul> <li> <p> <span>ASC</span>:&nbsp;ordinamento crescente.</p> </li> <li> <p> <span>DESC</span>:&nbsp;ordinamento decrescente.</p> </li> </ul><br><br>Se si definisce sort\_type, è necessario definire anche un'espressione di ordinamento. Si tratta di un'espressione che decide l'ordine delle righe all'interno di una partizione.<br><br>Ad esempio:<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>Nell'esempio qui sopra, i risultati all'interno della partizione sono disposti in ordine crescente in base al campo Year.<br><br>Nota informaticaIl tipo di ordinamento e l'espressione di ordinamento sono principalmente richiesti solo con le funzioni RecNo e WRank. |
| filter\_expr | Facoltativamente, aggiungere un'espressione di filtro. Si tratta di un'espressione booleana che stabilisce se il record dovrebbe essere incluso nel calcolo o meno.<br><br>Questo parametro può essere omesso completamente e il risultato dovrebbe essere l'assenza di un filtro.<br><br>Ad esempio:<br><br>Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)<br>as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
| [start\_expr,end\_expr] | Facoltativamente, impostare l'argomento per la finestra scorrevole. Una finestra scorrevole richiede due argomenti:<br><br><ul> <li> <p>Espressione inizio:&nbsp;il numero di righe prima della riga corrente da includere nella finestra.</p> </li> <li> <p>Espressione fine:&nbsp;il numero di righe dopo la riga corrente da includere nella finestra.</p> </li> </ul><br><br>Ad esempio, se si vuole includere le 3 righe precedenti, la riga corrente e la riga successiva:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, -3, 1)<br>as WSalaryDepartment<br><br>Per indicare tutte le righe precedenti o tutte le righe successive, è possibile usare la funzione Unbounded(). Ad esempio, per includere tutte le righe precedenti, la riga corrente e la riga successiva:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, UNBOUNDED(), 1)<br>as WSlidingSalaryDepartment<br><br>Ad esempio, per includere la terza riga da quella corrente e tutte le righe successive:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, 3, UNBOUNDED())<br>as WSlidingSalaryDepartment |

## Esempio - Aggiunta di un campo contenente un'aggregazione

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Esempio: aggiunta di un campo contenente un'aggregazione

Script di caricamento

Creare una nuova scheda nell'editor caricamento dati, quindi caricare i seguenti dati come caricamento inline. Creare la tabella in basso in Qlik Sense per visualizzare i risultati.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Risultati

Risultati per l'aggiunta di un campo contenente un'aggregazione

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | 103.43 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 266.775 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 103.43 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | 266.775 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | 103.43 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 266.775 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 42.935 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | 64.21 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | 273.88 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 103.43 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | 266.775 |

## Esempio: aggiunta di un campo contenente un'aggregazione con un filtro per valori specifici

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Esempio: aggiunta di un campo contenente un'aggregazione con un filtro per valori specifici

Script di caricamento

Creare una nuova scheda nell'editor caricamento dati, quindi caricare i seguenti dati come caricamento inline. Creare la tabella in basso in Qlik Sense per visualizzare i risultati.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, color_code = 'Blue') as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Risultati

Risultati per l'aggiunta di un campo contenente un'aggregazione con un filtro per valori specifici

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | - |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Arancione | - |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.94 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | - |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | - |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 118.4 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | - |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | - |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Arancione | - |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 42.94 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | - |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | - |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 118.4 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | - |

## Esempio - Aggiunta di un campo con una finestra scorrevole

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Esempio: aggiunta di un campo con una finestra scorrevole

Script di caricamento

Creare una nuova scheda nell'editor caricamento dati, quindi caricare i seguenti dati come caricamento inline. Creare la tabella in basso in Qlik Sense per visualizzare i risultati.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, 'ASC', -1, 1, 0, 1) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Risultati

Risultati per l'aggiunta di un campo contenente un'aggregazione con un filtro per valori specifici

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | 41.37 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Arancione | 366.865 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 106.3 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | 92.42 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | 165.49 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Arancione | 166.685 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 80.12 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | 3.42 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | 177.56 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 63.55 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | 325.95 |

## Limitazioni

Window presenta le seguenti limitazioni:

* Window è una funzione che ha un forte impatto sulle risorse, soprattutto in termini di consumo di memoria.

* Window non è supportato in Qlik Sense Mobile.

* Le espressioni del grafico non supportano Window.

* Non è possibile nidificare funzioni Window in altre funzioni Window.

* Window non può essere utilizzata in una funzione di aggregazione.

* Window deve essere in grado di scansionare l'intera tabella.

* WRank(), RecNo() e RowNo() non possono essere utilizzate con Window quando si utilizza la finestra scorrevole.