Aggregazioni nidificate
Ogni nome di campo utilizzato in un'espressione del grafico deve essere racchiuso esattamente da una sola funzione di aggregazione. Se è necessario nidificare le aggregazioni, è possibile utilizzare Aggr() per aggiungere un secondo livello di aggregazione. Aggr() contiene una funzione di aggregazione come argomento.
Sempre un livello di aggregazione in una funzione
Un'app tipica può contenere:
- un milione di record nei dati
- cento righe in una tabella pivot
- Un unico KPI, in un misuratore o in una casella di testo
Tutti e tre i numeri possono comunque rappresentare tutti i dati, anche se diversi per grandezza. I numeri sono solo livelli diversi di aggregazione.
Le funzioni di aggregazione utilizzano i valori di molti record come input e li comprimono in un unico valore che può essere visto come una sintesi di tutti i record. È presente una restrizione: non è possibile utilizzare una funzione di aggregazione all'interno di un'altra funzione di aggregazione. Di solito è necessario che ogni riferimento di campo sia disposto esattamente in un'unica funzione di aggregazione.
Funzioneranno le seguenti espressioni:
- Sum(Sales)
- Sum(Sales)/Count(Order Number)
La seguente espressione non funzionerà in quanto è un'aggregazione nidificata:
- Count(Sum(Sales))
La soluzione a questo problema si presenta sotto forma della funzione Aggr(). Contrariamente al suo nome non è una funzione di aggregazione. È una funzione "molti-a-molti", un po' come una matrice in matematica. Converte una tabella con record N in una tabella con record M. Restituisce una serie di valori. Potrebbe anche essere considerata come una tabella lineare virtuale con una sola misura e una o più dimensioni.
Utilizzo di Aggr() per le aggregazioni nidificate
Aggr() restituisce una matrice di valori per l'espressione calcolata in base alle dimensioni dichiarate o alle dimensioni. Ad esempio, il valore massimo delle vendite, per cliente, per regione. Nelle aggregazioni avanzate, la funzione Aggr() viene racchiusa in un'altra funzione di aggregazione, tramite la matrice di risultati dalla funzione Aggr() come input all'aggregazione in cui è nidificata.
Quando viene utilizzata, l'istruzione Aggr() produce una tabella virtuale, con un'espressione raggruppata da una o più dimensioni. Il risultato di questa tabella virtuale può poi essere ulteriormente aggregato da una funzione di aggregazione esterna.
Calcolo del valore medio più grande dell'ordine
Utilizziamo un'istruzione Aggr() semplice in un'espressione del grafico.
Vogliamo visualizzare le nostre metriche complessive a livello regionale, ma anche mostrare due espressioni più complesse:
- Il più grande valore medio degli ordini per manager all'interno di ciascuna regione.
- Manager responsabile del maggior valore medio degli ordini.
Possiamo facilmente calcolare il valore medio dell'ordine per ogni regione utilizzando un'espressione standard Sum(Sales)/Count([Order Number]).
All'interno dell'app, sul foglio Nested Aggregations è presente una tabella dal titolo Aggr() function.
Procedere come indicato di seguito:
- Selezionare la tabella Aggr() function disponibile.
Si apre il pannello delle proprietà. - Fare clic su Aggiungi colonna e selezionare Misura.
- Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: Sum(Sales)/Count([Order Number])
- Fare clic su Applica.
Il nostro obiettivo è recuperare il più grande valore medio degli ordini per ogni regione. Dobbiamo utilizzare Aggr() per indicare a Qlik Sense che vogliamo prendere il valore medio dell'ordine per ogni regione, per manager, e poi visualizzare il più grande di questi. Per ottenere il valore medio dell'ordine per ogni regione, per manager, dovremo includere queste dimensioni nella nostra istruzione Aggr():
Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)
Questa espressione fa sì che Qlik Sense produca una tabella virtuale simile a questa:
Quando Qlik Sense calcola i singoli valori medi dell'ordine per ogni regione, per ogni manager, dovremo trovare il più grande di questi valori. Ciò avviene disponendo la funzione Aggr() con Max():
Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))
Procedere come indicato di seguito:
- Fare clic su Aggiungi colonna e selezionare Misura.
- Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Fare clic su Applica.
È possibile vedere il più grande valore medio degli ordini per tutti i manager a livello regionale. Questa è la prima delle nostre due espressioni complesse! Il requisito successivo è quello di avere il nome del manager responsabile di questi grandi valori medi di ordine visualizzato accanto ai valori stessi.
A tal fine, si utilizza la stessa funzione Aggr() di prima, ma questa volta insieme alla funzione FirstSortedValue(). La funzione FirstSortedValue() indica a Qlik Sense di fornirci il manager, per la dimensione specifica specificata nella seconda parte della funzione:
FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))
Procedere come indicato di seguito:
- Fare clic su Aggiungi colonna e selezionare Misura.
- Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Fare clic su Applica.
Per ulteriori informazioni, vedere Aggr
Per ulteriori informazioni, vedere FirstSortedValue