Funzioni aggregate e pivoting
Le funzioni di aggregazione e di pivoting possono essere utilizzate per raggruppare e aggregare i dati in una tabella del database.
La funzionalità di base è spiegata meglio da un semplice esempio.
Abbiamo una tabella (non normalizzata per semplicità) che contiene i dipendenti di un'azienda. Ogni dipendente ha un nome, appartiene a un reparto, ha un livello di esperienza e un salario.
Vediamo ora come estrarre alcune informazioni utili da questo insieme di dati.
Stipendi per dipendente
Questa è la forma più semplice di informazione. Basta visualizzare il nome del dipendente e il suo stipendio. Non è necessaria alcuna funzione di aggregazione o pivoting.
Tabella
La tabella è composta da due colonne, una per il nome e una per lo stipendio, entrambe senza funzione di aggregazione.
Configurazione della colonna Nome
Configurazione della colonna stipendio:
Grafico
Configurazione del Grafico
Configurazione della colonna Valore stipendio
Stipendi riassunti raggruppati per reparto
Tabella
Configurazione della colonna Reparto:
I dipendenti sono raggruppati per reparto.
Sebbene il gruppo sia presente nell'elenco a discesa delle funzioni aggregate, non si tratta di una vera e propria funzione aggregata. Le funzioni di aggregazione aggregano i valori (somma, conteggio, media, minimo, massimo), mentre gruppo si limita a raggruppare le righe.
Configurazione della colonna stipendio:
Poiché abbiamo già raggruppato i dipendenti per reparto, tutte le altre colonne devono utilizzare una funzione aggregata. In questo caso vogliamo riassumere gli stipendi dei dipendenti all'interno di un reparto.
Grafico
Configurazione del Grafico
Le righe vengono automaticamente raggruppate in base alla colonna selezionata come etichetta dell'asse X.
Configurazione della colonna Valore stipendio
Stipendi medi raggruppati per reparto
Stessa configurazione dell'esempio precedente, ma la funzione aggregata della colonna stipendio è impostata su avg anziché su sum.
Tabella
Grafico
Numero di dipendenti raggruppati per reparto
Stessa configurazione dell'esempio precedente, tranne per il fatto che la funzione aggregata della colonna stipendio è impostata su count invece che su sum.
Tabella
Grafico
Caso speciale (Distinct_count):
Se il set di dati originale include più voci della stessa persona, ciò potrebbe significare che la persona ha ricevuto un aumento.
L'aumento di stipendio viene rappresentato come una nuova voce nella tabella (questo aiuta a tenere traccia delle informazioni sul vecchio stipendio).
Nella schermata seguente, Hans Muster ha ottenuto un aumento, quindi il suo nuovo stipendio è (100'000.00).
Utilizzando le impostazioni precedenti per calcolare il numero di dipendenti raggruppati per reparto, Hans verrebbe contato due volte.
Cambiando la funzione aggregata da count(salary) a count(name) si otterrebbe comunque lo stesso risultato errato, come mostrato di seguito:
Utilizzo di count(salary)
Utilizzo di count(name)
La soluzione è rappresentata con la funzione aggregata distinct_count
Stipendio ruotato per livello, raggruppato per reparto
Negli esempi precedenti abbiamo sempre avuto una sola serie di dati (stipendio o numero di dipendenti). Potrebbe essere interessante definire le serie di dati in base ai dati disponibili.
In questo esempio vogliamo visualizzare i salari riassunti raggruppati per reparto. Inoltre, vogliamo visualizzare i dati separati per livello di dipendenti.
Per ottenere questo risultato, è necessario raggruppare i dipendenti per reparto e fare una pivot sulla tabella per livello. Il risultato è la seguente Tabella:
Reparto | alto | basso | medio |
---|---|---|---|
sviluppo | 120'000.00 | 100'000.00 | 110'000.00 |
gestione | 180'000.00 | 0 | 150'000.00 |
acquisti | 0 | 80'000.00 | 90'000.00 |
Il widget Tabella non supporta ancora il pivoting.
Questa tabella può essere visualizzata in un grafico come segue:
Configurazione del Grafico:
L'elenco dei colori della Tabella Pivot viene generato automaticamente utilizzando i dati esistenti nella tabella.
Se è impostata una colonna pivot, è possibile aggiungere solo una colonna valore.