Last chance! 50% off DataCamp Premium
Sale ends in
La funzione COUNTIF() è molto usata in Excel perché permette di contare i dati in base a una condizione. Tuttavia, passando a Power BI, molti utenti hanno notato che Power BI non dispone di una funzione COUNTIF() nativa.
Per fortuna, è possibile replicare la funzionalità di COUNTIF() usando diverse formule DAX (Data Analysis Expressions). In questo articolo vedrai come ottenere calcoli in Power BI simili a COUNTIF() usando funzioni DAX come CALCULATE(), COUNTROWS(), COUNTA() e FILTER().
A differenza di Excel, basato su formule per celle, Power BI si fonda su calcoli per tabelle e contesto di filtro. Opera su tabelle e sulle loro relazioni, utilizzando DAX per i calcoli.
Invece di fare riferimento a singole celle, DAX lavora con colonne e applica i calcoli in modo dinamico in base al contesto di filtro, determinato da slicer, filtri su righe/colonne e relazioni tra tabelle.
Excel COUNTIF() usa un approccio basato su celle, in cui le formule vengono applicate riga per riga entro un intervallo specificato. L’approccio di Power BI è diverso perché sfrutta le relazioni tra tabelle per affinare i calcoli. Invece di scansionare singole celle, applica filtri basati sul contesto del report tramite DAX.
Se arrivi a Power BI da Excel, devi adattarti all’approccio di calcolo basato sulle tabelle. Gli approcci DAX, che operano sulle colonne dei dati, sono più efficienti rispetto alle iterazioni riga per riga.
A differenza di Excel, in Power BI devi scegliere il metodo più adatto per replicare COUNTIF() in base al tuo modello dati. Quindi, come utente, devi disimparare l’abitudine di applicare formule a singole celle e iniziare a pensare in termini di tabelle e contesti di filtro.
L’approccio per implementare COUNTIF() in Power BI dipende da fattori come le relazioni tra tabelle, la presenza o meno di valori mancanti nei dati, la dimensione del dataset e così via. Alcune funzioni DAX sono meglio ottimizzate per elaborazioni più rapide ed efficienti.
Le funzioni DAX servono per creare colonne calcolate, misure e tabelle. Ecco alcune funzioni DAX che ti aiuteranno a replicare la funzionalità di COUNTIF() in Power BI.
CALCULATE(): Questa funzione modifica il contesto di filtro per un’espressione e consente di applicare nuovi filtri o modificare quelli esistenti in modo dinamico. Ad esempio, puoi usarla per calcolare le vendite totali di una determinata area.
COUNTROWS(): Conta il numero di righe in una tabella specificata e, in combinazione con funzioni di filtro, consente di contare solo determinate righe. Un esempio è contare gli ordini di vendita superiori a 1.000 $.
COUNTA(): Conta i valori non vuoti in una colonna, utile quando si hanno dati mancanti. Ad esempio, puoi contare gli ID cliente non vuoti, assicurandoti di considerare solo i record validi.
FILTER(): Di solito usata con CALCULATE() e COUNTROWS(), restituisce una tabella in base a una condizione. Per esempio, puoi restituire una tabella con ordini di vendita superiori a 500 $.
ALLEXCEPT(): Rimuove tutti i filtri applicati tranne quelli specificati; ad esempio, puoi restituire una tabella con le vendite totali per area anche se sono attivi slicer o filtri sulla tabella. È importante quando lavori con aggregazioni su gerarchie.
RELATEDTABLE(): Restituisce una tabella basata su relazioni esistenti. Un esempio è contare il numero di ordini per ciascun cliente sfruttando le relazioni dai dati cliente.
Poiché COUNTROWS() conta il numero di righe in una tabella, puoi restituire una tabella dei tuoi dati che rispetta una condizione usando FILTER(). Poi usa CALCULATE() per modificare il contesto di filtro, assicurando che COUNTROWS() consideri solo le righe che soddisfano la condizione. Ecco un esempio di sintassi DAX che mostra come funziona.
Sales over 5 quantities =
CALCULATE(
COUNTROWS(Sales),
FILTER('Sales, 'Sales[Quantity] > 5)
)
La funzione CALCULATE() è in un certo senso come combinare due espressioni diverse. Invece di usare COUNTROWS() per contare tutti i dati, CALCULATE() lo limita al contesto di filtro derivato con FILTER().
Prima di mostrarti alcuni esempi su come implementare COUNTIF() in Power BI, assicurati di caricare i dati di vendite del supermercato.
La sintassi DAX qui sotto calcola il numero di ordini effettuati da clienti di sesso femminile.
Orders by female customers =
CALCULATE(
COUNTROWS(Sales),
FILTER(Sales, Sales[Gender] = "Female")
)

Numero di ordini da clienti donne. Immagine dell’autore.
FILTER(Sales, Sales[Gender] = "Female") filtra gli ordini per clienti di sesso femminile.
COUNTROWS(Sales), invece di contare tutti i dati, conta la tabella filtrata grazie all’influenza di CALCULATE().
Di seguito una sintassi DAX per contare il numero di ordini per ciascuna città.
Total Orders by City = CALCULATE(COUNTA(Sales[City]), ALLEXCEPT(Sales, Sales[City]))

Numero di ordini per città. Immagine dell’autore.
COUNTA(Sales[City]) conta i valori non vuoti nella colonna City.
ALLEXCEPT(Sales, Sales[City]) rimuove tutti i filtri tranne la colonna City dalla tabella Sales.
CALCULATE() fa sì che COUNTA() sia calcolata separatamente per ciascuna città, comportandosi come un COUNTIF() di Excel.
Un’alternativa è usare la sintassi DAX qui sotto, che impiega COUNTROWS() invece di COUNTA().
Total Orders by City = CALCULATE(COUNTROWS(Sales), ALLEXCEPT(Sales, Sales[City]))
COUNTROWS() conta il numero di righe nella tabella Sales indipendentemente dalla presenza di valori vuoti.
Se la colonna City è vuota, entrambi gli approcci restituiranno gli stessi risultati. Tuttavia, se nella colonna City ci sono valori mancanti, COUNTA() li esclude, mentre COUNTROWS() li include.
Dovresti usare COUNTROWS() quando ogni riga rappresenta un record, come un ordine di vendita. Ma se i tuoi dati contengono alcuni record non validi, puoi usare COUNTA(), che conta solo i record con un valore valido.
Capita di dover creare misure che cambiano dinamicamente in base a un filtro di tabella o a uno slicer. Questa sezione mostra come implementare COUNTIF() in tali scenari.
Ecco un esempio in cui ci interessa conoscere gli ordini con quantità totale superiore a cinque.
High Value Orders = COUNTROWS(FILTER(Sales, Sales[Quantity] > 5))

Numero di ordini ad alto valore. Immagine dell’autore.
FILTER(Sales, Sales[Quantity] > 5) restituisce gli ordini con quantità superiore a cinque.
COUNTROWS() conta le righe nella tabella filtrata con ordini superiori a cinque.
A differenza delle colonne calcolate che, una volta create, aumentano l’archiviazione e la dimensione del modello, le misure vengono calcolate solo quando servono, risultando più efficienti. La sintassi DAX per creare una colonna calcolata sarebbe così:
High Value = IF(Sales[Quantity] > 5, 1, 0)

Colonna calcolata High Value. Immagine dell’autore.
Questo memorizzerebbe un 1 o 0 statico in ogni riga. Per contare gli ordini ad alto valore, dovresti creare una misura usando SUM(Sales[High Value]).
Immagina di creare colonne calcolate per ogni filtro. Aumenterebbe l’uso di archiviazione e ridurrebbe la flessibilità.
Ecco una tabella che mostra perché dovresti preferire le misure alle colonne calcolate.
|
Measure |
Calculated Column |
|
Calcolata al momento della query, risponde ai filtri |
Statica, calcolata quando i dati vengono caricati/aggiornati |
|
Più efficiente, calcolata solo quando serve |
Consuma spazio e aumenta la dimensione del modello |
|
Si adatta dinamicamente in base a filtri, slicer e visual |
I valori restano invariati finché i dati non vengono aggiornati. |
In Excel, COUNTIFS() supporta condizioni multiple, cosa che puoi replicare anche in Power BI.
Ecco una sintassi DAX per contare gli ordini con quantità superiore a cinque, pagati con carta di credito.
Quantity Above 5 and Credit Card =
COUNTROWS(
FILTER(
Sales,
Sales[Quantity] > 5 && Sales[Payment] = "Credit card"
)
)

Numero di ordini con quantità superiore a cinque e pagati con carta di credito. Immagine dell’autore.
La formula filtra la tabella Sales dove la quantità supera 5 e il metodo di pagamento è carta di credito. && rappresenta l’operatore AND, assicurando che vengano contati gli ordini che soddisfano entrambe le condizioni.
Se ti interessano gli ordini che soddisfano almeno una delle condizioni, usa l’operatore OR, rappresentato da || in DAX.
Quantity Above 5 or Credit Card =
COUNTROWS(
FILTER(
Sales,
Sales[Quantity] > 5 || Sales[Payment] = "Credit card"
)
)

Numero di ordini con quantità superiore a cinque o pagati con carta di credito. Immagine dell’autore.
La sintassi DAX che replica COUNTIF() a volte può diventare complessa. Usare variabili aiuta la leggibilità e garantisce che le condizioni siano valutate nell’ordine desiderato. Evita anche calcoli ridondanti memorizzando i valori una sola volta.
Ecco un altro esempio che mostra come contare il numero di ordini effettuati da clienti donne, pagati con carta di credito oppure con quantità superiore a cinque, usando variabili.
CreditCard Or Above 5 By Female =
VAR FilteredSales =
FILTER(
Sales,
(Sales[Quantity] > 5 || Sales[Payment] = "Credit card")
&& Sales[Gender] = "Female"
)
RETURN
COUNTROWS(FilteredSales)

Numero di ordini da clienti donne pagati con carta di credito o con quantità superiore a cinque. Immagine dell’autore.
Il filtro è memorizzato in una variabile usata in COUNTROWS(). Ecco un altro modo di scrivere l’espressione precedente
CreditCard Or Above 5 By Female =
VAR MinQuantity = 5
VAR FilteredSales =
FILTER(
Sales,
(Sales[Quantity] > MinQuantity || Sales[Payment] = "Credit card")
&& Sales[Gender] = "Female"
)
VAR Result = COUNTROWS(FilteredSales)
RETURN
Result
Questa volta, quantità minima, filtro e risultato sono memorizzati come variabili. Come nel principio matematico BODMAS che dà priorità alle operazioni tra parentesi, anche DAX dà priorità alle condizioni tra parentesi.
Nell’esempio sopra, l’operatore OR || viene valutato prima dell’operatore AND && perché è all’interno di una parentesi. Ciò implica che gli ordini con quantità superiore a 5 o pagati con carta di credito sono filtrati per primi, prima di filtrare gli ordini di clienti donne.
Se lavori con più di una tabella, puoi usare COUNTROWS() o COUNTA() per contare il numero di record in base a una condizione soddisfatta nell’altra tabella, tramite la funzione RELATEDTABLE().
La funzione RELATEDTABLE() tiene conto della relazione di modello tra due tabelle, che può essere uno-a-uno o uno-a-molti.
Supponiamo di avere un’altra tabella vendite chiamata Sales2, che usa gli stessi dati del supermercato. E Sales e Sales2 sono correlate tramite Invoice ID.

Relazione tra le tabelle Sales e Sales2. Immagine dell’autore.
Puoi usare la sintassi DAX seguente per vedere quanti clienti sono membri, supponendo che Sales non abbia la colonna Customer type ma Sales2 sì.
Orders by members =
COUNTROWS(FILTER(RELATEDTABLE(Sales2), Sales2[Customer Type] = "Member"))

Numero di ordini da clienti che sono membri. Immagine dell’autore.
RELATEDTABLE(Sales2) filtra automaticamente Sales2 includendo solo le righe con lo stesso Invoice ID presenti nei dati Sales.
La funzione FILTER() restringe ulteriormente ai soli ordini "Member", mentre COUNTROWS() conta la tabella filtrata.
Ecco alcuni casi d’uso pratici e consigli d’integrazione per implementare COUNTIF() in Power BI.
Se hai una tabella con risultati di test degli studenti o ordini, puoi usare COUNTROWS() e FILTER() per contare il numero di record ripetuti. Usando la colonna dei punteggi, puoi anche contare quanti studenti sono stati promossi o bocciati. Un altro equivalente importante di COUNTIF() è SUMX(), che puoi usare per sommare i punteggi degli studenti in base a una condizione.
Invece di caricare ogni volta il tuo foglio di calcolo da Excel o Google Sheets per l’analisi, puoi usare strumenti come Coupler.io per automatizzare l’estrazione dei dati.
Una volta aggiornato il foglio di calcolo, l’aggiornamento si riflette automaticamente nella tua dashboard di Power BI senza dover caricare manualmente il file.
Questo fa sì che Power BI rifletta sempre i dati più recenti senza caricamenti manuali, permettendoti di concentrarti sull’estrazione di insight e sulle decisioni di business. Puoi anche usare questi strumenti esterni per connettere più fonti in un’unica dashboard.
Usa le colonne calcolate quando i calcoli devono essere eseguiti a livello di riga prima delle aggregazioni. Usa una misura quando il calcolo dipende da filtri o slicer selezionati dall’utente, o quando ti serve un valore aggregato invece di calcoli a livello di riga.
Capire il contesto di filtro è fondamentale per sapere quando usare una misura o una colonna calcolata. Il contesto di filtro si applica quando vengono usati slicer, filtri o raggruppamenti, a differenza del contesto di riga, che si applica all’interno della riga di una tabella. Le colonne calcolate usano il contesto di riga e possono creare colonne non necessarie, aumentando l’uso di memoria.
È anche importante considerare il contesto di filtro quando crei misure. Ad esempio, invece di usare SUM(Sales[Amount]), usa CALCULATE(SUM(Sales[Amount])) per controllare il filtraggio. Se hai già un filtro applicato ai dati, con la prima non otterrai il valore corretto, mentre con la seconda vengono ignorati tutti i filtri applicati ai dati.
Evita inoltre di usare troppi iteratori, come FILTER(), in un’unica sintassi DAX, perché rallentano i dataset di grandi dimensioni dato che iterano riga per riga.
Anche se la funzione COUNTIF() nativa di Excel non è presente in Power BI, funzioni DAX come CALCULATE(), COUNTROWS(), COUNTA() e FILTER() permettono di replicarne la logica.
L’approccio da scegliere dipende dalla natura dei tuoi dati. Se hai valori mancanti, valuta l’uso di COUNTA(); se invece i dati sono completi, puoi usare COUNTROWS(). Per escludere filtri esterni applicati ai dati, assicurati di usare ALLEXCEPT() all’interno di CALCULATE().
Ricorda sempre che il tipo di sintassi DAX che scrivi influisce sulla velocità di caricamento dei visual nella dashboard. Cerca di scrivere DAX ottimizzato e di sapere quando usare misure o colonne calcolate. Ecco alcune risorse DataCamp per esplorare tecniche DAX avanzate.
Docente di data science esperto e biostatistico con competenze in Python, R e machine learning.
Power BI non ha una funzione COUNTIF() nativa, ma esistono vari modi per implementarla in Power BI.
Le funzioni principali per implementare COUNTIF() in Power BI sono CALCULATE(), COUNTROWS(), COUNTA(), FILTER(), ALLEXCEPT() e RELATEDTABLE(). A seconda del modello dati, puoi combinare queste funzioni per implementare COUNTIF() in Power BI.
COUNTROWS() conta il numero di righe in un dato a prescindere dal fatto che la riga abbia un record valido, mentre COUNTA() conta il numero di record validi in una colonna.
Le misure sono più efficienti e non utilizzano molto spazio di archiviazione perché sono calcolate al volo, a differenza delle colonne calcolate che aumentano le dimensioni dei dati e quindi consumano spazio.
L’implementazione di COUNTIF() in Power BI ha molti usi, dal conteggio condizionale dei record alla creazione di colonne condizionali basate sul conteggio, e così via.
Impara con DataCamp
Corso
Corso
Corso
blog
Tim Lu
12 min

blog
Abid Ali Awan
10 min

blog
Abid Ali Awan
15 min