Quando un report deve distinguere vendite sopra l’obiettivo, clienti redditizi e ordini da verificare, la funzione IF in Power BI è spesso il punto di partenza più semplice. In questo articolo mostro come usarla in DAX, quando scegliere una colonna calcolata o una misura, come gestire più condizioni e quali errori evitare per ottenere risultati affidabili.
La logica IF rende le analisi DAX più leggibili e operative
- Sintassi base: IF verifica una condizione e restituisce un valore se è vera oppure un altro se è falsa.
- Colonna o misura: la scelta dipende dal fatto che la regola debba essere valutata riga per riga oppure secondo i filtri del report.
- Più scenari: SWITCH(TRUE()) è spesso più chiaro di molti IF annidati.
- Affidabilità: BLANK, divisioni per zero e tipi di dati diversi possono alterare il risultato.
- Metodo pratico: definire prima la regola di business e solo dopo tradurla in DAX evita formule difficili da mantenere.
Come funziona IF in DAX
La funzione IF segue una logica molto diretta. Valuta un’espressione logica e restituisce un risultato quando la condizione è vera, oppure un risultato alternativo quando è falsa. La struttura essenziale è questa:
IF(, , )
Per esempio, una colonna che assegna una fascia ai clienti può essere scritta così:
Fascia cliente =
IF(
'Clienti'[Fatturato] >= 100000,
"Premium",
"Standard"
)
Il risultato sarà Premium per i clienti con almeno 100.000 euro di fatturato e Standard per tutti gli altri. È una regola semplice, ma già utile per segmentare una tabella, applicare colori condizionali o filtrare una pagina del report.
Il terzo argomento è opzionale. Se viene omesso e la condizione è falsa, DAX restituisce BLANK. Nella pratica preferisco indicare sempre il valore alternativo quando un risultato vuoto potrebbe confondere chi legge il report. Microsoft Learn segnala inoltre che i risultati di IF devono essere compatibili con un tipo di dato coerente, soprattutto quando si mescolano numeri, testo e valori vuoti.Colonna calcolata o misura per la stessa regola
La differenza più importante non riguarda la sintassi, ma il momento in cui Power BI valuta la condizione. Una colonna calcolata viene calcolata per ogni riga del modello e rimane memorizzata. Una misura, invece, viene calcolata quando l’utente interagisce con il report e rispetta il contesto dei filtri.| Soluzione | Quando usarla | Esempio tipico |
|---|---|---|
| Colonna calcolata | La regola riguarda ogni singolo record | Categoria ordine, fascia cliente, stato prodotto |
| Misura | Il risultato deve cambiare con filtri, date o selezioni | Obiettivo raggiunto, margine target, alert sulle vendite |
| Power Query | La trasformazione deve avvenire durante l’importazione | Pulizia e classificazione stabile dei dati |
Una misura per verificare il raggiungimento dell’obiettivo può essere questa:
Stato obiettivo =
IF(
[Vendite totali] >= [Obiettivo vendite],
"Obiettivo raggiunto",
"Da recuperare"
)
La stessa misura può restituire un risultato diverso per regione, mese o agente commerciale, perché [Vendite totali] e [Obiettivo vendite] vengono ricalcolate nel contesto visualizzato.
Un errore frequente consiste nell’usare una misura per classificare ogni riga di una tabella. Una misura non ragiona automaticamente come una colonna. Se devo contare i clienti che superano una soglia individuale, posso iterare sui clienti con SUMX:
Clienti premium =
SUMX(
VALUES('Clienti'[ClienteID]),
IF([Vendite cliente] >= 100000, 1, 0)
)
Qui IF viene valutato per ciascun cliente presente nel contesto. È una distinzione fondamentale, perché spesso un risultato apparentemente sbagliato nasce dal contesto di valutazione, non dalla condizione in sé.

Tre esempi pratici per usare IF in Power BI
Segnalare vendite sopra o sotto il target
Per un indicatore sintetico, la condizione può trasformare una percentuale in un messaggio leggibile:
Risultato commerciale =
VAR Scostamento = DIVIDE([Vendite totali] - [Obiettivo vendite], [Obiettivo vendite])
RETURN
IF(
Scostamento >= 0,
"Sopra il target",
"Sotto il target"
)
L’uso di una variabile DAX rende la formula più facile da controllare e modificare. Se domani la soglia cambia da zero a 5%, basta intervenire su un solo punto della misura.
Gestire il margine
Una classificazione del margine può distinguere le vendite sane da quelle che richiedono attenzione:
Classe margine =
VAR MarginePercentuale =
DIVIDE([Ricavi totali] - [Costi totali], [Ricavi totali])
RETURN
IF(
ISBLANK(MarginePercentuale),
"Non disponibile",
IF(
MarginePercentuale >= 0.30,
"Margine alto",
"Margine da migliorare"
)
)
In questo caso controllo prima il valore vuoto e solo dopo applico la soglia del 30%. Senza questo passaggio, mesi privi di ricavi potrebbero apparire come casi negativi invece di essere segnalati correttamente come dati non disponibili.
Creare un alert per gli ordini
IF è utile anche per trasformare dati operativi in un segnale immediato:
Priorità ordine =
IF(
'Ordini'[Giorni ritardo] > 7
&& 'Ordini'[Valore ordine] > 5000,
"Alta",
"Normale"
)
L’operatore && richiede che entrambe le condizioni siano vere. Per accettare almeno una delle due condizioni si usa invece ||. La differenza sembra piccola, ma cambia completamente il significato della regola e può generare molti falsi alert.
Quando IF annidati diventa difficile da mantenere
Due condizioni annidate possono essere perfettamente leggibili. Quando però le soglie diventano quattro o cinque, la formula si trasforma rapidamente in una lunga parentesi difficile da verificare. In questi casi preferisco SWITCH(TRUE()), che permette di elencare le condizioni in modo più ordinato.
Fascia vendite =
SWITCH(
TRUE(),
[Vendite totali] >= 200000, "Alta",
[Vendite totali] >= 100000, "Media",
[Vendite totali] > 0, "Bassa",
"Nessuna vendita"
)
DAX verifica le condizioni dall’alto verso il basso e restituisce il primo risultato valido. Per questo l’ordine è decisivo: la soglia più alta deve comparire prima di quella più bassa, altrimenti una vendita da 250.000 euro verrebbe intercettata dalla condizione dei 100.000.
IF resta la scelta migliore quando esistono soltanto due esiti chiari. SWITCH è più adatto per fasce, livelli, stati o classificazioni con molte alternative. Non migliora automaticamente le prestazioni in ogni scenario, ma quasi sempre migliora la leggibilità e riduce il rischio di errori durante le modifiche.
Gli errori che alterano il risultato
Confondere BLANK con zero
Un valore BLANK non significa necessariamente zero. Può indicare che non esiste una riga, che manca una selezione o che la misura non può produrre un risultato. Se voglio sostituire esplicitamente un vuoto con zero, posso usare COALESCE:
Vendite visualizzate =
COALESCE([Vendite totali], 0)
Usare IF per ogni gestione dei vuoti rende spesso il codice più lungo senza aggiungere controllo reale. COALESCE comunica meglio l’intenzione.
Dividere prima di controllare il denominatore
Per percentuali e margini è preferibile DIVIDE rispetto all’operatore `/`, perché gestisce in modo più sicuro un denominatore vuoto o uguale a zero:
Margine % =
DIVIDE(
[Margine],
[Ricavi totali],
0
)
Il terzo argomento indica il valore alternativo. Se la distinzione tra zero e dato non disponibile è importante, posso lasciare il risultato vuoto invece di forzarlo a 0.
Mescolare testo e numeri senza criterio
Una condizione come IF([Vendite totali] > 100000, 1, "No") combina un numero e una stringa. Anche quando DAX riesce a gestire la formula, il risultato può diventare scomodo da aggregare o visualizzare. Mantengo quindi lo stesso tipo di dato nei due rami, per esempio due numeri oppure due etichette testuali.
Leggi anche: DAX Studio con Power BI per capire e velocizzare il DAX
Usare la sintassi sbagliata nel contesto sbagliato
In Power Query si lavora con il linguaggio M, mentre nelle misure e nelle colonne calcolate si usa DAX. La logica può sembrare identica, ma funzioni e sintassi non sono intercambiabili. Anche il separatore degli argomenti può cambiare in base alle impostazioni locali: se la virgola produce un errore, è possibile che l’ambiente richieda il punto e virgola.Un metodo semplice per costruire formule IF solide
- Scrivo la regola in linguaggio naturale. Per esempio, “un cliente è premium se il fatturato annuale è almeno 100.000 euro”.
- Definisco l’unità di valutazione. Chiedo se la condizione riguarda una riga, un cliente, un mese o l’intero contesto filtrato.
- Scelgo il livello corretto. Uso Power Query per trasformazioni stabili, una colonna per classificazioni riga per riga e una misura per risultati dinamici.
- Gestisco i casi limite. Verifico valori vuoti, zeri, soglie uguali e dati mancanti.
- Testo con esempi concreti. Controllo almeno un valore sotto soglia, uno sopra soglia e uno esattamente uguale alla soglia.
Questo piccolo processo mi evita di correggere formule dopo la pubblicazione del report. Il test sulla soglia esatta è particolarmente utile: > 100000 e >= 100000 non significano la stessa cosa.
Per formule più articolate uso le variabili con VAR e assegno nomi comprensibili agli intermedi. Una misura leggibile non è solo più elegante: è più facile da validare insieme a chi conosce la regola aziendale ma non lavora quotidianamente con DAX.
La scelta giusta dipende dalla domanda del report
IF è uno strumento essenziale, ma non dovrebbe diventare una soluzione automatica per ogni problema. Se devo classificare un record in fase di caricamento, Power Query può essere più efficiente; se il risultato deve reagire ai filtri, la misura è la scelta naturale; se ho molte categorie, SWITCH rende la logica più trasparente.
Il mio criterio è semplice: prima chiarisco il significato del risultato, poi scelgo la funzione. Una formula breve ma applicata nel contesto sbagliato produce un report apparentemente ordinato e analiticamente fragile. Una condizione ben definita, invece, trasforma DAX in uno strumento concreto per leggere meglio vendite, margini, clienti e operazioni.
