Hai una tabella con migliaia di righe, ma il report deve mostrare vendite per regione, mese o categoria? In Power BI il comando Group By permette di ridurre il dettaglio e ottenere rapidamente totali, medie, conteggi e altre aggregazioni. Qui mostro come usarlo in Power Query, quando preferire DAX con GROUPBY, quali differenze considerare e quali errori evitare per mantenere il modello affidabile.
La scelta del livello giusto rende il modello più semplice
- Power Query raggruppa i dati durante la preparazione, prima che entrino nel modello.
- Il comando consente di usare somma, media, conteggio, minimo, massimo e mediana.
- L’opzione Avanzate permette di raggruppare per più colonne e creare più aggregazioni nello stesso passaggio.
- In DAX, GROUPBY è utile soprattutto per aggregare risultati intermedi di espressioni tabellari.
- Raggruppare cambia la granularità dei dati: le righe originali possono non essere più disponibili.

Il Group By in Power Query riduce il livello di dettaglio
In Power Query, raggruppare significa trasformare molte righe in una riga per ogni combinazione di valori scelta. Se una tabella contiene le transazioni di vendita, posso raggrupparla per Regione e ottenere il totale venduto per ciascuna area, invece di lavorare su ogni singolo ordine.
Questo passaggio avviene prima del caricamento nel modello semantico. È quindi una trasformazione dei dati, non una misura che cambia risultato in base ai filtri selezionati dall’utente. La differenza sembra sottile, ma ha conseguenze importanti sulle prestazioni e sulle analisi future.
Le operazioni più comuni sono Somma, Media, Mediana, Minimo, Massimo e Conteggio righe. Si possono anche contare i valori distinti oppure mantenere tutte le righe di ciascun gruppo con l’opzione Tutte le righe, che crea una tabella annidata dentro ogni cella.
| Operazione | Risultato | Esempio pratico |
|---|---|---|
| Somma | Totale di una colonna numerica | Ricavi per regione |
| Media | Valore medio del gruppo | Prezzo medio per categoria |
| Conteggio righe | Numero di record | Ordini per cliente |
| Conteggio valori distinti | Numero di elementi unici | Clienti per area |
| Tutte le righe | Tabella annidata con i record originali | Dettaglio dei prodotti per gruppo |
La mia regola è semplice: uso Power Query quando il raggruppamento rappresenta una preparazione stabile del dataset. Se invece il risultato deve reagire a slicer, filtri, calendario o selezioni dell’utente, lascio i dati a un livello più dettagliato e calcolo l’aggregazione con DAX.
Come configurare il raggruppamento passo dopo passo
Per iniziare, in Power BI Desktop apro Trasforma dati e accedo all’Editor di Power Query. Seleziono una o più colonne, poi scelgo Raggruppa per dalla scheda Home o Trasforma. Il comando è disponibile anche nel menu visualizzato con il tasto destro sulle colonne selezionate.
- Scelgo la colonna o le colonne che definiscono il gruppo.
- Seleziono Avanzate quando servono più criteri.
- Assegno un nome alla nuova colonna aggregata.
- Scelgo l’operazione, per esempio Somma o Conteggio righe.
- Indico la colonna numerica da aggregare, se richiesta.
- Confermo e controllo il risultato nella griglia di anteprima.
Immaginiamo una tabella chiamata Vendite con le colonne Regione, Canale, Prodotto e Importo. Per ottenere il fatturato per regione e canale, uso l’opzione Avanzate, raggruppo per Regione e Canale, quindi aggiungo la somma di Importo con il nome Fatturato totale.
Il risultato avrà una riga per ogni combinazione disponibile. Una regione con tre canali non produrrà tre colonne, ma tre righe aggregate. Questo è il comportamento corretto, anche se chi arriva da Excel può aspettarsi una struttura più simile a una tabella pivot.
Un esempio con più aggregazioni
Nello stesso passaggio posso creare più colonne. Per ogni Regione posso calcolare il totale degli importi, il numero di ordini e il prezzo medio, ottenendo una tabella compatta per un report direzionale.
Regione | Fatturato totale | Numero ordini | Prezzo medio
Nord | 245000 | 1280 | 191,41
Centro | 198500 | 1042 | 190,50
Sud | 162300 | 987 | 164,27Questa soluzione è molto efficiente quando il dettaglio dell’ordine non serve più. Se però domani voglio analizzare il margine per prodotto o filtrare per singolo cliente, avrò eliminato informazioni necessarie. Prima di confermare, mi chiedo sempre se sto creando una tabella finale o solo una base intermedia per altre analisi.
Quando usare Tutte le righe
L’opzione Tutte le righe è utile per mantenere i record appartenenti a ogni gruppo. Da queste tabelle annidate posso poi estrarre, per esempio, il prodotto con più unità vendute usando una colonna personalizzata e una funzione come Table.Max.
È una tecnica potente, ma non la scelgo per semplice abitudine. Le colonne con valori [Table] possono rendere il flusso più difficile da leggere e richiedere passaggi aggiuntivi per espandere i dati. Ha senso soprattutto quando devo applicare un’analisi specifica all’interno di ciascun gruppo.
Quando DAX GROUPBY è la scelta migliore
La funzione DAX GROUPBY restituisce una tabella raggruppata a partire da un’altra tabella o da un’espressione che produce una tabella. Il suo punto di forza è CURRENTGROUP, che rappresenta le righe appartenenti al gruppo elaborato in quel momento.
La uso soprattutto quando ho già creato un risultato intermedio e devo eseguire una seconda aggregazione. Per esempio, posso calcolare prima le vendite per Paese e Categoria, poi individuare il valore massimo di categoria all’interno di ogni Paese.
VAR VenditePerCategoria =
SUMMARIZECOLUMNS(
Geografia[Paese],
Prodotti[Categoria],
"Vendite totali", SUMX(
Vendite,
Vendite[Prezzo] * Vendite[Quantità]
)
)
RETURN
GROUPBY(
VenditePerCategoria,
Geografia[Paese],
"Massimo per Paese",
MAXX(CURRENTGROUP(), [Vendite totali])
)
Il dettaglio tecnico più importante è che GROUPBY non applica automaticamente CALCULATE alle colonne aggiunte. Di conseguenza, il contesto di filtro non si comporta esattamente come in una misura tradizionale. Se non si conosce bene la differenza tra contesto di riga e contesto di filtro, il risultato può sembrare inspiegabile.
Per aggregazioni ordinarie sulle tabelle fisiche del modello preferisco spesso SUMMARIZECOLUMNS o misure DAX più semplici. GROUPBY dà il meglio di sé su risultati intermedi, non come sostituto automatico di ogni operazione di raggruppamento.
Leggi anche: DATEADD DAX per confrontare periodi in Power BI
Una misura dinamica resta spesso preferibile
Se devo mostrare il fatturato filtrato per anno, regione e categoria, una misura come questa è generalmente più adatta:
Fatturato totale =
SUMX(
Vendite,
Vendite[Prezzo] * Vendite[Quantità]
)La misura viene ricalcolata in base al contesto del visual. Una tabella aggregata creata in Power Query, invece, non ricostruisce il dettaglio quando l’utente modifica i filtri. Per questo separo con attenzione le trasformazioni strutturali dalle calcolazioni dinamiche del report.
Power Query, DAX e raggruppamento nei visual a confronto
Le tre modalità possono sembrare equivalenti perché producono tutte un risultato raggruppato. In realtà lavorano in momenti diversi e rispondono a esigenze diverse. La scelta giusta dipende soprattutto da quando voglio calcolare il risultato e da quanto deve essere flessibile.
| Metodo | Quando lavora | Punto di forza | Limite principale |
|---|---|---|---|
| Power Query Group By | Durante la preparazione | Riduce il volume e semplifica i dati | Non reagisce ai filtri del report |
| DAX GROUPBY | Nel modello o in un’espressione tabellare | Gestisce aggregazioni su risultati intermedi | Richiede comprensione del contesto DAX |
| Misure DAX | Quando il visual viene valutato | Risultati dinamici e interattivi | Possono diventare complesse su modelli poco puliti |
| Raggruppamento del visual | Nel report | Utile per fasce, bin e presentazione | Non sostituisce la modellazione dei dati |
Nel report posso anche creare bin, cioè fasce numeriche come 0-99, 100-199 e 200-299, oppure gruppi manuali di categorie. È una soluzione comoda per la visualizzazione, ma non modifica realmente la tabella sorgente e non risolve problemi di qualità dei dati.
Quando preparo un modello per altri analisti, preferisco rendere esplicita la logica in Power Query o nelle misure. I gruppi creati direttamente nel visual sono rapidi, ma possono diventare difficili da governare quando lo stesso criterio deve essere riutilizzato in più pagine.
Gli errori che falsano il risultato
Il primo errore è raggruppare usando una colonna con valori apparentemente uguali ma scritti in modo diverso. “Milano”, “milano” e “Milano ” possono essere trattati come valori differenti, a seconda della trasformazione e del tipo di confronto. Prima del Group By conviene pulire spazi, maiuscole, codici e valori nulli.
Un secondo problema nasce dai duplicati introdotti da una relazione o da una combinazione di tabelle. Se una vendita viene duplicata dopo un merge, la somma sembrerà corretta dal punto di vista tecnico ma sarà economicamente gonfiata. Controllo sempre il numero di righe prima e dopo le operazioni di unione.
Un terzo errore è usare la media di una colonna già aggregata. La media dei ricavi giornalieri non equivale necessariamente al ricavo medio per ordine. Bisogna definire con precisione il denominatore e capire se si sta calcolando una media semplice o ponderata.
- Controllare il tipo di dati delle colonne numeriche.
- Verificare la presenza di null e valori vuoti.
- Confrontare il totale prima e dopo il raggruppamento.
- Indicare chiaramente se un conteggio riguarda righe, clienti o valori distinti.
- Non eliminare il dettaglio originale prima di aver verificato i requisiti del report.
Per grandi volumi, controllo anche il folding della query, cioè la possibilità che Power Query trasferisca la trasformazione al database di origine. Quando il raggruppamento viene eseguito dal sistema sorgente, spesso si riduce il lavoro locale, ma il risultato dipende dal connettore e dalla struttura della query.
Una regola pratica per scegliere senza rifare il modello
Se il risultato deve essere sempre lo stesso e il dettaglio non serve, raggruppo in Power Query. Se devo reagire a filtri e selezioni, creo una misura DAX. Se parto da una tabella intermedia e devo calcolare aggregazioni sui gruppi già formati, considero GROUPBY con CURRENTGROUP.
Prima di applicare il comando, scrivo una frase molto concreta: “voglio una riga per ogni...”. Se la frase termina con “regione e mese”, quelle sono le colonne di raggruppamento. Se invece la risposta cambia in base all’utente, al periodo o al filtro selezionato, probabilmente non devo comprimere i dati in Power Query.
Il Group By non è soltanto un pulsante per ottenere un totale. È una decisione sulla granularità del modello, sulla memoria utilizzata e sul tipo di analisi che sarà possibile fare in seguito. Una scelta corretta all’origine evita formule DAX inutilmente complicate e rende i report Power BI più leggibili, veloci e facili da mantenere.
