Ottimizzare le query SharePoint in Power BI
Quando si gestiscono delle liste SharePoint Online in Power BI con più campi di tipo loookup si notano tempi di aggiornamento dei dati dell'ordine dei minuti anche per liste piccole con soli 100 record.
Ovviamente più la lista è grossa e più colonne lookup sono presenti, più questi tempi aumentano esponenzialmente.
Normalmente in Power BI si importano le liste tramite il connettore SharePoint Online o SharePoint On-premises (se c'è un gateway istallato) tramite il menu Get Datae in Transform Data si espandono tutte le colonne lookup necessarie selezionando solo i campi necessariil risultato è questo dove per ogni colonna lookup viene letto il corrispondente campo Title
In pratica per ogni record e per ogni campo lookup viene fatta una query sul singolo item della lista lookup per ricavare i dati necessari.
Ovviamente più la lista è grossa e più colonne lookup sono presenti, più questi tempi aumentano esponenzialmente.
Import con connettore SharePoint
Normalmente in Power BI si importano le liste tramite il connettore SharePoint Online o SharePoint On-premises (se c'è un gateway istallato) tramite il menu Get Datae in Transform Data si espandono tutte le colonne lookup necessarie selezionando solo i campi necessariil risultato è questo dove per ogni colonna lookup viene letto il corrispondente campo Title
Questo modo di importare i dati è sicuramente user friendly, ma non è assolutamente efficiente.
Anche pochi items i tempi di attesa per il refresh dei dati sono dell'ordine dei minuti.
La lentezza di questo metodo è legata alla gestione dei compi lookup da parte di Power BI.Anche pochi items i tempi di attesa per il refresh dei dati sono dell'ordine dei minuti.
In pratica per ogni record e per ogni campo lookup viene fatta una query sul singolo item della lista lookup per ricavare i dati necessari.
Questo aumenta il tempo di importazione e la quantità di dati trasferiti.
Import con OData
Per rendere più efficienti le query SharePoint di import in Power BI, su può usare il connettore ODatanel campo Url va inserita una query REST OData di SharePoint come questa:Text: REST OData
https://sgart.sharepoint.com/_api/web/lists/GetByTitle('TestMultiLookupPowerBI')/items?$expand=Provincia1,Provincia2,Provincia3,Provincia4,Provincia5,Provincia6&$select=Id,Title,Created,Modified,Provincia1/Title,Provincia2/Title,Provincia3/Title,Provincia4/Title,Provincia5/Title,Provincia6/Title
Formato OData
In breve, le query REST OData sono composte dalle seguenti parti:- https://tenantName.sharepoint.com/sites/nomesito = il tenant SharePoint Online o la url del sito SharePoint on-premises
- /_api = prefisso standard per accedere alle API di SharePoint
- /web/lists/GetByTitle('TestMultiLookupPowerBI') = identifica la lista tramite il display name oppure trami il suo guid /web/lists(guid'5bca80cb-14c7-496e-aae2-163e61a810c0')
- /items = identifica gli items della lista
- ? = separatore della query string
- $expand = per espandere i campi di tipo lookup separati da virgola (va indicato il nome interno del campo)
- $select = per indicare i campi che devono essere ritornati, i campi lookup sono nella forma nomeCampo/nomeCampoDellaListaLookup, tutti separati dalla virgola
I parametri in query string devono essere separati tramite il carattere & (ampersand).
Le query OData supportano anche altri parametri come:- $filter = espressione di filtro, corrisponde alla where di T-SQL, ad esempio: Title eq 'Line 1' and Provincia1/Title eq 'Belluno'
- $orderby = per ordinare il risultato
- $top = per ritornare solo le prime N righe
Comparazione
Dopo aver aggiunto le due connessioni al report Power BI e premuto il tasto Refresh per aggiornare i dati, si nota subito la differenzaL'import standard, con soli 100 items nella lista, impiega alcuni minuti e scarica 529kB, mentre quella con OData impiega pochi secondi e scarica solo 35kB.