primo dubbio amletico! Importazione...

Non è propriamente un programma di BI, ma nelle sue versioni più recenti anche Excel può fare grandi cose!

Moderatore: Utilizzo_prof_Excel


andrea.prestini
Messaggi: 7 | Topic creati
Iscritto il: gio 19 nov 2020, 11:08

primo dubbio amletico! Importazione...

Messaggio da andrea.prestini »

Buongiorno,
ho scoperto da poco questo fantastico mondo con l'aiuto di Emmanuele e Lodovico e, cercando di fare alcuni esercizi mi è sorto un dubbio amletico:
dovendo importare una grossa mole di dati è più efficiente:
- importare, togliere colonne, filtrare i record
- importare modificando il codice M della Source per ottenere direttamente il risultato Elimina colonne, filtra record (attraverso Tabel.SelectRows etc.)

Grazie a tutti per la collaborazione...


Avatar utente

Andrea90
Messaggi: 2266 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 673 volte
Contatta:

primo dubbio amletico! Importazione...

Messaggio da Andrea90 »

Ciao Andrea,

quale è la fonte dati?

Comunque prima direi sempre meglio filtrare e poi svolgere le altre operazioni.

A presto,

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
andrea.prestini
Messaggi: 7 | Topic creati
Iscritto il: gio 19 nov 2020, 11:08

primo dubbio amletico! Importazione...

Messaggio da andrea.prestini »

La mia domanda era meramente teorica, il concetto di riduzione della base attraverso il filtro mi è chiaro ma mi chiedevo se cambia la performance importando poi filtrando con il classico filtro record oppure attraverso una manipolazione del campo source attraverso funzioni del codice M: importo ed ottengo source poi nell'editor avanzato modofico source scegliendo attraverso la sintassi a lista le colonne che voglio importare...
Esempio
...[[colonna1],[colonna2]]

Grazie
Avatar utente

Andrea90
Messaggi: 2266 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 673 volte
Contatta:

primo dubbio amletico! Importazione...

Messaggio da Andrea90 »

Ciao Andrea,

La mia domanda era legata al fatto che a seconda della tipologia di fonte dati si possono applicare tecniche diverse per poter cercare di velocizzare la query.

Così in generale mi verrebbe da dire che non si ottiene una gran differenza tra il condensare il passaggio di creazione dell’origine dati con quello di selezione delle colonne, piuttosto che a tenerli separati uno di seguito all’altro.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
andrea.prestini
Messaggi: 7 | Topic creati
Iscritto il: gio 19 nov 2020, 11:08

primo dubbio amletico! Importazione...

Messaggio da andrea.prestini »

grazie, con la stessa logica mi chiedo:
in un video Lodovico nidificava dei passaggi in un'unica formula; questa procedura ha dei vantaggi in termini di performance? Avendo ogni passaggio come risultato un oggetto che poi viene ripreso dal passaggio successivo, nidificare il codice permette di caricare meno "oggetti" durante il flusso?
Grazie
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

primo dubbio amletico! Importazione...

Messaggio da Enrico Galli »

Ciao, domanda interessante :) personalmente, salvo casi di estrema necessità, preferisco tenere separati i passaggi, per semplicità di manutenzione. Certo, cerco di eliminare tutti i passaggi "inutili" come i "modifica tipo" che ti inserisce Power Query automaticamente dopo alcune operazioni (a volte sono utili, a volte no), i riordina colonne multipli, e altre simili inefficienze. Ma dal punto di vista della performance, non credo ci siano differenze sostanziali nella maggior parte dei casi, salvo alcune eccezioni.
Ci può essere ovviamente un'altra esigenza che è quella di ridurre il numero di passaggi: se una query ha 300 passaggi distinti, sarà magari anche veloce, ma quando poi devi trovare il passaggio in cui fai quella determinata operazione.... ;)
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione

Autore del topic
andrea.prestini
Messaggi: 7 | Topic creati
Iscritto il: gio 19 nov 2020, 11:08

primo dubbio amletico! Importazione...

Messaggio da andrea.prestini »

per concludere l'argomento ho effettuato una prova:
a) query 1 importo tabella, elimino colonne, inserisco Table.AddColumn(RemovedColumns, "ProvaCustom", each #"Added Index"{5}) ed ottengo un record con anche i campi delle colonne eliminate
b) query 2 importo tabella con Source = Excel.CurrentWorkbook(){[Name="tblOrders"]}[Content][[Region],[Item],[Units]], stesso procedimento ottengo un record con SOLO i campi presenti in Source...
Ai posteri l'ardua sentenza...
Grazie ancora e scusate la pidocchiaggine!
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

primo dubbio amletico! Importazione...

Messaggio da Enrico Galli »

andrea.prestini ha scritto: gio 19 nov 2020, 16:37 Table.AddColumn(RemovedColumns, "ProvaCustom", each #"Added Index"{5})
Ciao, il nocciolo della questione sta in quel each #"Added Index"{5}, che richiama il sesto record del passaggio "Added Index" (di cui non sappiamo nulla, non avendo il codice completo della query). Mi viene da pensare che in quel passaggio, precedente all'eliminazione delle colonne, ci fossero ancora tutti i campi, e tu richiamandolo in quel modo li "riesumi": ricordati che nulla viene perso per sempre nei vari passaggi della query: in qualsiasi momento puoi richiamare qualsiasi passaggio precedente e recuperare i dati che esistevano a quel punto
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione

Autore del topic
andrea.prestini
Messaggi: 7 | Topic creati
Iscritto il: gio 19 nov 2020, 11:08

primo dubbio amletico! Importazione...

Messaggio da andrea.prestini »

Il nocciolo è proprio lì: each#"Added Index"{5} segue RemovedColumns, quindi le colonne sono state eliminate prima ma, come risulta dal record, le ritrovo appunto quando arrivo al punto finale; nel secondo caso, avendole rimosse direttamente in sorgente, non sono presenti nel record. Ergo la mia ipotesi era quella che nel primo caso da qualche parte in memoria le colonne poi eliminate sono ancora presenti, con le risorse a loro assegnate, mentre nel secondo caso "forse" no. In una situazione con milioni di record questa cosa cambierebbe le performance? Avere in memoria magari 8 colonne con 1 milione di record "dovrebbe" assegnare maggiori risorse rispetto ad averne solo 2... o forse mi stò perdendo in un bicchiere d'acqua ;-)
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

primo dubbio amletico! Importazione...

Messaggio da Enrico Galli »

Non è che il motore di Power Query tenga in memoria tutte le "versioni" precedenti di ciascuna query, ma può "ricreare" ciò che esisteva in un determinato passaggio, ripartendo dall'origine ed eseguendo solo i passaggi precedenti a quello che si vuole richiamare. In ogni caso, se si parla del passaggio iniziale (quello in cui si caricano i dati per la prima volta) è sicuramente meglio importare solo le colonne necessarie, anziché eliminare quelle superflue subito dopo
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Rispondi