Vai al contenuto principale Passa a contenuto complementare

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.

È possibile utilizzare le funzioni Window per eseguire operazioni come:

  • 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.

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).

Sintassi:  

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:  

Argomenti
ArgomentoDescrizione
main_expr

L'espressione di input principale calcolata e restituita dalla funzione. Dev'essere un'espressione qualsiasi basata su un'aggregazione, come Median(Salary). Ad esempio:

Window(Median(Salary)) as MedianSalary

L'espressione 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:

Window(Salary) as WSalary

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 con quali combinazioni si applicano le aggregazioni. Ad esempio:

Window(Avg(Salary), Department) as AvgDepSalary

questa operazione calcola il salario medio per ogni reparto.

Quando vengono forniti più parametri di partizione, l'aggregazione verrà applicata a ciascuna riga con una combinazione unica di campi di partizione. Ad esempio:

Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry

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.

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]

Facoltativamente, 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:

  • ASC: ordinamento crescente.

  • DESC: ordinamento decrescente.

  • NONE

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.

Ad esempio:

Window(RecNo(), Department, 'ASC', Year)

Nell'esempio qui sopra, l'aggregazione all'interno della partizione viene eseguita in ordine crescente in base al campo Anno.

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.

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.

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.

Ad esempio:

Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada

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:

  • Espressione inizio: il numero di righe prima della riga corrente da includere nella finestra.

  • Espressione fine: il numero di righe dopo la riga corrente da includere nella finestra.

Ad esempio, se si vuole includere le 3 righe precedenti, la riga corrente e la riga successiva:

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment

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:

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment

Ad esempio, per includere la terza riga da quella corrente e tutte le righe successive:

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment

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

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

Esempio - Aggiunta di un campo con una finestra scorrevole

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

Limiti

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.

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

  • 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.

  • 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.

Hai trovato utile questa pagina?

Se riscontri problemi con questa pagina o con il suo contenuto – un errore di battitura, un passaggio mancante o un errore tecnico – ti pregiamo di farcelo sapere!