La funzione SWITCH() in Power BI è una funzione che di base è molto utile per gestire la logica condizionale e sostituire IF statement complessi; ma il suo uso è molto versatile in quanto, come vedremo, può risultare fondamentale sia per gestire casi in cui vogliamo utilizzare una formattazione condizionale, sia casi in cui vogliamo rendere la nostra dashboard dinamica grazie all’uso di parametri.
In questo articolo analizzeremo sia la sintassi di SWITCH() che alcuni dei vari use-cases in cui è utile utilizzarla.
- Sintassi
La sintassi di base della funzione SWITCH è la seguente:
SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])
Ora analizziamo ogni componente:
- <expression>: Rappresenta una qualsiasi espressione DAX che restituisce un singolo valore. L’espressione viene valutata più volte (una volta per ogni riga).
- <value>: Sono valori costanti da confrontare con i risultati dell’espressione.
- <result>: Ogni risultato corrisponde a un valore specifico. Se l’espressione corrisponde a un valore, viene restituito il risultato corrispondente.
- [, <value>, <result>] (opzionale): array di valori e risultati da aggiungere come opzioni aggiuntive del costrutto.
- <else> (opzionale): Se nessun valore corrisponde, viene valutata e restituita questa espressione scalare. Se non specificato, il valore predefinito è BLANK.
Sebbene più istruzioni IF annidate possano ottenere lo stesso risultato di SWITCH(), l’uso di quest’ultima funzione è comunque preferibile perché è più facile da scrivere e meno soggetta ad errori.
- USE CASE #1: Creazione di una nuova colonna in base ad una logica condizionale
Scenario: Vogliamo creare una nuova colonna (Viewing Band) basata su condizioni specifiche.
Caso d’uso: Utilizziamo la funzione SWITCH() per valutare il numero di ascoltatori (Viewers (m), rispetto a valori predefiniti e assegnare etichette corrispondenti (“Niche”,”Mainstream”,”Cult”,”National Treasure”) alla colonna calcolata.
Viewing Band = SWITCH(TRUE(),
Series[Viewers (m)]<=5, “Niche”,
Series[Viewers (m)]>6 && Series[Viewers (m)]<8, “Mainstream”,
Series[Viewers (m)]>9 && Series[Viewers (m)]<12, “Cult”,
Series[Viewers (m)]>12, “National Treasure”)
Andremo a ottenere, quindi, la nuova colonna “Viewing Band”:
- USE CASE #2: Personalizzare delle chart in base alla scelta di un parametro
Scenario: Abbiamo creato un parametro basato su 3 dimensioni (Revenues, Expenses e Profits), lo abbiamo inserito in uno slicer (con style Tile) ed ora vogliamo che l’utente possa personalizzare un’area chart (con in ascissa la variabile Year) in base al parametro che andrà a selezionare.
Caso d’uso: Utilizziamo la funzione SWITCH() per assegnare all’ordinata dell’Area Chart, il parametro selezionato dall’utente.
In particolare, andremo a creare la seguente Measure:
Selected Measure = SWITCH( SELECTEDVALUE(‘Parameter'[Parameter Order]),
0, sum(finances_fact[Total Revenues]),
1, sum(finances_fact[Total Expenses]),
2, sum(finances_fact[Total Profits]))
Fatto ciò, dal panel “Add Data to Your Visual”, andremo a inserirla nel campo relativo alle ordinate:
Ora, a seconda del valore selezionato dall’utente nel parametro, l’Area Chart cambierà in modo dinamico.
- USE CASE #3: Formattazione condizionale in base ad un parametro
Scenario: Abbiamo creato un parametro basato su 3 dimensioni (Revenues, Expenses e Profits), lo abbiamo inserito in uno slicer (con style Tile) ed ora vogliamo che l’utente possa personalizzare sia i valori che il colore di una Bar Chart (con in ordinata la variabile Conference Abb) in base al parametro che andrà a selezionare.
Caso d’uso: Utilizziamo la funzione SWITCH() per assegnare all’ascissa della Bar Chart, il parametro selezionato dall’utente e alle barre il colore associato a quella variabile.
In particolare, andremo a creare la seguente Measure, identica a quella dello use case precedente:
Selected Measure = SWITCH( SELECTEDVALUE(‘Parameter'[Parameter Order]),
0, sum(finances_fact[Total Revenues]),
1, sum(finances_fact[Total Expenses]),
2, sum(finances_fact[Total Profits]))
Fatto ciò, dal panel “Add Data to Your Visual”, andremo a inserirla nel campo relativo alle ascisse:
Ora, a seconda del valore selezionato dall’utente nel parametro, la Bar Chart cambierà in modo dinamico, ma, visto che vogliamo che cambi anche il colore, andremo a creare un altro SWITCH(), dove nel campo del <result> inseriremo il codice HEX relativo al colore desiderato. Di seguito la sintassi:
Switch Measure Color 2 = SWITCH( SELECTEDVALUE(‘Parameter'[Parameter Order]),
0, “#64885e”,
1, “#605e5c”,
2, “#7fb737”)
Dal panel “Format Your Visual”, andiamo a individuare la voce “Bars” e clicchiamo sull’icona relativa alla formattazione condizionale:
Nella finestra di dialogo che si aprirà setteremo “Format Style” su “Field Value” e, alla voce, “What Field should we base this on?” selezioneremo la Measure appena creata.
Ora, a seconda del valore selezionato dall’utente nel parametro, la Bar Chart cambierà in modo dinamico (sia per quanto riguarda i valori che il colore).