In DAX, la distinzione tra funzioni di aggregazione come SUM e funzioni iteratrici come SUMX non è immediata e riguarda il meccanismo di valutazione del contesto di calcolo.
Funzioni come SUMX, AVERAGEX, MINX e MAXX permettono di eseguire calcoli avanzati, ma richiedono una comprensione chiara di cosa significhi “iterare” e, soprattutto, su quale unità di aggregazione venga applicato il calcolo.
Questo articolo è rivolto a chi conosce già DAX e il concetto di contesto di filtro, ma vuole comprendere quando usare un iteratore, come interpretare il concetto di riga e come evitare errori concettuali.
Cosa sono gli iteratori DAX
Un iteratore DAX è una funzione che valuta un’espressione riga per riga su una tabella e aggrega i risultati in un unico valore finale.
A differenza delle funzioni di aggregazione “semplici” (SUM, AVERAGE, MIN, MAX), gli iteratori:
- non aggregano direttamente una colonna
- valutano un’espressione riga per riga (intesa come unità logica)
- introducono un contesto di riga implicito
- aggregano i risultati prodotti
La “riga” come unità logica di aggregazione
In DAX, una riga non è necessariamente una riga fisica di una tabella, ma rappresenta un’unità logica di aggregazione dei dati su cui l’espressione DAX viene valutata. In pratica il livello di dettaglio a cui attribuiamo significato al calcolo, e da cui si aggrega.
Questa unità può coincidere:
- con una riga di una tabella dei fatti
- con una riga di una tabella dimensionale
- con una riga di una tabella virtuale creata in DAX
È questa flessibilità che rende gli iteratori così potenti e versatili.
Le principali funzioni iteratrici in DAX
1. SUMX
SUMX calcola la somma dei risultati di un’espressione valutata su ogni riga di una tabella.
Sintassi
SUMX(
Tabella,
<Espressione>
)
Esempio: costo totale delle vendite
Supponiamo una fact table Vendite, nella quale ogni riga rappresenta una transazione di vendita. Ogni vendita è caratterizzata da:
- Quantità
- Costo Unitario
quindi per ricavare il costo totale:
SUMX(
Vendite,
Vendite[Quantità] * Vendite[Costo Unitario]
)
Cosa succede
- SUMX itera tutte le righe/transazioni della tabella Vendite
- per ogni riga/transazione si calcola il costo della singola transazione
- si sommano tutti i risultati parziali ottenuti
Questo calcolo non potrebbe essere risolto con una semplice SUM, perché il valore da aggregare non esiste come colonna.
AVERAGEX
AVERAGEX calcola la media dei risultati di un’espressione valutata su ogni riga di una tabella.
Sintassi
AVERAGEX(
Tabella,
<Espressione>
)
Esempio: importo medio di vendita
AVERAGEX(
Vendite,
Vendite[Quantità] * Vendite[Prezzo Unitario]
)
Cosa succede
- AVERAGEX itera tutte le righe/transazioni della tabella Vendite
- per ogni riga/transazione si calcola l’importo della singola transazione
- media tutti i risultati parziali ottenuti
Idem come prima, questo calcolo non potrebbe essere risolto con AVERAGE, perché il valore di cui fare la media non esiste come dato (colonna) nel dataset.
3. MINX e MAXX
Le funzioni MINX e MAXX permettono di trovare il valore minimo o massimo risultatante dalla valutazione di un’espressione riga per riga, non da una colonna come gli MIN e MAX.
Sintassi
MINX(
Tabella,
<Espressione>
)
MAXX(
Tabella,
<Espressione>
)
Esempio: transazione con minore e maggiore importo di vendita
MINX(
Vendite,
Vendite[Quantità] * Vendite[Prezzo Unitario]
)
MAXX(
Vendite,
Vendite[Quantità] * Vendite[Prezzo Unitario]
)
Cosa succede
- MINX e MAXX iterano su tutte le righe/transazioni della tabella Vendite
- per ogni riga/transazione si calcola l’importo della singola transazione
- identificano l’importo minimo e massimo rispettivamente, fra tutte le transazioni registrate a sistema.
- Esegui il flusso in modalità Test
- Individua i dati nel JSON della Risposta
- Configura l’azione Parse JSON con Content
Power Fx outputs(‘Run_a_query_against_a_dataset’)?[‘body/firstTableRows’]
- Genera lo schema dei dati a partire del JSON copiato usando l’opzione Generate from sample
Struttura JSON output di esempio
Errori comuni nell’uso degli iteratori DAX
Gli errori più frequenti che vediamo nei progetti sono:
- usare un iteratore quando una funzione di aggregazione standard è sufficiente
- ignorare l’impatto sulle performance
- confondere contesto di riga e contesto di filtro
- scrivere espressioni DAX complesse o con funzioni logiche, ad esempio IF.
Gli iteratori DAX: usarli bene è una questione di Design del modello di calcolo
Gli iteratori DAX sono uno strumento fondamentale per l’analisi e capirne il funzionamento, il legame con il contesto di riga e le implicazioni sulle performance consente di scrivere misure corrette, leggibili e manutenibili.
Usarli bene non è solo una questione sintattica, ma di design del modello e del calcolo.
Un utilizzo corretto delle funzioni iteratrici DAX è il risultato di:
- una chiara definizione dell’unità di analisi (o riga)
- un’espressione coerente con il significato del KPI
- un modello dati progettato per supportare il calcolo
Nel prossimo articolo vedremo insieme come definire correttamente l’unità di analisi per sfuttare al massimo questa funzione. Stay tuned!
Scopri tutte le nostre soluzioni Power BI
Al tuo fianco dalla consulenza alla formazione a soluzioni di data visualization.
Visualitics Team
Questo articolo è stato scritto e redatto da uno dei nostri consulenti.
Condividi ora sui tuoi canali social o via email: