Salta al contenuto

Come inserire rettifiche in Power BI

Una delle caratteristiche più controverse di Power Bi consiste nel fatto che non è possibile inserire dati dalla sua interfaccia utente. Power BI legge dalle sorgenti dati ma non permette di scrivere su di esse. Dunque, se si vogliono inserire dei dati, bisogna farlo direttamente nella sorgente.

Poco male, si può pensare in prima istanza: se si usa un file Excel come sorgente dati, è piuttosto semplice inserirli e vederli in Power BI tramite un refresh.

Tuttavia, mentre da Power BI Desktop in fase di progetto è possibile fare refresh di una sola tabella, che potrebbe essere proprio quella in cui vengono inseriti i dati, ciò non è possibile da Power BI Cloud, che è dove gli utenti consumano i report e dove, dunque, i dati saranno inseriti una volta messo in produzione il tutto. Dunque, se nel file Excel sorgente viene inserito un valore, per vederlo nel report sul cloud bisognerà fare refresh dell’intero modello dati.

Due considerazioni:

  1. il refresh dell’intero modello dati può essere lento;
  2. il numero di refresh automatici pianificati è limitato a 8 (licenza Pro) o 48 (licenza Premium per utente o Premium per capacità) al giorno, non in linea con un inserimento da parte dell’utente di dati nuovi. I refresh manuali, invece, sono illimitati e lanciabili in qualunque momento.

Dunque, il refresh, che già sarà lento in generale rispetto all’esigenza di inserire manualmente dei dati e vederli nel report, dovrebbe anche essere lanciato manualmente dopo ogni inserimento. Ciò appare doppiamente sconveniente. In sostanza, la modalità Import, obbligatoria per le sorgenti dati come Excel, non può essere la soluzione.

Ragionando, si può quindi pensare di usare una soluzione che non implichi il refresh. DirectQuery, al posto di Import, è la soluzione più naturale. Attenzione, però: non si può creare una connessione DirectQuery con una sorgente Excel. Questa modalità di connessione può essere usata solo con sorgenti strutturate quali SQL Server, Dataverse, Oracle e poche altre.

Così, se DirectQuery da un lato evita la necessità dei refresh, dall’altro obbliga all’uso di sorgenti su cui scrivere non è banale come aprire un file Excel, cambiare il numero in una cella, salvare e chiudere. Qui vengono in aiuto le Power App. In questo articolo sarà mostrata una soluzione che le userà per raggiungere l’obiettivo prefissato.

In ogni caso, la modalità DirectQuery per Power BI ha delle limitazioni e delle problematiche, eccone i punti salienti:

  1. le prestazioni sono degradate rispetto alla modalità Import, a causa della necessità di raggiungere la sorgente ad ogni interazione con le visualizzazioni;
  2. Power Query risulta estremamente limitato. Non è possibile, per esempio, inserire una colonna indice – vero è anche che, avendo una sorgente strutturata la cosa è implementabile nella sorgente stessa, ma sempre in modo non ovvio;
  3. le funzionalità di Time Intelligence in DAX sono estremamente lente e ne é vivamente sconsigliato l’uso;
  4. il gateway deve essere usato costantemente dal report per connettersi alla sorgente. Senza di esso, il report sul cloud non sarà che un contenitore vuoto;
  5. sebbene il refresh non esista in DirectQuery, le visual di Power BI hanno una memoria cache, dunque per vedere l’effetto dei numeri inseriti come rettifica, andrà fatto un refresh delle visual (e non del modello dati).

I punti 1 e 3 possono essere mitigati usando un modello composito Import / DirectQuery su SQL (o su altre sorgenti che supportano DirectQuery su storage), non ci sono invece soluzioni al punto 2. Il punto 4 non è critico, basta sapere come installare, settare ed usare il gateway. Sul punto 5, Power App può risolvere tramite un apposito comando scritto in Power FX.

La soluzione proposta, dunque, userà un modello composito in cui soltanto due tabelle saranno in DirectQuery, una tabella dei fatti su cui verranno inserite le rettifiche e una dimensione su cui si suppone di volere intervenire con modifiche di anagrafica, in entrambi i casi l’interazione avverrà tramite Power App. Il resto del modello (la tabella dei fatti principale e le altre dimensioni) avrà la tabella dei fatti in Import e le dimensioni in modalità Dual (Import o DirectQuery a seconda della query generata dalla visual, in modo da ottenere il massimo delle prestazioni possibili).

Il contributo delle Power App, in questo caso, è dunque duplice:

  1. permettono di scrivere sulla sorgente in modo semplicissimo e direttamente dal report Power BI (Desktop o Cloud);
  2. permettono di fare il refresh delle visual del report, in modo da vedere subito i numeri inseriti.

Sul punto 2 sopra riportato, vale la pena distinguere rispetto al refresh automatico della pagina, impostabile in Power BI Desktop a frequenza stabilita dal progettista. In quel caso, il refresh delle visual è ad intervalli prefissati, con la Power App si può invece lanciare il comando a proprio piacimento. Nella soluzione sarà inserito sia il refresh tramite Power App che tramite refresh automatico della pagina, in modo da avere assoluta continuità tra Power BI Desktop e Cloud, tuttavia in linea di principio, essendo Power BI Cloud il punto di inserimento dei dati di rettifica, basterebbe il solo comando di Power App.

Prima di passare a mostrare la soluzione funzionante, un doveroso ringraziamento al Lukas Tovazzi di Interconsult, che prima di noi ha pensato e realizzato una demo di questa soluzione e a cui dobbiamo, dunque, l’idea originale e lo stimolo a trovare una soluzione ottimale. Lukas, Dottore Commercialista e Consulente, ha sviluppato questa applicazione proprio per risolvere un problema tipico della professione di Commercialista ed Esperto Contabile: inserire al volo dei dati in situazioni contabili e vederne subito l’effetto sugli schemi e sugli indicatori di bilancio (modifiche ad una tabella dei fatti di rettifica).

Per non dilungare troppo questo articolo, verrà mostrata soltanto la soluzione già funzionante.

Il report finale

L’architettura scelta è la seguente:

  • il SQL Server è on premises, cioè non su cloud, ma nulla cambierebbe con un SQL Server su cloud (Azure SQL Server, per esempio);
  • è stata creata in esso una tabella dei fatti Delta che, insieme alla tabella dimensionale Customer, saranno le uniche due in DirectQuery, visto che il report prevede modifiche su entrambe;
  • la tabella dei fatti principale, Sales, è in Import per mantenere una prestazione ottimale sui dati più corposi;
  • le altre dimensioni sono in modalità Dual.

Ecco il data model usato (figura 1).

Figura 1

Il report prevede due Power App, una (Power App Customer) per modificare i dati della tabella Customer, l’altra (Power App Delta) per modificare i dati della tabella Delta. Ecco il layout del report già pubblicato su Power BI Cloud (figura 2):

Figura 2

Nella parte sinistra della figura 2, si notano la tabella Customer nella visual alto, che mostra 11 clienti, ognuno col valore di Customer[CustomerType] pari a Person e, in basso, l’App per la modifica. In effetti, basterà inserire un valore diverso di Customer[CustomerType] nell’App per un cliente, per esempio Corporation per il cliente 999, per ottenere immediatamente l’aggiornamento della tabella e della misure a lato dell’App stessa (figura 3). L’App è progettata per mostrare il record correntemente filtrato nella visual tabella col mouse.

Figura 3

Nella parte destra della figura 2, si notano la tabella Delta nella visual alto, che mostra la sua unica riga, pronta ad accogliere la rettifica numerica sulle vendite (campo Delta[SalesAmount]) in una certa data (Delta[DeltaDate]), al centro una matrice che mostra il valore delle vendite per anno (Sales), il valore di una misura che cattura la rettifica (SalesDelta, al momento pari a 5.000 €), una misura che somma queste due (SalesAddedDelta) e un calcolo di Time Intelligence – le vendite più le rettifiche calcolate all’anno precedente (SalesAddedDelta PY). Infine, in basso, l’App per la modifica. In effetti, basterà inserire un valore diverso di Delta[SalesAmount] nell’App per una data, per esempio 10.000 al 3/1/2008, per ottenere ancora una volta immediatamente l’aggiornamento di tabelle e misure a lato (figura 4).

Figura 4

Tutto questo è anche fattibile dal cellulare, tramite l’app gratuita di Power BI disponibile su Play Store per Android.

Conclusioni

Tramite la Power Platform, è possibile potenziare Power BI, per esempio tramite Power App, dando la possibilità all’utente di inserire dei dati. Tantissime altre estensioni sono possibili, per esempio tramite Power Automate e la sua interazione con le Power App. Seguiranno altri articoli con approccio creativo, per superare i limiti di Power BI che sono di Power BI ma non della Power Platform!

Nota: il file .pbix non è allegato a questo articolo in quanto 1) parte del dataset è in DirectQuery e quindi non funzionante senza la connessione on premises al SQL Server e 2) le Power App funzionano soltanto se si è loggati in Power BI Desktop e/o Cloud con utenti dotati di licenza e/o che hanno diritto di usarle, nel caso l’app sia stata con essi condivisa e non ne siano gli autori. Se i lettori fossero interessati a sapere di più su come costruire un report come quello mostrato in questo articolo, li invitiamo a renderlo noto nei commenti!

Autore del Post

Lascia un commento

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