Nel precedente articolo, disponibile qui, è stato mostrato come ottenere una tabella, chiamata Affidamenti Attivi, in cui fossero riportate tutte le date di un certo periodo, per esempio l’intero anno 2021, e in corrispondenza di ognuna il livello di fido di ogni banca presente in una tabella di partenza chiamata Affidamenti.
Gli istituti bancari erano 5 in tutto, portando la tabella Affidamenti Attivi ad avere 1.825 righe (365 date del 2021 per 5 istituti bancari).
Un estratto della tabella Affidamenti Attivi è visibile in figura 1.

In questo articolo verrà mostrato come, data la tabella Affidamenti attivi, si possa creare una misura che monitori il livello di fidi in una visual di Power BI Desktop.
La difficoltà starà nella natura semiadditiva di questo calcolo e, dunque, nel non sommare diversi valori nel tempo del fido ad una particolare banca.
Nel tempo, infatti, andrà sempre considerata la massima data visibile nel contesto, per evitare di sommare più volte il saldo dei fidi di una banca (come si dovrebbe sempre evitare di sommare il saldo di conto corrente più volte in un intervallo di tempo, mentre ha senso sommare in un certo istante il saldo di due diversi conti correnti).
Prima di mostrare il codice DAX della misura, è bene osservare il modello dati ed il report stesso, visibili rispettivamente in figura 2 e 3.

In figura 2 si nota un modello a stella classico, con relazioni uno a molti. La tabella di partenza, Affidamenti, è scollegata dal modello ed ha permesso di creare la tabella Affidamenti Attivi. La tabella Istituti è un’anagrafica degli istituti bancari, mentre la tabella Calendario è stata generata con codice DAX. I dettagli di ognuna di queste tabelle sono disponibili nel precedente articolo.
In figura 3 è mostrato un report di monitoraggio, in cui la misura, chiamata anch’essa Affidamenti Attivi, mostra, banca per banca e periodo per periodo, il livello di fido. A seguire l’esame del codice di tale misura.

Sviluppo
Il codice della misura Affidamenti Attivi è mostrato a seguire.
MAX ( CALENDARIO[DATA] )
VAR AffidamentiAllaMassimaDataVisibile =
CALCULATETABLE ( ‘AFFIDAMENTI ATTIVI’; CALENDARIO[DATA] = MassimaDataVisibile )
VAR SommaAffidamentiAllaMassimaDataVisibile =
SUMX (
AffidamentiAllaMassimaDataVisibile;
‘AFFIDAMENTI ATTIVI'[AFFIDAMENTO ALLA DATA]
)
RETURN
SommaAffidamentiAllaMassimaDataVisibile
Qui di seguito lo stesso codice, con commenti, che può aiutare i meno esperti nei passi percorsi.
VAR MassimaDataVisibile =
MAX ( CALENDARIO[DATA] )
// Filtro la tabella Affidamenti Attivi, imponendo la MassimaDataVisibile come data di Calendario
VAR AffidamentiAllaMassimaDataVisibile =
CALCULATETABLE ( ‘AFFIDAMENTI ATTIVI’; CALENDARIO[DATA] = MassimaDataVisibile )
// Sulla tabella AffidamentiAllaMassimaDataVisibile, sommo i saldi di fido. Nel tempo non sommo nulla
// in realtà, avendo un’unica data nel contesto, anche quando mi trovo in un contesto tenporale più
// ampi come un mese o un trimestre (in ogni caso mi posizionerò sull’ultima data visibile del mese o
// trimestre). Sommo, invece, in tutte le altre dimensioni (per esempio i diversi Istituti di Credito)
VAR SommaAffidamentiAllaMassimaDataVisibile =
SUMX (
AffidamentiAllaMassimaDataVisibile;
‘AFFIDAMENTI ATTIVI'[AFFIDAMENTO ALLA DATA]
) // Ritorno la variabile SommaAffidamentiAllaMassimaDataVisibile come risultato della misura
RETURN
SommaAffidamentiAllaMassimaDataVisibile
Come è mostrato nel codice commentato della misura, il punto fondamentale consiste nel fissare subito, tramite la variabile scalare MassimaDataVisibile, la massima data presente nel contesto corrente, in modo che, indipendentemente dall’intervallo temporale considerato, ci si ponga sempre all’ultima data contemplata.
Tale data viene poi applicata al filter context tramite CALCULATETABLE, in modo da filtrare la tabella Affidamenti Attivi per quella data, creando una nuova variabile, AffidamentiAllaMassimaDataVisibile, che è questa volta una tabella. Fatto questo, la stessa tabella AffidamentiAllaMassimaDataVisibile viene iterata con SUMX per sommare il valore dei fidi nel contesto (possono essere più di uno se ci sono diverse banche nel contesto ma certamente non ci si riferirà mai a più date).
In tutto questo, le variabili considerate subiranno anche i filtri del contesto come particolari banche o altre dimensioni.
Conclusioni
Tramite l’uso di CALCULATE e CALCULATETABLE si può forzare il contesto di valutazione a contemplare una sola data. Questo evita errori nei calcoli semiadditivi. L’uso di variabili, che possono essere scalari cioè singoli valori o tabelle, è fortemente consigliato per rendere il codice più leggibile e facile da mantenere e migliorarne le prestazioni.