# Window Funzione script

Window() esegue calcoli da più righe di una sezione (o "finestra") di una tabella completa e produce un singolo valore per ogni riga.

Le funzioni Window possono essere utilizzate per eseguire operazioni quali:

* Confrontare il valore di un numero individuale in una riga con quello medio, massimo o minimo in una finestra della tabella.

* Calcolare la classificazione di un valore individuale, nella finestra o nell'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 essere inclusa nell'istruzione LOAD della tabella con cui si lavora, oppure fare riferimento alla tabella, come ad esempio con Resident LOAD. Per esempio, vedere [Esempio - Aggiunta di un campo contenente un'aggregazione](https://help.qlik.com/it-IT/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm#Example2).

Il nome può essere omesso, ma questo comporta che il nome del campo venga impostato sull'intera espressione della funzione Window. Ad esempio, AvgDepSalary nell'esempio seguente:

```
[AvgSalary]:
Load 
	*,
	Window(avg(Salary), Department) as AvgDepSalary
Resident Employees;
```

Nota informatica

Si consiglia di assegnare alla funzione Window un nome di campo.

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

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

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

Nota informatica

La funzione Window esegue la scansione dell'intera tabella. In termini di consumo di memoria, il costo di questa scansione è proporzionale al numero di campi nella tabella. Una tabella con pochi campi, oltre a quelli su cui opera la funzione Window, è sempre da preferire a una tabella con molti campi.

In genere, una funzione Window consuma 2-4 volte la memoria e richiede un tempo 2-4 volte superiore per il ricaricamento rispetto a un'operazione di script simile contenente la stessa aggregazione, una clausola Where (filtro), una clausola Group by (partizione) e una clausola Order by (ordinamento).

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

Tipo di dati restituiti: un valore per riga, che può essere combinato o utilizzato in un'altra espressione, oppure aggiunto direttamente alla tabella risultante creata dall'istruzione LOAD.

Argomenti

| Argomento | Descrizione |
| --- | --- |
| main\_expr | L'espressione di input principale calcolata e restituita dalla funzione. Deve essere un'espressione basata su un'aggregazione, come ad esempio Median(Salary). Ad esempio:<br><br>Window(Median(Salary)) as MedianSalary<br><br>L'espressione può essere anche un nome di campo senza alcuna aggregazione applicata. In questo caso, Window lo tratta come la funzione Only() applicata a tale campo. Ad esempio:<br><br>Window(Salary) as WSalary<br><br>Le espressioni che includono aggregazioni annidate o funzioni finestra annidate, come Window(Sum(Avg(Salary))) o Window(Sum(Window(Salary))), non sono consentite. |
| partition1, partition2 | Dopo main\_expr, è possibile definire un numero qualsiasi di partizioni. Le partizioni sono campi che definiscono le combinazioni con cui applicare le aggregazioni. Ad esempio:<br><br>Window(Avg(Salary), Department) as AvgDepSalary<br><br>questa operazione calcola il salario medio per ogni reparto.<br><br>Quando vengono forniti più parametri di partizione, l'aggregazione verrà applicata a ciascuna riga con una combinazione unica di campi di partizione. Ad esempio:<br><br>Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry<br><br>questa operazione calcola il salario medio per ogni reparto in ogni Paese. I reparti duplicati in Paesi diversi, come Marketing in Svezia e Marketing in Canada, saranno trattati come partizioni diverse.<br><br>Il partizionamento è simile al raggruppamento ottenuto con la clausola group by. La partizione non riduce il numero di record in confronto alla tabella di input, tuttavia. |
| sort\_type, [sort\_expr] | Opzionalmente, specificare il tipo di ordinamento e l'espressione di ordinamento. Questa operazione definisce l'ordine in cui viene eseguita l'aggregazione. sort\_type è una stringa costante e può avere uno dei tre valori:<br><br><ul> <li> <p> <span>ASC</span>: ordinamento crescente.</p> </li> <li> <p> <span>DESC</span>:&nbsp;ordinamento decrescente.</p> </li> <li> <p>NONE</p> </li> </ul><br><br>Se si definisce il valore ASC o DESC per sort\_type, è necessario definire anche un'espressione di ordinamento. Con sort\_type NONE, non è necessario fornire alcuna espressione di ordinamento. L'espressione di ordinamento stabilisce 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, l'aggregazione all'interno della partizione viene eseguita in ordine crescente in base al campo Anno.<br><br>I parametri di ordinamento influenzano anche l'ordine in cui una finestra scorrevole elabora una tabella. Per un esempio, vedere [Esempio: aggiunta di un campo con una finestra scorrevole con ordinamento](https://help.qlik.com/it-IT/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm#Example3). |
| filter\_expr | Aggiungere facoltativamente un'espressione di filtro. È un'espressione booleana che decide se il record deve essere incluso o meno nel calcolo.<br><br>Se viene fornito il valore filter\_expr, è necessario includere un tipo di ordinamento. Se non è definito alcun tipo di ordinamento, l'argomento può essere interpretato come un parametro di partizione piuttosto che come un'espressione di ordinamento. Il parametro filter\_expr può essere omesso completamente o è possibile includere un valore vero. In entrambi i casi non viene utilizzato alcun filtro, quindi non viene esclusa alcuna riga.<br><br>Ad esempio:<br><br>Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada<br><br>L'istruzione Window di cui sopra filtrerà tutte le righe in cui il campo Paese non è US o Canada, escludendo queste righe dall'aggregazione. Continueranno a esserci valori di output per le righe che sono state filtrate, ma come tutte le altre righe di output, conterranno solo i risultati aggregati delle righe non escluse dal filtro. |
| start\_expr,end\_expr | Facoltativamente, impostare gli argomenti per la funzionalità della finestra scorrevole. Questa operazione limita ulteriormente il numero di righe da aggregare insieme. Ogni riga di output includerà solo i risultati (aggregati) di un certo numero di righe precedenti e successive alla riga corrente. Una finestra scorrevole richiede due argomenti (start\_expr,end\_expr). Se questi argomenti vengono forniti, il tipo di ordinamento non deve essere ignorato. Altrimenti, gli argomenti possono essere interpretati come un parametro di partizione anziché una finestra scorrevole. Il parametro start\_expr,end\_expr comprende i seguenti elementi:<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, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment<br><br>Per indicare tutte le righe precedenti o tutte le righe successive, è possibile utilizzare 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, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment<br><br>Ad esempio, per includere la terza riga dalla riga corrente e tutte le righe successive:<br><br>Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment<br><br>Negli esempi precedenti, il tipo di ordinamento NONE è fornito in modo che lo script possa distinguere tra gli argomenti della partizione e i parametri che vengono dopo il tipo di ordinamento. |

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

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/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.

```
[Employees]:
Load 
	*,
	Window(avg(Salary), Department) as AvgDepSalary
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
]; 
```

Risultati

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

| Name | Department | Salary | Age | Year | Country | AvgDepSalary |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 39 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 39 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 61 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 61 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 39 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 39 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 61 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 61 |

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

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Esempio: Aggiunta di un campo contenente un'aggregazione filtrata 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.

```
[Employees]:
Load 
*,
Window(avg(Salary), Department, 'NONE', Country = 'Sweden') as AvgDepSalarySweden
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Risultati

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

| Name | Department | Salary | Age | Year | Country | AvgDepSalarySweden |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 44 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 44 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 55 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 55 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 44 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 44 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 55 |

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

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Esempio: Aggiunta di un campo con una finestra mobile

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.

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'NONE', -1, 1) as SlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Risultati

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

| Name | Department | Salary | Age | Year | Country | SlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-22 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 11-22-55 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-44 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 33-44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 22-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 55-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 44-77-88 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 77-88 |

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

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/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.

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) as SortedSlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Risultati

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

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |

Per capire meglio come le partizioni e l'ordinamento influenzano le aggregazioni in una finestra scorrevole, ordinare la tabella per nome in ordine ascendente.

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

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |

Nella riga di Johan, l'aggregazione ha incluso i anche i valori dei salari per David e Sara. Queste sono le righe precedenti e seguenti nella partizione del reparto Vendite, ordinate per nome.

Per un altro esempio che mostra quali righe sono incluse, cambiare l'espressione Windows da Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) a Window(concat(Text(Name),'-'), Department, 'ASC', Age, -1, 1) e ricaricare. I valori in SortedSlidingWindow nella tabella sottostante indicano il nome delle righe precedenti e seguenti nella partizione Vendite.

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

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | Anna-David |
| Bonnie | Marketing | 88 | 44 | 2023 | US | Bonnie-Nils |
| David | Sales | 11 | 32 | 2019 | Canada | Anna-David-Johan |
| Johan | Sales | 66 | 26 | 2025 | Sweden | David-Johan-Sara |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | Bonnie-Nils-Olle |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | Nils-Olle-Patrick |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | Olle-Patrick |
| Sara | Sales | 22 | 25 | 2022 | Sweden | Johan-Sara |

## Limitazioni

Window presenta le seguenti limitazioni:

* Window è una funzione che richiede molte 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 le funzioni Window all'interno di altre funzioni Window.

* Non è possibile utilizzare Window all'interno di una funzione di aggregazione.

* Non è possibile utilizzare Window in un'istruzione LOAD con una clausola "group by".

* Window non può essere utilizzato in un'istruzione load con una clausola where

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

* Non è possibile utilizzare WRank(), RecNo() e RowNo() con Window quando si utilizza la funzione finestra di scorrimento.

* Quando si utilizza la funzionalità della finestra scorrevole, il tempo di calcolo aumenta con la dimensione della finestra. Si consiglia di evitare di usare tabelle di grandi dimensioni combinate con finestre di grandi dimensioni.