DISTINCTCOUNT (attraverso relazioni…)
In PowerBI il pattern “tradizionale” per il conteggio delle occorenze di un certo valore prevede l’utilizzo della funzione DISTINCTCOUNT.
La funzione è molto semplice: ConteggioValoriDistinti = DISTICTCOUNT(NomeDelCampo)
La funzione è perfetta… Immaginiamo per esempio di avere la seguente tabella di vendite, con una tabella articoli correlata e una tabella categorie correlata agli articoli; in pratica una cascata di tre tabelle.
Ora vediamo come funziona il distinctcount; scopo dell’esercizio è calcolare quanti articoli concorrono alla creazione del fatturato di ogni mese che è il seguente:
Strategia: contare gli articoli della tabella movimenti:
# Articoli (1) = DISTINCTCOUNT(Movimenti[Articolo])
Questa operazione dà come risultato:
Strategia alternativa: contare gli articoli della tabella articoli, tanto sono in relazione…
# Articoli (2) = DISTINCTCOUNT(Articoli[Articolo])
Questa operazione dà come risultato:
Che è evidentemente errato!!!
Il problema è che il DISTINCTCOUNT è corretto solo per i campi inclusi nella tabella dove la misura è ospitata e non funziona per dati in tabelle relazionate.
LA STRATEGIA CORRETTA LADDOVE SI VOGLIA PERCORRERE I CONTEGGI (O QUALSIASI ALTRA AGGREGAZIONE) ATTRAVERSO LE RELAZIONI E L’UTILIZZO DI [CALCULATE]
CALCULATE è la soluzione perché questa funzione esegue un calcolo applicando dei filtri che noi possiamo prendere dal contesto.
La formula da utilizzare, nello specifico, è questa:
# Articoli (3) = CALCULATE(
DISTINCTCOUNT(Articoli[Articolo]);
Movimenti
)
Cosa dice questa formula? Di calcolare i valori distinti degli articoli applicando i filtri che ho correntemente nella tabella movimenti (nello specifico il contesto di riga è il filtro del mese visualizzato e quindi la formula sarà valutata tre volte, una per gennaio, una per febbraio e una per marzo).
Il risultato è il seguente:
Come si vede l’operazione è ora correttamente eseguita.
Nello stesso modo possiamo calcolare il numero di categorie merceologiche che concorrono alla formazione del venduto del mese:
# Categorie = CALCULATE(
DISTINCTCOUNT(Categorie[Codice Cateegoria]);
Movimenti
)
Essendo certi che la selezione si propagherà attraverso le relazioni.
RIFERIMENTI DAX:
DISTINCTCOUNT https://dax.guide/distinctcount/
CALCULATE https://dax.guide/calculate/