Iteratori DAX in Power BI: Comprendere SUMX, MINX, MAXX e AVERAGEX

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.

SUMX_Esempio_Vendite_Costo_Totale
SUMX esempio

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.

AVERAGEX_Esempio_Importo_Medio_Vendita
AVERAGEX esempio

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.
  1. Esegui il flusso in modalità Test
  2. Individua i dati nel JSON della Risposta
  3. Configura l’azione Parse JSON con Content

Power Fx outputs(‘Run_a_query_against_a_dataset’)?[‘body/firstTableRows’]

  1. Genera lo schema dei dati a partire del JSON copiato usando l’opzione Generate from sample

     

Struttura JSON output di esempio

MAXX_MINX_Esempio_Importo_Medio_Vendita
MINX e MAXX 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: