Salta al contenuto

Una misura semi additiva (ovviamente particolare) che si adatta al contesto delle date

Nel complesso mondo delle misure semi additive, e anche al di fuori di esso, può capitare sia richiesta una misura che usi diversi meccanismi di calcolo a seconda del contesto in cui viene calcolata. In altri termini, a seconda del raggruppamento presente quando la misura viene chiamata, nel caso particolare in esame a seconda delle colonne di raggruppamento della tabella Calendario, si suppone che la misura debba fornire risultati originati da calcoli differenti.

Per inquadrare al meglio questo articolo, si consideri che è il quarto sul tema dei calcoli semi additivi (il primo è disponibile qui, il secondo qui, il terzo qui).

Nei precedenti articoli, sono state mostrate, rispettivamente, una tabella calcolata, una misura semi additiva e una colonna calcolata, tutte piuttosto fuori dall’ordinario.

Prima di addentrarsi nei dettagli del codice DAX della misura oggetto di questo articolo, è bene osservare il modello dati ed il report in cui la misura stessa deve essere usata, visibili rispettivamente in figura 1 e 2.

Figura 1
Figura 2

Si noti, in figura 2, la particolarità della misura DELTA AFFIDAMENTI ATTIVI_ISINSCOPE: essa mostra diversi delta percentuali nel tempo del livello di affidamento, a seconda dell’insieme di colonne di raggruppamento visibili. In particolare, in corrispondenza di un trimestre viene mostrata la variazione percentuale del livello di affidamento rispetto al trimestre precedente, in corrispondenza di un mese viene mostrata la variazione percentuale del livello di affidamento rispetto al mese precedente e, infine, in corrispondenza di un giorno viene mostrata la variazione percentuale del livello di affidamento rispetto al giorno precedente. Nella stessa figura, si noti che il calcolo potrebbe anche essere svolto filtrando una sola banca attraverso lo slicer in alto a sinistra.

Sviluppo

Il codice DAX deve determinare il livello di navigazione delle colonne da parte dell’utente. Per farlo, si avvale della funzione ISINSCOPE, che non va confusa con HASONEVALUE, sebbene le due funzioni diano spesso lo stesso risultato, visto che lo fanno per motivi diversi. Si noti, tra l’altro, che ISINCOPE non è disponibile in Power Pivot per Excel. Ecco il codice della misura DELTA AFFIDAMENTI ATTIVI_ISINSCOPE:

DELTA AFFIDAMENTI ATTIVI_ISINSCOPE =
 AffidamentiCONTESTO = [AFFIDAMENTI ATTIVI]
VAR AffidamentiAP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1YEAR ) )
VAR AffidamentiTP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1QUARTER ) )
VAR AffidamentiMP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1MONTH ) )
VAR AffidamentiGP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1DAY ) )
RETURN
    IF (
        ISINSCOPE ( CALENDARIO[DATA] );
        DIVIDE ( AffidamentiCONTESTO – AffidamentiGPAffidamentiGP );
        IF (
            ISINSCOPE ( CALENDARIO[MESE] ) || ISINSCOPE ( CALENDARIO[NR MESE] );
            DIVIDE ( AffidamentiCONTESTO – AffidamentiMPAffidamentiMP );
            IF (
                ISINSCOPE ( CALENDARIO[TRIM] );
                DIVIDE ( AffidamentiCONTESTO – AffidamentiTPAffidamentiTP );
                IF (
                    ISINSCOPE ( CALENDARIO[anno] );
                    DIVIDE ( AffidamentiCONTESTO – AffidamentiAPAffidamentiAP )
                )
            )
        )
    )

Ecco nuovamente il codice della misura DELTA AFFIDAMENTI ATTIVI_ISINSCOPE, commentato per aiutare il lettore meno esperto:

DELTA AFFIDAMENTI ATTIVI_ISINSCOPE =
— Calcolo la misura Affidamenti Attivi nel filter context esterno e ne conservo il risultato in una variabile per uso successivo senza dovere ricomputare
VAR AffidamentiCONTESTO = [AFFIDAMENTI ATTIVI] 
— Calcolo la misura Affidamenti Attivi nel contesto esterno modificato da CALCULATE, spostando indietro le date di un anno (AP = Anno Precedente) e ne conservo il risultato in una variabile per uso successivo senza dovere ricomputare

VAR AffidamentiAP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1YEAR ) ) 
— Calcolo la misura Affidamenti Attivi nel contesto esterno modificato da CALCULATE, spostando indietro le date di un trimestre (TP = Trimestre Precedente) e ne conservo il risultato in una variabile per uso successivo senza dovere ricomputare

VAR AffidamentiTP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1QUARTER ) ) 
— Calcolo la misura Affidamenti Attivi nel contesto esterno modificato da CALCULATE, spostando indietro le date di un mese (MP = Mese Precedente) e ne conservo il risultato in una variabile per uso successivo senza dovere ricomputare

VAR AffidamentiMP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1MONTH ) ) 
— Calcolo la misura Affidamenti Attivi nel contesto esterno modificato da CALCULATE, spostando indietro le date di un giorno (GP = Gese Precedente) e ne conservo il risultato in una variabile per uso successivo senza dovere ricomputare

VAR AffidamentiGP =
    CALCULATE ( [AFFIDAMENTI ATTIVI]; DATEADD ( CALENDARIO[DATA]; -1DAY ) )
RETURN
    
— Usando ISINSCOPE, determino il livello di navigazione dell’utente, partendo
 dal dettaglio massimo (singola data) e muovendomi poi verso il minor dettaglio
 (mese, trimestre, anno). Identificato il livello di navigazione,
 mostro quanto tale livello di navigazione prevede (delta giornaliero nel caso
 di navigazione al livello di singola data, delta mensile nel caso di navigazione
 al livello di singolo mese e così via fino al singolo anno), richiamando le variabili già computate

    IF (
        ISINSCOPE ( CALENDARIO[DATA] );
        DIVIDE ( AffidamentiCONTESTO – AffidamentiGPAffidamentiGP );
        IF (
            ISINSCOPE ( CALENDARIO[MESE] ) || ISINSCOPE ( CALENDARIO[NR MESE] );
            DIVIDE ( AffidamentiCONTESTO – AffidamentiMPAffidamentiMP );
            IF (
                ISINSCOPE ( CALENDARIO[TRIM] );
                DIVIDE ( AffidamentiCONTESTO – AffidamentiTPAffidamentiTP );
                IF (
                    ISINSCOPE ( CALENDARIO[anno] );
                    DIVIDE ( AffidamentiCONTESTO – AffidamentiAPAffidamentiAP )
                )
            )
        )
    )

Il codice determina, usando ISINSCOPE, il livello di navigazione dell’utente e, di conseguenza, il calcolo in termini percentuali da effettuare (delta % rispetto al giorno precedente, mese precedente, trimestre precedente o anno precedente). È importante partire dal livello di dettaglio massimo nell’uso di ISINSCOPE, in quanto se una singola data fornisce ISINSCOPE pari a VERO, anche il corrispondente mese, trimestre e anno darebbero lo stesso risultato.

Conclusioni

La funzione ISINSCOPE permette di determinare il livello di interazione tra l’utente e la visual, rendendo possibile calcoli differenti sulla base della profondità di navigazione dentro diversi livelli di raggruppamento. In questo modo, si possono fornire calcoli adattivi al contesto di navigazione. È necessario fare attenzione all’ordine di uso di ISINSCOPE su diversi livelli, partendo sempre dal livello di dettaglio massimo.

Autore del Post

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *