Nei precedenti due articoli sul tema dei calcoli semi additivi (il primo è disponibile qui e il secondo qui) sono state mostrate, rispettivamente, una tabella calcolata e una misura semi additiva piuttosto fuori dall’ordinario. In questo articolo verrà mostrata una colonna calcolata che rientra ancora nella logica semi additiva, venendo creata all’interno di un modello che ha queste caratteristiche, ed è anch’essa non tipica.
L’articolo verterà sugli stessi dati dei due precedenti, per renderlo più semplice alla lettura, tuttavia l’ambito di applicazione va oltre quanto qui presentato. Nel caso specifico, infatti, la reale esigenza della colonna calcolata che verrà mostrata è derivata da un report avente dati cumulati data per data e dall’esigenza di dedurne i valori puntuali, ancora data per data.
Il modello dati non è, dunque, diverso da quello usato negli articoli precedenti, tuttavia lo si riporta in figura 1 per comodità.

Si faccia, inoltre, riferimento alla tabella Affidamenti Attivi descritta nei precedenti articoli, e, in particolare, alla colonna calcolata Affidamenti Attivi[Affidamento alla data] mostrata in figura 2. Essa mostra, banca per banca e data per data, il livello di fido puntuale.

Sviluppo
Si supponga, adesso, di necessitare di una colonna calcolata, ancora in Affidamenti Attivi, che mostri l’ammontare dell’affidamento attivo alla data precedente rispetto a quella di ogni riga, data indicata nella colonna Affidamenti Attivi[@Data]. Nel caso di dati cumulati, infatti, questo permetterebbe, successivamente, di dedurre il valore puntuale di ogni data come differenza tra il valore cumulato nella riga e, appunto, il valore cumulato alla data precedente. Quest’ultimo calcolo verrebbe, tipicamente, effettuato in un’altra colonna calcolata e questo sarà l’approccio di questo articolo.
Nonostante i dati mostrati non siano cumulati, in sintesi, cioè ad ogni data la colonna Affidamenti Attivi[Affidamento alla data] mostri il valore puntuale di affidamento, verranno generate entrambe le colonne sopra citate.
Il risultato finale è mostrato in figura 3.

In figura 3 sono evidenziate due coppie di date interessanti: 14/15 giugno 2021 e 30 giugno/1 luglio 2021. In entrambe le coppie di dati, infatti, il livello di fido per la banca selezionata come esempio ha avuto una variazione, come si nota dai valori della colonna Affidamenti Attivi[Affidamento alla data]. L’entità della variazione viene mostrata nella colonna Affidamenti Attivi[Delta affidamento alla data] e viene calcolata semplicemente come differenza tra il valore nella colonna Affidamenti Attivi[Affidamento alla data] e quello nella colonna Affidamenti Attivi[Affidamento alla data subito precedente], quest’ultima il vero oggetto di questo articolo, in quanto non banale come codice DAX.
Ecco, infatti, il codice della colonna Affidamenti Attivi[Affidamento alla data subito precedente], con un minimo di commenti esplicativi:
VAR BancaCorrente = ‘AFFIDAMENTI ATTIVI'[Banca]
— In DataSubitoPrecedente, data la BancaCorrente e la DataCorrente, calcolo la data subito precedente per la stessa banca
VAR DataSubitoPrecedente =
MAXX (
FILTER (
‘AFFIDAMENTI ATTIVI’;
‘AFFIDAMENTI ATTIVI'[Banca] = BancaCorrente
&& ‘AFFIDAMENTI ATTIVI'[@Data] < DataCorrente
);
‘AFFIDAMENTI ATTIVI'[@Data]
)
RETURN
— Ritorno l’affidamento calcolato in corrispondenza della DataSubitoPrecedente e della BancaCorrente, rimuovendo i filtri introdotti dalla context transition
CALCULATE (
VALUES ( ‘AFFIDAMENTI ATTIVI'[AFFIDAMENTO ALLA DATA] );
REMOVEFILTERS ( ‘AFFIDAMENTI ATTIVI’ );
‘AFFIDAMENTI ATTIVI'[Banca] = BancaCorrente;
‘AFFIDAMENTI ATTIVI'[@Data] = DataSubitoPrecedente
) + 0
La complessità della colonna Affidamenti Attivi[Affidamento alla data subito precedente] deriva da due necessità:
- recuperare la data subito precedente a quella iterata, per la stessa banca;
- rimuovere i filtri inseriti da CALCULATE, a causa della context transition.
La colonna Affidamenti Attivi[Delta affidamento alla data] è, invece, molto semplice, in quanto calcola la differenza tra i valori di due colonne calcolate:
‘AFFIDAMENTI ATTIVI'[AFFIDAMENTO ALLA DATA SUBITO PRECEDENTE]
Quest’ultima colonna, se i valori in Affidamenti Attivi[Affidamento alla data] fossero cumulati, mostrerebbe i valori puntuali in ogni data come delta tra due consecutivi valori cumulati.
Il file .pbix è allegato in calce all’articolo.
Conclusioni
Attraverso l’uso delle variabili e della funzione CALCULATE, è possibile risalire a valori in differenti righe di una tabella, all’interno di una colonna calcolata. Nell’uso della funzione CALCULATE, si deve sempre ricordare che essa invalida i row context e crea filter context equivalenti. A volte, come in questo caso, la context transition non è utile e i suoi effetti vanno rimossi tramite l’uso di REMOVEFILTERS, un modificatore di CALCULATE che viene eseguito successivamente rispetto alla context transition stessa, nella sequenza delle operazioni di CALCULATE.