Last chance! 50% off DataCamp Premium
Sale ends in
La funzione CALCULATE() è probabilmente una delle funzioni DAX più importanti (e popolari) di Power BI. È semplice da usare ed estremamente versatile: ti permette di ampliare le analisi e creare report Power BI ancora più utili.
Questo tutorial spiega cos’è la funzione CALCULATE() e come usarla, e presuppone che tu conosca già le basi di Power BI e DAX.
Secondo la documentazione di Microsoft Power BI, la funzione CALCULATE() fa parte della categoria delle funzioni di filtro ed è definita come "valutare un’espressione in un contesto di filtro modificato". Un’espressione è sostanzialmente una misura e include funzioni come SUM(), AVERAGE() e COUNT(). Questa espressione viene valutata nel contesto di uno o più filtri.
Come forse sai, i filtri possono essere applicati a un report di Power BI anche semplicemente aggiungendo slicer, senza creare alcuna misura con la funzione CALCULATE(). Tuttavia, ci sono molti casi d’uso in cui la funzione CALCULATE() è più adatta. È particolarmente utile come componente di un’altra funzione. Vedremo come funziona nell’esempio qui sotto per calcolare la percentuale sul totale.
La sintassi DAX di base della funzione CALCULATE() è:
CALCULATE( <expression> [, <filter1> [, <filter2> [, ...]]])
La funzione CALCULATE() si compone di 2 elementi chiave:
L’espressione: è la parte di aggregazione, costruita proprio come una misura con funzioni come SUM(), AVERAGE() e COUNT().
I filtri: questa parte ti permette di specificare uno o più filtri che controllano il contesto dell’aggregazione.
Esistono 3 tipi di filtri utilizzabili nella funzione CALCULATE():
Espressioni di filtro booleane: sono filtri semplici in cui il risultato deve essere TRUE o FALSE.
Espressioni di filtro di tabella: sono filtri più complessi in cui il risultato è una tabella.
Funzioni di modifica dei filtri: filtri come ALL e KEEPFILTERS rientrano in questa categoria e offrono maggiore controllo sul contesto di filtro da applicare.
Puoi aggiungere più filtri al componente filtro della funzione CALCULATE() separandoli con una virgola. Tutti i filtri vengono valutati insieme e il loro ordine non ha importanza.
Puoi controllare come vengono valutati i filtri usando gli operatori logici. Se vuoi che tutte le condizioni siano valutate come TRUE puoi usare AND (&&). Questo è anche il comportamento predefinito dei filtri, come indicato sopra. In alternativa, con l’operatore OR (||) è sufficiente che almeno una condizione sia valutata come TRUE per restituire un risultato.
Per usare CALCULATE(), aggiungi semplicemente una misura alla tua tabella. Puoi farlo andando alla scheda Modeling nel ribbon e selezionando New measure.

Selezione di New measure nella scheda Modeling di Power BI. Immagine dell’autore
Di seguito un semplice esempio della funzione CALCULATE() che usa SUM() per calcolare il fatturato totale filtrando per Country = United Kingdom. Riprenderemo questo esempio più avanti nel tutorial, con maggiori dettagli.
UK Revenue = CALCULATE(SUM('Online Retail'[Revenue]),
'Online Retail'[Country] = "United Kingdom")
In una tabella si vede che la misura UK Revenue applica semplicemente un filtro su Country, oltre al contesto di filtro già presente in tabella per Month. Usare la funzione CALCULATE() in questo modo ti dà un controllo più preciso sul tipo di informazione visualizzata nel grafico.
Tabella del fatturato in Power BI. Immagine dell’autore
Quando crei misure è importante seguire buone pratiche di modellazione dei dati, in particolare per quanto riguarda velocità e ottimizzazione delle query. Per questo motivo, alcuni usi della funzione CALCULATE() sono più rapidi o più appropriati di altri.
Ad esempio, la documentazione Microsoft raccomanda di evitare di usare la funzione FILTER() come argomento di altre funzioni (come in CALCULATE()). È preferibile usare espressioni booleane quando possibile, poiché sono esplicitamente ottimizzate per questo scopo.
Nell’esempio sopra abbiamo usato un’espressione booleana per definire il filtro Country = United Kingdom. Questo è un approccio più veloce e ottimizzato. D’altra parte, ecco un esempio con la funzione FILTER() in cui otteniamo lo stesso risultato, ma con un calcolo più lento:
UK Revenue = CALCULATE(SUM('Online Retail'[Revenue]),
FILTER('Online Retail',
'Online Retail'[Country] = "United Kingdom")
Usando un dataset e-commerce reale, esploreremo alcuni modi chiave in cui la funzione CALCULATE() può essere impiegata per risolvere problemi di business. Per seguire il tutorial, puoi accedere al dataset e-commerce ospitato su DataLab.
Questo dataset contiene informazioni su ogni acquisto effettuato da un cliente: il paese di acquisto, la descrizione del prodotto, la data e l’ora dell’acquisto, oltre alla quantità e al prezzo di ciascun prodotto acquistato.
Risponderemo alle seguenti domande con l’aiuto della funzione CALCULATE():
Per rispondere, dobbiamo creare due misure usando la funzione CALCULATE(). Per prima cosa, usiamo un semplice filtro booleano per creare una misura che restituisca il fatturato totale (con una funzione SUM()) nel Regno Unito:
UK Revenue = CALCULATE(SUM('Online Retail'[Revenue]),
'Online Retail'[Country] = "United Kingdom")
Poi creiamo una misura simile, ma questa volta usiamo la funzione FILTER(). Questa espressione di filtro scorre ogni riga della colonna Country e restituisce una tabella contenente le righe che soddisfano la condizione del filtro. Qui la funzione FILTER() è necessaria perché non possiamo restituire un semplice TRUE o FALSE dal filtro: otteniamo invece una tabella con più valori.
Non-UK Revenue = CALCULATE(SUM('Online Retail'[Revenue]),
FILTER('Online Retail',
'Online Retail'[Country] <>"United Kingdom")
Da ciò si vede che il Regno Unito rappresenta la maggior parte del fatturato di questo store e-commerce rispetto a tutti gli altri paesi.
Grafico a linee in Power BI che mostra il fatturato mensile. Immagine dell’autore.
Questa è una domanda molto comune per sviluppatori e utenti Power BI, ed è un caso perfetto per applicare la funzione CALCULATE().
Per calcolare la percentuale sul totale, dobbiamo prima poter restituire il totale senza che venga influenzato da altri contesti di filtro nel report. Per farlo, usiamo un modificatore di filtro noto come funzione ALL(). Con questa funzione specifichiamo per quale colonna il calcolo deve ignorare completamente qualsiasi filtro.
In questo esempio, cerchiamo la percentuale di fatturato totale nel Regno Unito. Ciò significa che il calcolo deve ignorare eventuali filtri nella colonna Country.
Total Revenue = CALCULATE(SUM('Online Retail'[Revenue]),
ALL('Online Retail'[Country]))
Questo è rilevante perché CALCULATE() può essere eseguita all’interno di un contesto di filtro che sta già filtrando Product[Color]. In quello scenario, la presenza di ALL fa sì che il filtro esterno su Product[Color] venga ignorato e sostituito dal nuovo filtro introdotto da CALCULATE(). Ciò è evidente se, invece di segmentare per Brand, segmentiamo per Color nella matrice.
Ora che conosciamo il fatturato totale, possiamo creare una misura per mostrare la percentuale sul totale. Tuttavia, poiché siamo interessati specificamente al Regno Unito, useremo di nuovo la funzione CALCULATE, ma questa volta con un semplice filtro booleano.()
UK % of Revenue = CALCULATE(SUM('Online Retail'[Revenue])/[Total Revenue],
'Online Retail'[Country] = "United Kingdom")
Ora possiamo vedere che il Regno Unito rappresenta l’84% del fatturato totale di questo store e-commerce.
Calcolo di una percentuale in Power BI. Immagine dell’autore
Il fatturato cumulato può dare indicazioni sulle tendenze del fatturato. Tracciandolo su un grafico, possiamo anche vedere visivamente se il fatturato è aumentato più o meno rapidamente nel tempo.
Per rispondere, dobbiamo creare una misura usando la funzione CALCULATE() insieme a queste funzioni di filtro: ALLSELECTED(), FILTER() e una valutazione con la funzione MAX().
Cumulative Revenue = CALCULATE(SUM('Online Retail'[Revenue]),
FILTER( ALLSELECTED('Online Retail'[InvoiceDate]),
'Online Retail'[InvoiceDate] <= MAX('Online Retail'[InvoiceDate])))
Vediamo perché questi filtri sono importanti qui:
La funzione FILTER() permette che ciascuno dei 2 filtri specificati sia valutato riga per riga e restituirà una tabella quando c’è corrispondenza.
La funzione ALLSELECTED() azzera il filtro su InvoiceDate nella query corrente (nel risultato sotto, la query corrente è il grafico a linee) consentendo comunque filtri esterni (ad esempio dagli slicer).
La funzione MAX() è usata come parte della valutazione: vogliamo sommare il fatturato per tutte le date minori o uguali alla data corrente nella query.
Calcolo del fatturato per data in Power BI. Immagine dell’autore.
In questo tutorial abbiamo visto cos’è la funzione CALCULATE() in Power BI e come usarla. L’abbiamo anche applicata a un dataset e-commerce reale per rispondere ad alcune domande chiave di business.
CALCULATE() è una delle funzioni più utili in Power BI e probabilmente ti capiterà di usarla spesso quando costruisci report e cerchi insight più profondi nei tuoi dati.
Speriamo che questo tutorial ti aiuti non solo a comprendere la sintassi di base di CALCULATE(), ma anche il suo ruolo nella risoluzione di problemi di business reali come data analyst Power BI.
Corsi per Power BI
Corso
Corso
Corso
blog
Tim Lu
12 min

blog
Abid Ali Awan
10 min

blog
Abid Ali Awan
15 min