In questo articolo parliamo dell’aggiornamento per Power BI Desktop rilasciato ad ottobre 2023 (2.122.442.0). Il mese scorso Microsoft ha introdotto alcune feature interessanti per la progettazione e gestione del modello, tra cui i Calculation Group la cui creazione e modifica è ora nativa in Power BI Desktop.
Set-up dello strumento: verifica della versione e abilitazione del Model Explorer
Prima di proseguire nella lettura dell’articolo ti consigliamo di verificare la tua versione di Power BI Desktop ed eventualmente di aggiornarla.
Nel Model view e nella sezione Data saranno presenti due opzioni di lavoro alternative: Tables , contenente le tabelle dei fatti e delle dimensioni, e Model contenente il Model Explorer, grazie al quale si ha la possibilità di ispezionare anche il Semantic Model, visione strutturata con il formalismo ad albero dell’intero dataset, misure incluse! (se non lo vedi abilita l’opzione “Model explorer and Calculation group authoring” dalla sezione “Preview features” del pannello “Options”).
Cosa sono i Calculation Group
Fino ad ora il supporto ai Calculation Group avveniva grazie ad un tool esterno open-source (Tabular Editor), ma con questo aggiornamento si è dato seguito all’idea di integrazione di Marco Russo ampiamente supportata dalla community. Oggi è, infatti, possibile creare e modificare Calculation Group direttamente su Power BI ed è sufficiente accedervi dal Model Explorer.
Una misura – dall’inglese measure – è una formula (statement) – in linguaggio DAX – definita in termini di funzioni. Queste esprimono a quale elaborazione sottoporre uno o più argomenti di input, per ottenere l’output voluto, la metrica da implementare.
L’idea di base è raggruppare tutte le metriche che comportano una manipolazione dei dati affine in un Calculation Group, es. Time Intelligence per metriche riguardanti un periodo di tempo. Poi all’interno di un Calculation Group si creano degli elementi – formule in DAX – per codificare un pattern di calcolo ricorrente, ovvero comune a più metriche, separando in questo modo la logica del calcolo dalle metriche da implementare. Questi elementi sono noti come Calculation Item, e con ogni Calculation Item è possibile ottenere un’istanza (misura) della metrica da valutare senza implementarla esplicitamente, grazie alla funzione SELECTEDMEASURE, un placeholder. Questo permette di ridurre il numero di misure esplicite che sono ridondanti nella logica del calcolo.
Creare i Calculation Group – Time Intelligence
Per esempio per stimare il numero degli ordini e le vendite (due metriche) si prevedono rispettivamente 2 misure:
Orders =
DISTINCTCOUNT( ‘Sales Order'[Sales Order] )
Sales =
SUMX(
Sales,
Sales[Unit Price] * Sales[Order Quantity]
)
E il loro valore lo scorso mese? Altre 2 misure
Orders PM =
CALCULATE(
[Orders],
PREVIOUSMONTH( ‘Date'[Date] )
)
Sales PM =
CALCULATE(
[Sales],
PREVIOUSMONTH( ‘Date'[Date] )
)
O lo stesso mese ma lo scorso anno? Altre 2 misure
Sales PY =
CALCULATE(
[Sales],
SAMEPERIODLASTYEAR( ‘Date'[Date] )
)
Orders PY =
CALCULATE(
[Orders],
SAMEPERIODLASTYEAR( ‘Date'[Date] )
)
O dall’inizio dell’anno? Ancora 2 misure, portando il totale a 8. È chiaro che la separazione inziale, due metriche per altrettante misure, è sensata e necessaria, in quanto le operazioni prescritte sono diverse, ma le (Orders PM – Sales PM) e (Orders PY – Sales PY) sono “funzionalmente” accoppiate, ovvero mostrano uno stesso pattern di calcolo. Quindi come comportarsi? Si crea un Calculation Group.
Seguono i passaggi per la creazione di un Calculation Group:
- Nella sezione “Model View” cliccare su “Calculation group”
- Ridenominazione del Calculation Group secondo convenienze
- Creazione di un “Calculation Item”, uno per ogni pattern di calcolo ricorrente da codificare
PY =
CALCULATE(
SELECTEDMEASURE(), –input parametrizzato
SAMEPERIODLASTYEAR( ‘Date'[Date] )
)
PM =
CALCULATE(
SELECTEDMEASURE(),
PREVIOUSMONTH( ‘Date'[Date] )
)
Un’intuizione sul funzionamento dei Calculation Group ci è restituita dall’uso in una matrice (visual matrix), nelle cui righe si ha anno fiscale e mese, nelle colonne il Calculation Group creato e nel campo values l’argomento di input, che nell’esempio sottostante è costituito dalla misura Sales. La misura Sales andrà a sostituire il placeholder, in tutti quei punti in cui è referenziata tramite la funzione SELECTEDMEASURE, con il vantaggio che la stessa logica di calcolo, codificata nel Calculation Group – forse ora è più chiaro il nome “gruppo di calcolo”- potrà essere applicata anche alla misura Orders.
Un Calculation Item può riferirne un altro, questo è il caso della variazione % MoM (mese su mese), ma bisogna prestare attenzione a includere la SELECTEDMEASURE, altrimenti non ci sarà nessun riferimento che potrà essere sostituito dalla misura voluta.
MoM % =
DIVIDE(
SELECTEDMEASURE(),
CALCULATE(
SELECTEDMEASURE(),
‘Time Intelligence'[Time Intelligence] = “PM”
)
) -1
La formula sopra rappresenta la variazione percentuale tra un mese e il precedente. La formula (Mese Corrente – Mese Precendente) / Mese Precedente è analoga alla formula (Mese Corrente / Mese Precedente) -1. È stata utilizzata la seconda formula per rendere più chiara la lettura della misura.
Al contrario non potrà essere scritta un’espressione in DAX perché non rappresenta una misura sostituibile, ad esempio non funziona quanto riportato nell’immagine seguente:
MoM % =
DIVIDE(
SELECTEDMEASURE(),
CALCULATE(
SUMX(
Sales,
Sales[Unit Price] * Sales[Order Quantity]
),
‘Time Intelligence'[Time Intelligence] = “PM”
)
) -1
Le due espressioni visualizzate all’interno di una tabella, come potete notare il Calculation Item MoM % TEST mostra sempre il valore 0%.
Di seguito come creare il Calculation Item richiamandone un altro, specificando il formato di visualizzazione (percentuale) tramite l’opzione Dynamic format string.
L’immagine riporta il valore corrente delle vendite (Current Measure), il valore nel mese precedente (PM) e la variazione percentuale (MoM %) calcolata con il Calculation Group da noi creato.
Calculation Group e Slicer
Un Calculation Group può essere usato anche in combinazione allo slicer per selezionare quali Calculation Item mostrare, nell’esempio che segue si mostra il valore delle vendite, Sales, per il mese e anno corrente, per lo stesso mese ma dell’anno passato e/o per il mese precedente. Si crea così un bar chart con asse x e y
Abbiamo visto un caso d’uso interessate sul periodo temporale, in cui il Calculation Item contiene le funzioni di Time Intelligence applicate sulla misura referenziata (argomento di input). Ma non è il solo, infatti può capitare di avere la Fact Table (Sales nell’esempio) -lato molti- con diverse relazioni (quindi esattamente una sola attiva) sullo stesso attributo della Dim Table (Date nell’esempio) -lato 1-, per cui un uso interessante dei Calculation Group consiste nell’ottenere versioni delle misure principali (argomento in input) filtrate (Filter Context) per le diverse relazioni, anche quelle non attive, codificando la logica nel Calculation Item grazie alla funzione USERELATIONSHIP
Abilitare relazioni inattive
Nell’esempio a seguire è mostrata la creazione di un nuovo Calculation Group, on Different Date, proprio a questo scopo e l’utilizzo in una matrice (matrix visual) con la possibilità inoltre di usare il Calculation Group in un filtro (slicer) per selezionare il Calculation Item da mostrare.
In chiusura alcune considerazioni
L’abilitazione dell’opzione “Model explorer and Calculation group authoring” avvisa l’utente che non è garantito il pieno supporto alle misure implicite, quelle misure che si creano semplicemente trascinando una colonna dati in un elemento visivo e sulle quali si può agire scegliendo il livello di aggregazione.
A livello grafico si è limitati nella specifica delle proprietà di formattazione (conditional formatting) per i singoli Calculation Item. Nell’esempio mostrato si vede come non sia possibile, in fase di formattazione condizionale, selezionare delle regole per il singolo Calculation Item. Quindi non si riesce a evidenziare la MoM % in rosso quando negativa o aggiungere la Data Bar alle vendite Current Measure.
Invece è bene ricordare il grande impatto positivo dei Calculation Group in termini di:
- Riduzione del numero di misure che condividono un pattern comune/ricorrente di calcolo
- Manutenibilità del codice, infatti la logica del calcolo è codificata in un unico punto, a livello del singolo Calculation Item
Scopri le nostre soluzioni Power BI
Al tuo fianco dalla consulenza alla formazione a soluzioni di data visualization.
Visualitics Team
Questo articolo è stato scritto e redatto da uno dei nostri consulenti.
Condividi ora sui tuoi canali social o via email: