Custom Visuals in Power BI: Deneb

Power BI è una piattaforma avanzata di business intelligence che, nonostante possa non soddisfare alcune richieste di personalizzazione avanzata delle visualizzazioni, può migliorare significativamente le sue performance utilizzando le numerose opzioni disponibili nel marketplace.

In uno degli articoli precedenti abbiamo parlato di Charticulator, un’estensione sviluppata da Microsoft e certificata per Power BI, che ti permette di personalizzare le tue visualizzazioni, senza bisogno di scrivere righe di codice.

In questo articolo, approfondiremo come creare visualizzazioni personalizzate utilizzando Deneb un Custom Visual certificato per Power BI che consente agli sviluppatori di utilizzare la sintassi del linguaggio JSON dei linguaggi Vega o Vega-Lite per creare visualizzazioni grafiche di dati personalizzate

Per fare un Deneb in Power BI ci vuole un Vega!

Vega Editor per la creazione di un Bar Chart

Nell’esempio sopra viene mostrato un Bar Chart creato con linguaggio descrittivo Vega. Attraverso il JSON si possono specificare le strutture “grammaticali” del grafico (similmente alle strutture grammaticali che compongono una frase scritta), tra cui:

  • i dati utilizzati nel grafico (tabella e colonne utilizzate)
  • l’estetica (campi utilizzati in asse X, in asse Y e nel colore/tooltip/ecc.)
  • la geometria del grafico (se scelgo di usare delle linee o delle barre, ad esempio). 
 

Come in una frase grammaticale, dove l’unione di strutture come soggetto, verbo e complemento forma la frase, così l’unione di strutture grafiche produce una visualizzazione definita. Nell’esempio mostrato sopra, il risultato è un grafico a barre.

Ma per quale motivo partire da Vega se si sta parlando di Deneb? 

Che cos’è Deneb?

Come creare una visualizzazione con Deneb in Power BI

Aggiungere estensioni visual

Dopo aver importato Deneb, è possibile ora utilizzarlo all’interno della nostra pagina di lavoro. Come avviene per R Visual e Python Visual, è necessario trascinare i campi che si vogliono utilizzare nel pannello Values che verrà creato trascinando Deneb nell’area di lavoro. A quel punto, bisogna cliccare sui 3 puntini delle Header Icons e selezionare “Edit”.

Deneb Visual

È possibile poi selezionare diversi tipi di creazione del layout:

  • Layout esistente: è possibile importare un template già creato in un file JSON o incollare direttamente il codice JSON, se Deneb lo riconosce come modello valido.
  • Vega-Lite o Vega: è una libreria di visualizzazione dei dati che consente agli sviluppatori di creare grafici e visualizzazioni interattive utilizzando una sintassi dichiarativa. Vega-Lite è basata su Vega, che a sua volta è basata su D3.js, una libreria di JavaScript per la visualizzazione dei dati sul web. Con questa libreria è possibile creare diversi grafici, tra cui scatterplot, line chart, bar chart, area chart, e molto altro ancora. Si possono scegliere 4 tipi di funzionalità:
    • Empty = visualizzazione vuota in cui andare a inserire il JSON, sia per le impostazioni del formato sia per lo stile generale del visual.
    • Empy with Power BI theming = come la funzionalità Empty ma vengono configurati di default alcuni aspetti della visualizzazione, tra cui marks e axis. 
    • Simple bar chart = la visualizzazione predefinita di Power BI, un semplice grafico a barre, viene creato specificando in un menu a interfaccia grafica quale colonna utilizzare come Category e quale colonna utilizzare come Measure.
    • Interactive bar chart = come il Simple bar chart ma con la differenza che vengono attivate alcune funzionalità interative, tra cui tooltips e interazioni di filtraggio con altri grafici.
Import in Deneb con Vega

Selezionando la creazione con il provider Vega Lite, il template che permette una maggiore personalizzazione è sicuramente la modalità Empty. Ciò richiede, però, che l’utente inserisca manualmente le istruzioni JSON necessarie alla creazione del visual che si vuole mostrare.

Il layout della schermata si compone di 4 aree principali:

Vega Lite Empty layout
  1. Barra dei comandi: permette di eseguire determinate azioni sul visual. In particolare permette di aprire diverse schermate. In particolare, permette di aprire diverse schermate. Queste riguardano il codice specifico della visualizzazione, il codice generale del visual, e le impostazioni del grafico. Include anche i pulsanti per eseguire o formattare correttamente il codice JSON inserito nell’editor di testo.
  2. Editor di testo: spazio in cui inserire il codice JSON per creare e configurare il grafico. L’editor di testo eseguirà una convalida in base al provider specificato (Vega o Vega Lite) segnalando eventuali avvertimenti ed errori occorsi.
  3. Area preview: Deneb mostra la visualizzazione in scala al 100% in base alle dimensioni impostate per mostrare la visualizzazione in anteprima.
  4. Pannello debug: questo pannello situato in basso a destra offre strumenti aggiuntivi per l’ispezione e il debug della visualizzazione, oltre a fornire ulteriori informazioni su come è stato generato il visual.
    Il pannello di debug si compone di diverse parti:
    • Data: mostra le informazioni sul set di dati della visualizzazione. La selezione di default è “dataset”, che contiene i dati forniti a Deneb dal data model di Power BI. In alternativa, si possono selezionare le diverse strutture che vengono create attraverso il JSON. I valori che appaiono sottoforma di {…} sono stati troncati per via della loro eccessiva lunghezza, è possibile vederli all’interno di un tooltip posizionando il cursore sopra tale formattazione;
    • Signals: attraverso questo pannello si possono monitorare lo stato dei “segnali”, ossia le impostazioni generali della visualizzazione scritte in formato JSON.
    • Logs: il quadro dei registri viene utilizzato per monitorare gli eventi di registrazione generati dalla vista. Ogni volta che il codice della visualizzazione viene eseguito, il registro si aggiorna in base al risultato dell’esecuzione, mostrano eventuali messaggi di errore o di warning.
 

All’interno dell’editor di testo bisognerà scrivere del codice JSON per produrre il grafico desiderato. JSON (JavaScript Object Notation) è un formato per lo scambio di dati basato su un insieme di coppie-valore ordinate, chiamato oggetto. La struttura di JSON è universale, ossia tutti i linguaggi di programmazione moderni li supportano. Ogni oggetto JSON inizia con una parentesi graffa sinistra e finisce con una parentesi graffa destra. Ogni nome contenuto nelle parentesi graffe è seguito dai due punti e ogni coppia valore è separata da una virgola.

Esempio codice JSON format general visual

Nell’esempio mostrato sopra, è stato creato un codice JSON per impostare le proprietà generali del visual. Questo include impostazioni per l’oggetto visivo, la linea, le osservazioni plottate nello spazio e gli assi. Tra le proprietà configurate ci sono il font, il colore delle etichette, la dimensione, il titolo e lo spessore della linea.

Esempio: Regressione Lineare in Deneb

Oggetti scatter plot in JSON

In questo codice vengono mostrati alcuni degli oggetti visivi che saranno presenti nello scatterplot. Questi oggetti sono una sorta di “strati” che comporranno il visual, ad esempio la forma con cui dovranno essere rappresentate le singole osservazioni (“type”: “point”), i campi da utilizzare come variabili della regressione (“x” e “y”), i tooltip e la linea della regressione (“type”: “line”).

Calcolo R²

È stato poi creato il modello della regressione con la funzione “regression” di Vega-Lite e calcolato il valore di R² da mostrare sopra il grafico.

Scatterplot

Il risultato ottenuto mostra uno scatterplot in cui i singoli punti (giocatori) sono posizionate nel quadrante in base al punteggio attribuito dalle due variabili (Tackles e Yellow cards) utilizzate nella regressione. Ciascun asse del grafico rappresenterà una delle due variabili con la relativa scala di valori delle variabili, e la linea rossa mostrerà la regressione in base alla disposizione delle osservazioni nello spazio. Con il mouse è possibile mostrare un tooltip riepilogativo con il nome del giocatore e le statistiche analizzate. In alto sulla destra è mostrato il valore di R² per il modello creato, in questo caso un buon valore di correlazione, com’era facilmente prevedibile.

Esempio: Small multiples bar chart in Deneb

JSON small multiples

Grazie all’operatore “facet” in Vega è possibile creare delle viste comparate all’interno dei un unico visual, in questo caso diversi bar chart che rappresenteranno il ruolo del giocatore.

L’elemento “sort” consente di ordinare il posizionamento dei ruoli nello small multiples in base all’ordine attribuito di default da Power BI o in base a una regola specificata (in questo caso, si è utilizzato una nuova colonna “Sort Position” che contiene dei valori numerici per ciascun ruolo).

L’elemento “color” permette di creare una palette di colori da attribuire a un determinato campo, in questo caso il campo “Position” che divide il visual nei vari small multiples.

Infine, con la funzione “resolve” è possibile modificare l’asse X in modo che compaia in ogni singola vista comparata. In questo modo, ogni small multiples avrà l’asse X che mostra i nomi di tutte le squadre per ogni ruolo. È possibile vedere il risultato ottenuto nella figura sotto.

Bar Chart small multiples

Il risultato ottenuto mostra uno small multiples diviso in 2 righe e 2 colonne, in cui ciascun settore rappresenta uno specifico ruolo dei giocatori. Per ogni ruolo è stato creato un bar chart che mostra le squadre e il numero di vittorie ottenute da quella squadra per tutti i suoi giocatori in quello specifico ruolo. È stato utilizzato un colore diverso per ogni ruolo in modo da distinguerli facilmente ed è stato implementato un tooltip per mostrare il ruolo, il nome della squadra e il numero di vittorie.

Conclusione

Deneb è uno strumento molto utile per creare grafici personalizzati utilizzando una sintassi dichiarativa all’interno di Power BI. Per certi aspetti, Deneb è simile a Charticulator e ai visual in R/Python. Rispetto a Charticulator, però, Deneb offre una maggiore personalizzazione superando le limitazioni dell’interfaccia grafica di Charticulator. In confronto a R/Python, Deneb ha il vantaggio di essere integrato in Power BI, permettendo l’uso senza necessità di installare librerie o pacchetti esterni.

Inoltre, la sintassi di Deneb, basandosi su Vega o Vega-Lite ed essendo quindi di tipo “dichiarativo”, consente di scrivere codice in modo abbastanza semplificato. Questo perché la sintassi user-friendly è orientata alla descrizione di cosa si vuole ottenere, piuttosto che su come ottenerlo. Questo approccio offre il vantaggio di raggiungere una maggiore astrazione e espressività, oltre a una facilità di comprensione e manutenzione del codice.

Scopri tutte 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. 

Fonti: 
Declarative Visualization in Power BI, DENEB Documentation: www.deneb-viz.github.io
Introduction to the Grammar of Graphics, R Tutorials for Applied Statistics: www.murraylax.org
Introduzione a JSON: www.json.org
Regression, Vega-Lite: www.vega.github.io

Condividi ora sui tuoi canali social o via email: