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.

Il modello dati dell’esempio
I dati contenuti nelle 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:

Il calcolo è ora corretto

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/