Performance .pbix - Snellimento Dataset

Il software per la BI di Microsoft, leader nel mercato
Rispondi
Avatar utente

xalbex
Messaggi: 46 | Topic creati
Iscritto il: dom 30 ott 2022, 11:07
Luogo: Parma
Ringraziato: 4 volte

Performance .pbix - Snellimento Dataset

Messaggio da xalbex »

Ciao ragazzi,
apro questa discussione perché è da un pò che lavoro ad un progetto che gestisce più di un dataset al suo interno.
Parliamo di un .pbix dentro al quale sono collegato tramite DirectQuery in Analysis Service a 9 dataset aziendali e a 3 file che risiedono nel mio OneDrive (tramite path web).

Dall'inizio del progetto sapevo fosse una cosa abbastanza ostica per molti punti di vista...ma ho provato ugualmente.

E' stato il mio primo progetto in PowerBI Desktop e quindi ho incontrato un pò di ostacoli che pian piano ho superato.

Quello che però non riesco a bypassare è la LENTEZZA nel ricalcolo.
Non parlo solo delle query DAX per il calcolo di misure o colonne calcolate (che probabilmente potrebbero anche essere migliorate, ma questo è un altro argomento 8-) ) bensì di qualsiasi attività che possa essere svolta in ambiente Desktop.

Esempi: voglio rinominare una misura? Attendere...20 secondi! - voglio cambiare il formato ad un dato? - Attendere...boh 15 secondi! - voglio ,cambiare cartella ad una misura? - Attendere...10 secondi! - per non parlare di quando creo una misura o la modifico...a volte passa anche un minuto!
Insomma avete capito.

Per non parlare poi dei tempi di calcolo per negli elementi grafici.
Alcuni se non vengono snelliti da uno o due filtri non si caricano nemmeno.

Ho letto tanto sull'argomento "performance" ed ho provato a seguire tutti i consigli che ho trovato.

Per esempio:
1. Layout: evito di far visualizzare il Layout con tutte le tabelle per non rallentare il sistema. Vero è che almeno 9 layout (anche divisi) mi servono da reminder delle varie relazioni.
2. Cartelle Dimension in eccesso: ho eliminato tutte le cartelle con dimensioni che non mi servivano, lasciando sollo quelle dei fatti.
3. Ho migliorato via via le query DAX (ripeto su questo lavoro constantemente)
4. Uso un'unica tabella temporale creata all'interno del file.
...di sicuro dimentico qualcosa.

Secondo voi, la lentezza può dipendere dal fatto che all'interno del dataset ci sono troppe misure (anche se non tutte vengono utilizzate nei vari report)?
A proposito quando se ne crea una nuova, tutte le altre collegate vengono ricalcolate anche se non sono usate in nessun report?

La lentezza può dipendere dal fatto che ci siano troppi fogli (20, ciascuno con mediamente 3-4 elementi grafici) all'interno del file?

La lentezza può dipendere da quanti utenti sono collegati al servizio PowerBI aziendale in un determinato momento e/o dalla velocità di navigazione e/o dall'aggiornamento dei vari dataset (alcuni si aggiornano più volte al giorno)...

Secondo me può essere tutto, ma probabilmente il problema più impattante è la mole di dati a cui è collegato il file.
Per questo ho fatto un'analisi del # di righe di ciascuna tabella dei fatti.
Il dataset più piccolo ha circa 143 mln di righe, quello più esteso ne conta 800 mln (in continua espansione).
Di questi dataset come vi dicevo ne ho collegati 9 :crazy: .

Ovviamente non tutti i record di queste tabelle servono ai miei scopi (forse il 15-20% del totale basterebbe), tant'è che ho numerosi filtri esterni applicati in "tutte le pagine" che snelliscono un bel pò (molti di questi filtri si rifanno ovviamente a tabelle dimensioni).
Tuttavia mi sorge un dubbio: tali filtri vengono applicati prima o dopo il ricalcolo di una qualsivoglia misura?
Perché se vengono applicati dopo, è chiaro che i tempi di calcolo sono biblici...anche perché ho un umilissimo HP aziendale :geek: .

In un altro progetto che ho portato avanti nel quale ho collegato solo 1 dataset (quello con 800 mln di righe), ma ho creato tutte le misure su una tabella calcolata collegata al dataset sfruttando Recupera Dati - Analysis Services.
Dopo aver inserito il server ed il database ho scritto la query della tabella calcolata come segue:

Codice: Seleziona tutto

EVALUATE
CALCULATETABLE(
    ADDCOLUMNS(
        SUMMARIZE(
            Tabella dei Fatti,
            Campi necessari
        ),
        Colonne calcolate aggiuntive
    ),    
    Filtri
)
Questo approccio ha il limite che nella tabella calcolata non possono essere gestite più di 1 mln di righe...

Voi come la pensate?
Grazie mille!

Alberto.



StefanoC
Messaggi: 13 | Topic creati
Iscritto il: sab 1 giu 2024, 15:53
Luogo: Bologna

Performance .pbix - Snellimento Dataset

Messaggio da StefanoC »

CIao,
Non ho capito se il problema in termini di performance sia legato all'esecuzione su desktop o anche nel service online su Fabric.

Da quello che ho letto e visto nei video del canale https://www.youtube.com/@GuyInACube/videos (cerca il termine "performance"), mi pare di ricordare che il numero di cartelle create e di visual concorrino significativamente ad appesantire lo scenario. Prova a creare una copia del file, riducendo a 1 solo foglio e da li fare qualche refresh o creazione misure etc. per verificare le differenze di performance rispetto a prima.
C'è anche il tool "performance analyzer" che potrebbe indicare la presenza di specifici colli di bottiglia da cui partire.
Un saluto.
Stefano
Avatar utente

Autore del topic
xalbex
Messaggi: 46 | Topic creati
Iscritto il: dom 30 ott 2022, 11:07
Luogo: Parma
Ringraziato: 4 volte

Performance .pbix - Snellimento Dataset

Messaggio da xalbex »

Ciao Stefano grazie per il feedback.
Le performance sono scarse e in desktop e in fabric.
Conoscevo il performance analyzer ma non ho mai riscontrato un collo di bottiglia, perché tutte (o quasi) le misure sono lente a restituire i risultati.
Per questo pensavo dipendesse dalla struttura piuttosto che da una singola misura o un singolo report.
Tempo fa avevo provato ad eliminare tutti i fogli lasciandone solo uno, ma la solfa non cambiava.
Forse sarebbe più snellente l’operazione di togliere un pò di misure superflue (dovrei vedere se ne ho qualcuna magari rimasta in seguito ad una prova.
Tuttavia come scrivevo ogni volta che elimino, aggiungo, calcolo una misura il pop up “Attendere” si fa odiare perché resta impresso dai 20 ai 60 secondi..è snervante perché bisogna avere un sacco di tempo che di solito non si ha quando si lavora 🫤
Che poi il mio dubbio è sempre questo: se si tratta di qualcosa legato ai molteplici fogli o alle molteplici misure, perché dovrebbe essere così lento?
Voglio dire in un singolo foglio non sono mica utilizzate tutte le misure! Si e no in ciascun foglio sono presenti 3 o 4 misure diverse.

Per questo motivo io credo sia qualcosa più legato alla mole dati.

Da qui il titolo “snellimento dataset”.
Boh. Continuerò a cercare..
Avatar utente

Autore del topic
xalbex
Messaggi: 46 | Topic creati
Iscritto il: dom 30 ott 2022, 11:07
Luogo: Parma
Ringraziato: 4 volte

Performance .pbix - Snellimento Dataset

Messaggio da xalbex »

Ciao.
Ho trovato questo articolo che trovo interessante:
https://learn.microsoft.com/it-it/power ... -reduction
Tratta le tecniche di riduzione dei dati (di modelli in import mode..il mio progetto è in modalità mista, ma ho voluto leggere ugualmente).
A parte la riduzione del numero di colonne (cosa che potrebbe essere deleteria nel mio caso perché non sono sicuro che in seguito le colonne che eventualmente elimino potrebbero poi servirmi), trovo molto interessante la tecnica riduzione delle righe tramite parametri query (proverò anche se non sono sicuro che in modelli in direct query tale tecnica possa essere applicata).

Quello che però (secondo me) resta l’approccio più efficace è il “Raggruppa e Riepiloga” che riduce DRASTICAMENTE le dimensioni.
Lo so perché come scrivevo ho provato in un altro progetto a collegarmi al dataset tramite una query che aveva di fatto lo scopo di raggruppare e riepilogare (resta però il limite del mln di righe).
Nell’articolo però non parla di tabelle calcolate o query sul dataset. In effetti non approfondisce molto quest’aspetto :cry: .
Allora ho trovato quest’altro articolo:
https://learn.microsoft.com/it-it/power-query/group-by
Qui si parla come fare grop by o summarize tramite PowerQuery, ma sono quasi sicuro che non si possono applicare power query su modelli importati in direct query..mi sbaglio?

StefanoC
Messaggi: 13 | Topic creati
Iscritto il: sab 1 giu 2024, 15:53
Luogo: Bologna

Performance .pbix - Snellimento Dataset

Messaggio da StefanoC »

Ciao Alberto,
guarda la mia esperienza è alquanto limitata e con dataset che non hanno nulla a che vedere con i tuoi.
Sicuramente in un progetto così grande, eliminare misure sarebbe positivo, ma non so dirti quanto. Anche qui ti consiglio di salvartele da qualche parte e poi provare a eliminarle man mano, così da vedere sempre con l'analyzer se le cose iniziano a migliorare.
Inoltre, solo come consiglio di massima, la direct query sarebbe da limitare ai soli dati più recenti e non all'intero dataset con lo storico.
Altrimenti giocoforza l'aggiornamento diventa pesante. Dovresti provare a splittare il caricamento tra "storico" e recente".

Inoltre si, usa i raggruppamenti, se la granularità finale va bene per i tuoi scopi, mi spiego:
lo scorso anno avevo chiesto accesso a dati pubblici sull'agricoltura. Mi attendevo un 20-25 mln di record all'anno, ma alla fine per i miei scopi era logico accorpare i risultati, ad esempio agricoltore A e agricoltore B che nello stesso comune coltivano la stessa specie agronomica.
Siccome il dato sugli agricoltori non mi interessava, un raggruppamento con questo criterio da parte del fornitore pubblico che mi restituisse il totale delle coltivazioni per comune aveva consentito di fornirmi un database nazionale ridotto ad appena 400.000 record annui. Quindi decisamente gestibile. In quel caso, inoltre, mi avevano inviato un CSV già fatto, quindi ancora meno impattante visto che powerquery non era proprio interessato.
Non che in quel caso anche powerbi desktop fosse diventato un missile - il programma non è lo è mai stato neppure in startup... - tuttavia il tutto era ben lavorabile, sempre con qualche secondo di pazienza e attesa per ogni singola applicazione di slicer.

Prova a valutare uno scenario analogo, ossia un groupby eseguito a monte di tutto, ad esempio da SQL, che viene passato al tuo sistema solo alla fine.
Può essere che sia più performante rispetto ad un groupby in PowerQuery M...

Facci sapere, sono curioso ... :-)
Stefano
Avatar utente

Autore del topic
xalbex
Messaggi: 46 | Topic creati
Iscritto il: dom 30 ott 2022, 11:07
Luogo: Parma
Ringraziato: 4 volte

Performance .pbix - Snellimento Dataset

Messaggio da xalbex »

StefanoC ha scritto: dom 9 giu 2024, 11:08 Prova a valutare uno scenario analogo, ossia un groupby eseguito a monte di tutto, ad esempio da SQL, che viene passato al tuo sistema solo alla fine.
Può essere che sia più performante rispetto ad un groupby in PowerQuery M...
Puoi dirmi di più? :P :P

StefanoC
Messaggi: 13 | Topic creati
Iscritto il: sab 1 giu 2024, 15:53
Luogo: Bologna

Performance .pbix - Snellimento Dataset

Messaggio da StefanoC »

Beh, ho già detto più o meno tutto...
se in termini di risultato finale (record), una "group by" fa il caso tuo, prepara o fatti preparare un file csv da imporatre in powerbi con i dati già accorpati e puliti. In questo modo semplifichi al massimo il lavoro di powerbi che dovrà solo leggere un file bello pronto senza farci nulla.
Le prestazioni dovrebbero essere buone.

In parallelo, su un altro file pbix, acquisisci il file grezzo (molto più lungo) su cui eseguirai una groupby od eventuali ulteriori passaggi attraverso powerquery entro powerbi. Verosimilmente, sia la dimensione ben superiore del file originale, sia le operazioni di pulizia e raggruppamento da eseguire entro PowerBI desktop dovrebbero rallentare le performance del tuo pbix rispetto al caso sopra.... ma queste sono solo mie considerazioni e ipotesi di massima!
Ciao
Stefano
Avatar utente

Autore del topic
xalbex
Messaggi: 46 | Topic creati
Iscritto il: dom 30 ott 2022, 11:07
Luogo: Parma
Ringraziato: 4 volte

Performance .pbix - Snellimento Dataset

Messaggio da xalbex »

Ciao Stefano grazie.
No, ti chiedevo di dirmi di più perché pensavo conoscessi una procedura che permettesse di fare un group by in SQL a monte della connessione al db.
L'opzione .csv non mi piace moltissimo e probabilmente non è neanche fattibile lato IT aziendale.
Grazie coumunque :)

StefanoC
Messaggi: 13 | Topic creati
Iscritto il: sab 1 giu 2024, 15:53
Luogo: Bologna

Performance .pbix - Snellimento Dataset

Messaggio da StefanoC »

Impossibile rispondere senza qualche dettaglio sui campi o altro...
la sintassi SQL è questa, ma immagino tu forse la conosca già: https://www.w3schools.com/sql/sql_groupby.asp
S
Rispondi