Guida DAX per Power BI - misure, filtri e date

Emilio Santoro 24 aprile 2026
Grafico a barre che mostra vendite e somma progressiva per anno fiscale. La formula DAX per la somma progressiva è visibile.

Indice

Quando un report Power BI mostra numeri corretti solo in apparenza, il problema spesso non è il grafico ma il modo in cui la misura interpreta filtri, relazioni e date. Una dax guide efficace deve quindi andare oltre l’elenco delle funzioni e spiegare come costruire un modello affidabile, scegliere tra misure e colonne calcolate e scrivere formule leggibili. Qui raccolgo un percorso pratico per usare DAX in Power BI e Analysis Services, con esempi di vendite, margini, confronti temporali e controlli sugli errori più comuni.

Le basi che rendono davvero utile DAX nei modelli Power BI

  • DAX è un linguaggio di formule per misure, colonne calcolate e tabelle nei modelli tabulari.
  • La differenza tra contesto di filtro e contesto di riga spiega gran parte dei risultati inattesi.
  • CALCULATE è la funzione centrale per modificare i filtri di una misura.
  • Un modello a stella con tabella calendario rende le analisi più semplici e spesso più veloci.
  • Le misure sono preferibili alle colonne calcolate quando il risultato deve reagire ai filtri del report.

[search_image] Power BI DAX data model measures filter context dashboard

Che cos’è DAX e dove si usa in Power BI

DAX, acronimo di Data Analysis Expressions

, è il linguaggio usato per creare calcoli nei modelli tabulari di Power BI, Analysis Services e Power Pivot. Non serve a importare o pulire i dati: quella parte appartiene soprattutto a Power Query. DAX lavora sui dati già caricati nel modello e li trasforma in indicatori analitici dinamici.

La distinzione è importante. In Power Query correggo una colonna, unisco file e modifico la struttura dei dati. Con DAX creo invece una misura come il fatturato totale, la variazione anno su anno o il margine filtrato per un determinato canale. La documentazione di Microsoft Learn presenta proprio DAX come un linguaggio per definire calcoli e applicare filtri dinamici alle tabelle del modello.

Oggetto Quando si calcola Uso tipico
Misura Quando il visual o il filtro richiede il risultato Fatturato, margine, percentuali e KPI
Colonna calcolata Durante il caricamento o il refresh del modello Categorie, flag e attributi riga per riga
Tabella calcolata Durante il refresh Tabelle di supporto, calendari o scenari

Io parto quasi sempre dalle misure. Una colonna calcolata può essere utile, ma occupa memoria e non reagisce ai filtri nello stesso modo. Se voglio che il fatturato cambi selezionando regione, prodotto o mese, una misura è normalmente la scelta corretta.

Il modello dati viene prima della formula

Molti problemi attribuiti a DAX nascono da un modello costruito male. Prima di scrivere formule controllo che esista una tabella dei fatti, come Vendite, collegata a dimensioni separate per Data, Prodotto, Cliente e Canale.

Questo schema, chiamato modello a stella, evita relazioni ambigue e rende più prevedibile il percorso dei filtri. Una relazione tipica collega il campo Vendite[ProdottoID] con Prodotti[ProdottoID], mentre la tabella calendario filtra le vendite attraverso il campo data.

La tabella calendario non è un dettaglio

Per analizzare mesi, trimestri e anni uso una tabella calendario continua, senza date mancanti. Un esempio semplice è:

Calendario =
CALENDAR (
    MIN ( Vendite[Data] ),
    MAX ( Vendite[Data] )
)

Aggiungo poi gli attributi necessari:

Anno = YEAR ( Calendario[Date] )

Mese numero = MONTH ( Calendario[Date] )

Mese = FORMAT ( Calendario[Date], "MMMM" )

Anno mese = FORMAT ( Calendario[Date], "YYYY-MM" )

La colonna del mese va ordinata usando Mese numero, altrimenti Power BI può mostrare aprile prima di febbraio. Dopo aver creato la relazione con la tabella delle vendite, imposto Calendario come tabella data. Senza questo passaggio, le funzioni di intelligenza temporale possono produrre confronti incompleti o difficili da interpretare.

Contesto di filtro e contesto di riga

Il contesto di filtro comprende le selezioni applicate da slicer, righe, colonne, filtri di pagina e relazioni. Se una tabella mostra il fatturato per regione, la misura viene ricalcolata separatamente per ogni regione visibile.

Il contesto di riga, invece, riguarda una riga alla volta. È comune nelle colonne calcolate e nelle funzioni iteratrici come SUMX. Confondere i due contesti è uno dei motivi per cui una formula apparentemente corretta restituisce lo stesso valore su tutte le righe.

Le funzioni DAX da imparare nell’ordine giusto

Non consiglio di memorizzare centinaia di funzioni. Per iniziare bene è più utile capire un gruppo ristretto di strumenti e osservare come cambia il risultato quando si modifica il contesto.

Aggregazioni semplici

La prima misura può essere il fatturato:

Ricavi totali =
SUMX (
    Vendite,
    Vendite[Quantita] * Vendite[PrezzoUnitario]
)

Uso SUMX perché il valore da sommare nasce dalla moltiplicazione tra quantità e prezzo per ogni riga. Se il sistema contiene già una colonna con il totale riga, basta invece SUM ( Vendite[TotaleRiga] ).

Altri indicatori di base possono essere:

Ordini =
DISTINCTCOUNT ( Vendite[OrdineID] )

Clienti attivi =
DISTINCTCOUNT ( Vendite[ClienteID] )

Margine =
SUMX (
    Vendite,
    ( Vendite[PrezzoUnitario] - Vendite[CostoUnitario] )
        * Vendite[Quantita]
)

Margine percentuale =
DIVIDE ( [Margine], [Ricavi totali] )

Preferisco DIVIDE alla divisione con la barra perché gestisce meglio i casi in cui il denominatore è zero o vuoto. In un report reale, un valore vuoto è spesso più onesto di un errore o di una percentuale infinita.

CALCULATE per cambiare la domanda analitica

CALCULATE valuta una misura modificando il contesto di filtro. È la funzione che trasforma una misura generica in una risposta a una domanda precisa:

Ricavi online =
CALCULATE (
    [Ricavi totali],
    Canali[Tipo] = "Online"
)

La misura continua a rispettare anno, regione e prodotto, ma aggiunge il filtro sul canale online. Se voglio rimuovere un filtro specifico, posso usare:

Ricavi senza filtro canale =
CALCULATE (
    [Ricavi totali],
    REMOVEFILTERS ( Canali )
)

Questo schema è utile per calcolare una quota:

Quota online =
DIVIDE (
    [Ricavi online],
    [Ricavi senza filtro canale]
)

Un errore frequente consiste nell’usare ALL o REMOVEFILTERS sull’intero modello quando si voleva ignorare una sola dimensione. Il risultato può sembrare plausibile, ma smette di rispondere ai filtri che l’utente considera importanti.

Leggi anche: Power BI Service e DAX - guida a report, refresh e sicurezza

Funzioni temporali

Con una tabella calendario correttamente collegata posso confrontare il periodo attuale con quello precedente:

Ricavi anno precedente =
CALCULATE (
    [Ricavi totali],
    DATEADD ( Calendario[Date], -1, YEAR )
)

Variazione anno su anno =
[Ricavi totali] - [Ricavi anno precedente]

Variazione percentuale =
DIVIDE (
    [Variazione anno su anno],
    [Ricavi anno precedente]
)

Per il progressivo annuale uso spesso:

Ricavi YTD =
TOTALYTD (
    [Ricavi totali],
    Calendario[Date]
)

Queste misure non correggono dati incompleti. Se mancano giorni nel calendario, se la relazione è inattiva o se la data delle vendite contiene valori errati, il calcolo temporale può essere formalmente valido ma analiticamente debole.

Un percorso pratico per creare il primo modello DAX

Per imparare davvero, io userei un dataset piccolo con vendite, prodotti e date. Un modello troppo grande rende difficile capire se il problema nasce dalla formula, dai dati o dalle relazioni.

  1. Importa i dati e verifica tipi, valori nulli, duplicati e formato delle date.
  2. Separa fatti e dimensioni, evitando di tenere descrizioni ripetute nella tabella delle vendite.
  3. Crea le relazioni con cardinalità uno-a-molti e filtri che scendono dalle dimensioni verso i fatti.
  4. Costruisci la tabella calendario e collegala alla data principale delle transazioni.
  5. Crea tre misure iniziali per ricavi, ordini e margine.
  6. Verifica le misure in una matrice con anno, mese, regione e prodotto prima di costruire dashboard elaborate.

Per esempio, inizierei con una matrice che contiene Anno mese nelle righe e le misure Ricavi totali, Ricavi anno precedente e Variazione percentuale. Se il totale mensile è corretto ma il totale annuale non lo è, non correggerei subito la formula: controllerei prima granularità, filtri e presenza di date duplicate.

Quando le misure di base funzionano, aggiungerei indicatori più vicini alle decisioni aziendali, come margine per categoria, valore medio dell’ordine o tasso di riacquisto. Una formula è utile solo se aiuta qualcuno a decidere, non perché è tecnicamente sofisticata.

Gli errori DAX che fanno perdere più tempo

Problema Perché accade Come lo affronto
Lo stesso valore appare su ogni riga Il filtro della dimensione non raggiunge la tabella dei fatti Controllo relazione, direzione del filtro e chiavi
Una percentuale restituisce errore Il denominatore è zero o vuoto Uso DIVIDE e verifico il significato del dato
Il totale non coincide con la somma delle righe Il totale viene valutato in un contesto diverso Rivedo la logica della misura e uso un iteratore se serve
Il confronto annuale è vuoto Calendario incompleto, relazione errata o data non riconosciuta Controllo la tabella data e il campo usato nella relazione
Il modello è lento Colonne calcolate pesanti, relazioni ambigue o filtri costosi Ridimensiono il modello e analizzo le query più lente

Un altro errore è trattare DAX come Excel. In Excel una formula viene spesso valutata cella per cella; in Power BI una misura viene valutata in base al contesto creato dal visual. Per questo una misura può cambiare risultato senza che la formula venga modificata.

Faccio attenzione anche alle relazioni bidirezionali. Possono risolvere rapidamente un caso, ma aumentano il rischio di filtri ambigui e risultati difficili da spiegare. Nella maggior parte dei modelli preferisco relazioni semplici e una logica esplicita nelle misure.

Come migliorare leggibilità e prestazioni

Quando una formula cresce, uso le variabili per separare i passaggi:

Crescita ricavi =
VAR Ricavi attuali = [Ricavi totali]
VAR Ricavi precedenti = [Ricavi anno precedente]
RETURN
    DIVIDE (
        Ricavi attuali - Ricavi precedenti,
        Ricavi precedenti
    )

Le variabili rendono il codice più facile da controllare e possono evitare di ricalcolare più volte la stessa espressione. Anche i nomi contano: Ricavi totali è più leggibile di una misura chiamata semplicemente Measure 17.

Per migliorare le prestazioni, riduco le colonne inutili, mantengo il modello vicino a uno schema a stella e sposto in Power Query le trasformazioni che non devono reagire ai filtri. Evito inoltre di creare molte colonne calcolate quando la stessa informazione può essere ottenuta con una misura.

Quando un report rallenta, uso Performance Analyzer per capire quale visual impiega più tempo e poi testo la misura in un ambiente di analisi come DAX Studio, se disponibile. La mia regola è semplice: prima misuro il problema, poi ottimizzo. Modificare formule a caso spesso complica il modello senza accelerarlo.

Infine, considero le impostazioni locali. In alcune installazioni italiane il separatore degli argomenti può essere il punto e virgola invece della virgola. Se una formula copiata dalla documentazione non viene accettata, controllo subito separatori, nomi delle colonne e lingua dell’interfaccia.

Da una misura semplice a un modello che regge le decisioni

Il modo più solido per imparare DAX è procedere per strati. Prima costruisco un modello pulito, poi verifico misure elementari, quindi introduco CALCULATE, filtri e analisi temporali. Solo dopo aggiungo logiche più sofisticate come ranking, segmentazione o scenari what-if.

La sintassi si può imparare in pochi giorni, ma la vera competenza nasce dal capire perché una misura cambia valore quando cambia il contesto. Quando questo meccanismo diventa chiaro, Power BI smette di essere soltanto uno strumento per creare grafici e diventa un ambiente affidabile per trasformare dati operativi in decisioni misurabili.

Domande frequenti

Una misura viene calcolata quando il visual o il filtro richiede il risultato e reagisce al contesto del report. Una colonna calcolata viene invece elaborata durante il caricamento o il refresh, riga per riga, e può aumentare l'uso di memoria.

Spesso il filtro della dimensione non raggiunge la tabella dei fatti. Occorre controllare la relazione, le chiavi, la cardinalità e la direzione del filtro tra dimensioni e tabella come Vendite.

CALCULATE serve a valutare una misura modificando il contesto di filtro. Per esempio, può aggiungere il filtro Canali[Tipo] = "Online" oppure rimuovere solo i filtri della dimensione Canali con REMOVEFILTERS.

È necessaria una tabella calendario continua, senza date mancanti, collegata alla data delle vendite e impostata come tabella data. Bisogna inoltre verificare che la relazione sia corretta o attiva e che il campo data sia riconosciuto, prima di usare DATEADD o TOTALYTD.

Valuta l'articolo

Valutazione: 0.00 Numero di voti: 0

Tag

misure
contesto di filtro
modello a stella
tabella calendario
intelligenza temporale
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