Quando un report Power BI deve mostrare vendite per anno, categoria o cliente, il problema non è soltanto sommare i valori: bisogna costruire una tabella riepilogativa coerente con il modello dati. In questa guida chiarisco come funziona SUMMARIZE in DAX, quando conviene usarla, quali alternative scegliere e quali errori evitare per ottenere risultati affidabili.
La sintesi essenziale per usare SUMMARIZE in DAX
- SUMMARIZE raggruppa i dati e restituisce una nuova tabella.
- È utile per creare riepiloghi per anno, prodotto, area o cliente.
- Le colonne di raggruppamento devono appartenere alla tabella indicata o a una tabella correlata.
- Per molti scenari moderni, SUMMARIZECOLUMNS è una scelta più lineare.
- Il risultato dipende dal contesto di filtro e dalle relazioni del modello.

DAX in Power BI serve a trasformare i dati in misure
DAX, acronimo di Data Analysis Expressions, è il linguaggio usato in Power BI, Power Pivot ed Analysis Services per creare misure, colonne calcolate e tabelle calcolate. Non è semplicemente una versione più complessa delle formule di Excel: lavora soprattutto sul modello semantico, sulle relazioni tra tabelle e sul contesto in cui una formula viene valutata.
Una misura come Totale vendite = SUM(Vendite[Importo]) restituisce un valore scalare. SUMMARIZE, invece, restituisce una tabella con una riga per ogni combinazione distinta delle colonne indicate. Questa differenza è fondamentale: una misura alimenta direttamente una visualizzazione, mentre una tabella riepilogativa può diventare l’input di altre funzioni DAX.
Io consiglio di imparare SUMMARIZE dopo aver compreso almeno tre concetti: relazioni, contesto di filtro e funzioni di aggregazione. Senza queste basi, il rischio è ottenere una tabella formalmente corretta ma con totali che non rispondono alla domanda analitica.
Come funziona SUMMARIZE e qual è la sintassi
La struttura generale della funzione è la seguente:
SUMMARIZE(
,
,
,
"Nome misura",
) Il primo argomento definisce la tabella di partenza. Dopo si indicano una o più colonne per il raggruppamento e, se necessario, coppie formate da un nome e da un’espressione che calcola una colonna aggiuntiva.
Supponiamo di avere una tabella Vendite con le colonne Anno, Categoria e Importo. Una sintesi semplice può essere scritta così:
SUMMARIZE(
Vendite,
Vendite[Anno],
Vendite[Categoria],
"Totale vendite", SUM(Vendite[Importo])
)Il risultato conterrà una riga per ogni coppia anno-categoria, insieme al totale calcolato per quel gruppo. Se il modello contiene tre anni e quattro categorie effettivamente presenti nei dati, il numero di righe non sarà necessariamente 12, perché SUMMARIZE considera le combinazioni realmente disponibili.
In base alle impostazioni locali di Power BI, il separatore degli argomenti può essere la virgola oppure il punto e virgola. Se una formula copiata da un esempio genera un errore di sintassi, questo è uno dei primi elementi da controllare.
Un esempio pratico con vendite per anno e categoria
Immaginiamo un modello con una tabella dei fatti Vendite e dimensioni separate per Prodotto, Cliente e Calendario. In un modello ben strutturato, le categorie dovrebbero provenire dalla dimensione prodotto e gli anni dalla dimensione calendario, non essere duplicate inutilmente nella tabella delle transazioni.
Una tabella calcolata di riepilogo potrebbe usare le dimensioni collegate:
Riepilogo vendite =
SUMMARIZE(
Vendite,
Calendario[Anno],
Prodotto[Categoria],
"Ricavi", SUM(Vendite[Importo]),
"Quantità", SUM(Vendite[Quantità])
)Questo approccio permette di leggere i risultati secondo la logica del modello. La colonna Ricavi mostra l’importo aggregato, mentre Quantità consente di distinguere una crescita dovuta a più pezzi venduti da una crescita generata soltanto da prezzi medi più alti.
Per calcolare un indicatore più significativo, si può aggiungere una misura derivata:
Riepilogo vendite =
ADDCOLUMNS(
SUMMARIZE(
Vendite,
Calendario[Anno],
Prodotto[Categoria]
),
"Ricavi", CALCULATE(SUM(Vendite[Importo])),
"Quantità", CALCULATE(SUM(Vendite[Quantità]))
)Qui ADDCOLUMNS aggiunge colonne alla tabella di gruppi. L’uso di CALCULATE rende esplicita la trasformazione del contesto di riga in contesto di filtro, un dettaglio che spesso decide se il risultato sarà corretto oppure identico su tutte le righe.
Per una misura percentuale, invece, spesso non serve costruire una tabella calcolata. È più efficiente creare una misura dinamica, capace di reagire ai filtri applicati dall’utente nel report:
Margine percentuale =
DIVIDE(
[Margine],
[Ricavi],
0
)La mia regola pratica è semplice: uso una tabella riepilogativa quando mi serve davvero una struttura tabellare riutilizzabile. Se devo soltanto mostrare un totale o una percentuale in una scheda, preferisco una misura.
SUMMARIZE, SUMMARIZECOLUMNS e GROUPBY non fanno la stessa cosa
Le funzioni di raggruppamento possono sembrare intercambiabili, ma hanno comportamenti diversi. Scegliere quella giusta evita formule più complesse del necessario e riduce i problemi legati al contesto.
| Funzione | Uso principale | Caratteristica da ricordare |
|---|---|---|
| SUMMARIZE | Creare una tabella raggruppata a partire da una tabella esistente | Flessibile, ma richiede attenzione al contesto delle colonne calcolate |
| SUMMARIZECOLUMNS | Raggruppare colonne del modello e calcolare espressioni | Spesso più adatta alle query e ai riepiloghi moderni |
| GROUPBY | Aggregare risultati intermedi prodotti da espressioni DAX | Permette di usare CURRENTGROUP() e non applica automaticamente CALCULATE |
| SELECTCOLUMNS | Selezionare o rinominare colonne | Non è una funzione di aggregazione vera e propria |
Un esempio con SUMMARIZECOLUMNS è più compatto:
SUMMARIZECOLUMNS(
Calendario[Anno],
Prodotto[Categoria],
"Ricavi", [Ricavi],
"Margine", [Margine]
)Questa funzione lavora direttamente con colonne qualificate del modello e include solo le combinazioni per cui le espressioni non risultano vuote, salvo l’uso di funzioni specifiche come IGNORE. Per questo motivo può produrre un risultato diverso da una semplice combinazione di valori distinti.
GROUPBY è invece più adatta quando si parte da una tabella intermedia. Il suo comportamento è intenzionalmente diverso: nelle colonne aggiuntive non esegue il CALCULATE implicito associato a SUMMARIZE e permette di lavorare con CURRENTGROUP(). Non la sceglierei come prima funzione da imparare, ma diventa utile per aggregazioni successive su risultati già elaborati.
Gli errori più comuni e come evitarli
Confondere una misura con una tabella calcolata
SUMMARIZE restituisce una tabella, quindi non può sostituire automaticamente una misura. Se il risultato deve aggiornarsi quando l’utente seleziona un anno, un cliente o un’area geografica, una misura dinamica è spesso la soluzione migliore.
Ignorare le relazioni del modello
Se Calendario[Anno] non filtra correttamente Vendite, il raggruppamento può sembrare plausibile ma restituire valori non distinti per anno. Prima di correggere la formula, verifico sempre la direzione del filtro, la cardinalità e la presenza di una relazione attiva.
Aggiungere troppe espressioni dentro SUMMARIZE
Le colonne calcolate direttamente dentro SUMMARIZE possono diventare difficili da leggere e da controllare. In molti casi è più chiaro separare i passaggi con SUMMARIZE seguito da ADDCOLUMNS, usando CALCULATE in modo esplicito.
Usare colonne non adatte al raggruppamento
Raggruppare per una descrizione testuale molto dettagliata, come un codice transazione o un indirizzo completo, può creare una tabella enorme. Prima di aggiungere una colonna, mi chiedo sempre se rappresenta davvero una dimensione analitica oppure soltanto un dettaglio operativo.
Leggi anche: DATEADD DAX per confrontare periodi in Power BI
Dimenticare i valori vuoti
Un gruppo senza vendite può restituire BLANK() invece di zero. Se il report richiede uno zero esplicito, bisogna gestirlo con attenzione, per esempio tramite COALESCE([Ricavi], 0). Non conviene sostituire automaticamente tutti i vuoti, perché un valore mancante e un valore realmente pari a zero possono avere significati diversi.
Un metodo pratico per costruire riepiloghi DAX affidabili
Per lavorare senza perdere tempo, parto dalla domanda aziendale e non dalla funzione. “Quanto abbiamo venduto?” richiede una misura; “come sono distribuite le vendite per anno e categoria?” può richiedere una tabella raggruppata.
- Definisci il livello di dettaglio, per esempio anno, mese, prodotto o cliente.
- Controlla il modello e verifica che le dimensioni filtrino correttamente la tabella dei fatti.
- Crea prima le misure base, come ricavi, quantità e margine.
- Costruisci il raggruppamento con SUMMARIZE o SUMMARIZECOLUMNS.
- Confronta i totali con una visualizzazione o con una misura indipendente.
- Testa i filtri su più periodi, categorie e clienti prima di pubblicare il report.
Per verificare una tabella intermedia, la DAX Query View o uno strumento come DAX Studio sono molto utili. Posso eseguire una query con EVALUATE, osservare le righe restituite e capire subito se il problema nasce dal raggruppamento, dalla relazione o dall’espressione aggregata.
Le prestazioni dipendono soprattutto dalla qualità del modello. Una tabella dei fatti molto grande, colonne ad alta cardinalità e formule ripetute possono aumentare i tempi di calcolo; una corretta separazione tra dimensioni e fatti, invece, rende il riepilogo più leggero e prevedibile.
La scelta giusta dipende dalla domanda analitica
SUMMARIZE è una funzione importante per comprendere il raggruppamento in DAX, ma non è una risposta universale. Serve quando occorre ottenere una tabella organizzata per gruppi; per una metrica visualizzata nel report, una misura resta normalmente più adatta.
Il passaggio che fa davvero la differenza è imparare a leggere il contesto. Una formula breve può produrre risultati sbagliati se il modello non ha relazioni solide o se il contesto di filtro non viene trasformato nel modo atteso.
Quando il riepilogo cresce di complessità, conviene valutare SUMMARIZECOLUMNS e separare le misure dalle tabelle intermedie. In questo modo il modello rimane più leggibile, i controlli diventano più semplici e il report può evolvere senza trasformare ogni modifica in una ricerca dell’errore.
