• Power BI e DAX
  • Formule DAX in Power BI, componenti e contesto spiegati

Formule DAX in Power BI, componenti e contesto spiegati

Emilio Santoro 13 luglio 2026
Copertina libro "DAX: Comprendere e usare il linguaggio delle formule di Microsoft Power BI". Immagine di un uomo davanti a uno schermo con grafici e formule.

Indice

Quando una misura in Power BI restituisce un numero inatteso, il problema spesso non è la funzione utilizzata, ma il modo in cui i vari elementi DAX lavorano insieme. In questa guida metto ordine tra sintassi, funzioni, operatori, valori, riferimenti a tabelle e colonne, distinguendo anche tra misure, colonne calcolate e contesto di valutazione. Gli esempi pratici aiutano a capire non solo come scrivere una formula, ma soprattutto perché produce un determinato risultato.

La mappa essenziale per capire DAX in Power BI

  • Una formula DAX combina nome, assegnazione, funzione, argomenti e riferimenti al modello.
  • Le misure si ricalcolano in base ai filtri del report, mentre le colonne calcolate vengono valutate riga per riga.
  • Il contesto di filtro cambia il risultato in base a slicer, righe, colonne, relazioni e filtri inseriti nella formula.
  • CALCULATE modifica il contesto e rappresenta uno degli strumenti più importanti dell’analisi DAX.
  • DIVIDE, SUMX e variabili rendono le formule più sicure, leggibili e facili da mantenere.

Diagramma che illustra i **dax componenti**: contesto di riga, transizione di contesto e contesto di filtro, con un esempio di calcolo.

Quali sono i componenti di una formula DAX

Per leggere DAX senza perdersi tra parentesi e parentesi quadre, io parto sempre dalla struttura della formula. Un’espressione non è un blocco unico: è composta da elementi con ruoli precisi, proprio come una frase ha soggetto, verbo e complementi.

Vendite totali = SUM ( Sales[SalesAmount] )

In questo esempio, Vendite totali è il nome della misura, mentre il simbolo = assegna alla misura l’espressione che segue. La funzione SUM somma i valori della colonna Sales[SalesAmount], dove Sales identifica la tabella e [SalesAmount] la colonna.

Elemento Funzione Esempio
Nome Identifica la misura, la colonna o la tabella calcolata Vendite totali
Assegnazione Indica l’inizio dell’espressione =
Funzione Esegue un calcolo o una trasformazione SUM
Argomento Fornisce alla funzione i dati su cui lavorare Sales[SalesAmount]
Operatori Combinano o confrontano valori ed espressioni *, >, &&

Funzioni e argomenti

Le funzioni DAX hanno un nome seguito da parentesi tonde. Tra le parentesi inserisco uno o più argomenti, cioè valori, colonne, tabelle o altre espressioni. Una formula può contenere funzioni annidate, ma quando la nidificazione diventa difficile da leggere preferisco introdurre variabili con VAR.

Margine percentuale =
VAR Margine = [Vendite totali] - [Costi totali]
RETURN
    DIVIDE ( Margine, [Vendite totali] )

Qui VAR salva un risultato intermedio e RETURN indica ciò che la misura deve restituire. È una scelta semplice, ma spesso fa la differenza quando una formula viene modificata dopo mesi o deve essere controllata da un altro analista.

Riferimenti a tabelle e colonne

La forma più chiara per citare una colonna è Tabella[Colonna]. Per una misura si usano invece le parentesi quadre, come in [Vendite totali]. Confondere questi due riferimenti è uno degli errori iniziali più comuni, perché una colonna contiene molti valori, mentre una misura restituisce un risultato calcolato nel contesto corrente.

Il separatore degli argomenti può apparire come virgola o punto e virgola in base alle impostazioni locali di Power BI Desktop. Quando una formula copiata da un’altra installazione genera un errore di sintassi, il separatore è uno dei primi elementi che controllo.

Valori, operatori e funzioni svolgono lavori diversi

Una formula DAX può restituire un valore scalare, come un numero, una data, un testo o un valore booleano. Alcune funzioni restituiscono invece una tabella temporanea, che può diventare l’argomento di un’altra funzione. Questa distinzione è essenziale per capire perché una funzione come SUM non può ricevere direttamente qualsiasi espressione tabellare.

Categoria A cosa serve Esempi utili
Aritmetica Esegue calcoli numerici +, -, *, /, ^
Confronto Restituisce TRUE o FALSE =, ==, >, <>
Logica Combina condizioni &&, ||, IN
Testo Unisce o modifica stringhe &, CONCATENATEX, FORMAT
Aggregazione Calcola somme, medie o conteggi SUM, AVERAGE, COUNTROWS

Gli operatori seguono un ordine di precedenza. Per esempio, =5 + 2 * 3 restituisce 11 perché la moltiplicazione viene eseguita prima dell’addizione. Con =(5 + 2) * 3 il risultato diventa 21. Le parentesi non servono solo a rispettare la sintassi: chiariscono anche l’intenzione della formula e prevengono calcoli ambigui.

Un dettaglio che può falsare i risultati riguarda il valore BLANK. Nei confronti generici, DAX può trattarlo come zero, stringa vuota o FALSE, mentre l’operatore == richiede una corrispondenza stretta. Quando distinguere un valore mancante da uno zero è importante, uso ISBLANK oppure il confronto strettamente uguale.

Misure, colonne calcolate e tabelle non sono intercambiabili

La scelta dell’oggetto DAX è spesso più importante della funzione. Una misura, una colonna calcolata e una tabella calcolata possono usare funzioni simili, ma vengono valutate in momenti diversi e rispondono a esigenze diverse.

Oggetto Quando viene calcolato Uso tipico
Misura Quando il visual o il filtro richiede il risultato Totali, margini, percentuali, KPI dinamici
Colonna calcolata Durante il caricamento o il refresh del modello Categorie, classificazioni, chiavi e valori riga per riga
Tabella calcolata Durante il refresh del modello Tabelle di supporto, calendari e analisi intermedie

Se voglio calcolare le vendite totali in una scheda filtrabile per anno, prodotto e area, creo una misura. Se invece devo assegnare a ogni riga un’etichetta come “Alta priorità” quando l’importo supera una soglia, una colonna calcolata può essere più adatta.

Vendite totali = SUM ( Sales[SalesAmount] )

Classe ordine =
IF ( Sales[SalesAmount] >= 1000, "Alta", "Standard" )

Le colonne calcolate aumentano la dimensione del modello perché salvano un risultato per ogni riga. Per questo, quando il calcolo deve reagire alle selezioni dell’utente, preferisco quasi sempre una misura. La colonna resta utile quando il valore deve essere utilizzato come categoria, filtro o campo di raggruppamento.

Il contesto decide il risultato della formula

Il contesto è il componente che più spesso mette in difficoltà chi arriva da Excel. La stessa misura può restituire numeri diversi perché Power BI la valuta in base a righe, colonne, slicer, filtri del report e relazioni tra tabelle.

Contesto di filtro

Il contesto di filtro è l’insieme dei dati visibili durante il calcolo. Se inserisco una misura in una matrice con Anno sulle righe, la misura viene valutata separatamente per ogni anno. Se aggiungo uno slicer per la regione, il risultato viene ulteriormente limitato a quella selezione.

Vendite negozio =
CALCULATE (
    [Vendite totali],
    Channel[ChannelName] = "Store"
)

CALCULATE valuta un’espressione in un contesto modificato. Nell’esempio, la misura delle vendite viene ricalcolata mantenendo i filtri già presenti e aggiungendo la condizione relativa al canale Store. È questo comportamento a rendere possibile la maggior parte delle analisi comparative in Power BI.

Contesto di riga

Il contesto di riga indica la riga corrente e compare soprattutto nelle colonne calcolate e nelle funzioni iteratore. Funzioni come SUMX, AVERAGEX e FILTER percorrono una tabella, valutando un’espressione per ogni riga o per ogni elemento filtrato.

Valore vendite =
SUMX (
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)

La differenza rispetto a SUM è concreta. SUM aggrega una colonna già valorizzata, mentre SUMX calcola prima il prodotto riga per riga e solo dopo somma i risultati. Usarlo quando non serve può rendere il modello più pesante, ma in questo scenario è la funzione corretta.

Come costruire formule DAX più solide

Quando creo una nuova misura, seguo una sequenza breve. Prima definisco il risultato in linguaggio naturale, poi verifico quali tabelle devono filtrarlo e solo alla fine scelgo la funzione. Questo approccio riduce la tentazione di partire da una formula complessa trovata online senza comprenderne il comportamento.

  1. Definisco il KPI e chiarisco se deve reagire ai filtri del report.
  2. Controllo il modello, soprattutto relazioni, direzione dei filtri e tabella calendario.
  3. Creo una misura base, come vendite, costi o quantità.
  4. Costruisco misure derivate usando variabili e funzioni mirate.
  5. Verifico il risultato in una tabella con più livelli di dettaglio, non soltanto in una scheda KPI.

Per le divisioni uso normalmente DIVIDE invece dell’operatore /. In questo modo posso gestire in modo esplicito il caso in cui il denominatore sia zero o vuoto.

Margine percentuale =
DIVIDE (
    [Margine],
    [Vendite totali],
    0
)

Il terzo argomento restituisce 0 quando la divisione non è possibile. In alcuni report preferisco lasciare il risultato vuoto, perché uno zero può suggerire che il margine sia realmente nullo. La scelta dipende dal significato del KPI e da come verrà letto dal destinatario.

Leggi anche: Power BI e DAX - modelli, KPI e report affidabili

Errori che controllo per primi

  • Colonne e misure confuse, soprattutto quando una formula restituisce un errore di tipo.
  • Relazioni mancanti o inattive, che impediscono a un filtro di raggiungere la tabella dei fatti.
  • Uso eccessivo di colonne calcolate, con conseguente crescita inutile del modello.
  • Filtri rimossi senza volerlo tramite funzioni come ALL o argomenti errati in CALCULATE.
  • Divisioni non protette, che generano errori o risultati poco leggibili.

Un ultimo controllo che considero indispensabile è il confronto tra il totale della misura e una semplice aggregazione dei dati di origine. Se i numeri non coincidono, non correggo subito la formula: verifico prima filtri, granularità e relazioni. In DAX il calcolo può essere perfettamente corretto e applicato però al contesto sbagliato.

La sequenza che uso per non perdere il controllo del modello

Per imparare i componenti DAX non serve memorizzare centinaia di funzioni. Conviene partire da poche misure affidabili, comprendere la differenza tra contesto di riga e contesto di filtro e osservare come CALCULATE modifica il risultato.

Il percorso più efficace, secondo la mia esperienza, è costruire un piccolo modello di vendite con una tabella calendario, una tabella dei prodotti e una tabella dei fatti. Da lì si possono testare somme, percentuali, confronti temporali e filtri, controllando ogni misura in una matrice.

Quando la formula è leggibile, il modello ha relazioni coerenti e il risultato è stato verificato in più contesti, DAX smette di sembrare una raccolta di funzioni isolate. Diventa il linguaggio che collega dati, logica di business e decisioni operative dentro Power BI.

Domande frequenti

Una formula DAX combina il nome dell’oggetto, il simbolo di assegnazione, una funzione, gli argomenti e i riferimenti al modello. Ad esempio, SUM ( Sales[SalesAmount] ) usa la tabella Sales e la colonna [SalesAmount]. Le misure vengono richiamate invece con le sole parentesi quadre, come [Vendite totali].

Una misura è adatta a totali, margini, percentuali e KPI che devono reagire ai filtri del report. Una colonna calcolata viene valutata riga per riga durante il caricamento o il refresh ed è utile per categorie, classificazioni e raggruppamenti. Le colonne calcolate aumentano inoltre la dimensione del modello perché salvano un risultato per ogni riga.

Il contesto di filtro comprende i dati visibili in base a slicer, filtri, righe, colonne e relazioni. Il contesto di riga identifica invece la riga corrente, soprattutto nelle colonne calcolate e nelle funzioni iteratore. SUMX, per esempio, calcola un’espressione per ogni riga e poi somma i risultati, mentre SUM aggrega una colonna già valorizzata.

Per evitare errori quando il denominatore è zero o vuoto, è preferibile usare DIVIDE, specificando eventualmente un terzo argomento come risultato alternativo. Il valore BLANK può essere trattato da DAX come zero, stringa vuota o FALSE nei confronti generici. Quando è necessario distinguere un valore mancante da zero, si possono usare ISBLANK o l’operatore di confronto stretto ==.

Valuta l'articolo

Valutazione: 0.00 Numero di voti: 0

Tag

misure
colonne calcolate
contesto di filtro
calculate
iteratori
Autor Emilio Santoro
Emilio Santoro
Mi chiamo Emilio Santoro e mi occupo di analisi dati, business intelligence e data science da 4 anni. Ho iniziato a esplorare questo mondo perché sono affascinato dal potenziale dei dati nel trasformare le decisioni aziendali e nel fornire una comprensione più profonda dei fenomeni. Sul sito mondobi.it, cerco di rendere accessibili concetti complessi, condividendo la mia esperienza nel collegare la teoria alla pratica e nel presentare informazioni in modo chiaro e organizzato. La mia priorità è offrire contenuti accurati, utili e sempre aggiornati, basati su un'attenta verifica delle fonti e un confronto costante con le tendenze del settore.

Condividi post

Scrivi un commento