Cos'è Power Query e perché pulire prima di modellare
Power Query è lo strato di Power BI che pulisce e trasforma i dati prima che arrivino al modello. Capirlo è la differenza tra un report fragile e uno robusto. Cominciamo dal "perché", poi dal "come".
- ⏱ Tempo stimato: ~20 min + esercitazioni
- 🎯 Prerequisiti: Modulo 1 e 2
- 🛠 Software: Power BI Desktop
Cos'è Power Query
Power Query è il motore di ETL (Extract, Transform, Load) integrato in Power BI Desktop (e in Excel, e in Fabric Dataflow Gen2). Esegue trasformazioni sui dati prima che vengano caricati nel modello.
L'editor di Power Query è una UI dove costruisci la pipeline di trasformazioni cliccando (rinomina, filtra, cambia tipo, unisci...). Ogni click genera uno stepscritto in linguaggio M. La sequenza di step diventa una "ricetta" riproducibile a ogni refresh.
Il principio: pulisci prima di modellare
La regola d'oro di Power BI: "clean before you model". Tutti gli errori dati (tipi sbagliati, nomi brutti, valori nulli, colonne extra) vanno risolti in Power Query — non con misure DAX "patch" né con trucchi nel report.
Perché:
- Performance: ogni colonna inutile pesa su VertiPaq. Toglierla in PQ risparmia memoria e tempo refresh.
- Robustezza: nomi consistenti = misure DAX leggibili. Tipi corretti = niente errori a runtime.
- Manutenibilità: la logica di trasformazione sta in un unico posto (gli Applied Steps), non sparsa tra mille misure correttive.
- Query folding: gli step PQ "translatable" in SQL vengono spinti sulla sorgente (vedi 2.2) — performance da DirectQuery moltiplicate.
SUBSTITUTE, UPPER, parse di date stringa. Sono sintomi che la pulizia è stata saltata. Misure DAX cosmetiche = report lento e fragile. Sistema in Power Query e cancella la misura.Gli Applied Steps — la 'ricetta' delle trasformazioni
Ogni azione cliccata in PQ aggiunge uno step nel pannello Applied Steps a destra. La sequenza è:
- Source — la sorgente iniziale.
- Navigation — selezione del foglio/tabella specifica.
- Changed Type — i tipi delle colonne.
- ...altre trasformazioni che hai aggiunto (Filter, Remove, Rename, ecc.).
Click su uno step per vedere lo stato dei dati a quel punto. Ottimo per debug. Puoi rinominare gli step, eliminarli, riordinarli (con cautela: alcuni dipendono da quelli prima).
let
Source = Csv.Document(File.Contents("C:\Dati\vendite.csv"), [Delimiter=";", Encoding=1252]),
PromuoviHeader = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
CambiaTipo = Table.TransformColumnTypes(PromuoviHeader, {
{"Data", type date},
{"Importo", type number},
{"IdCliente", Int64.Type}
}),
FiltraAnno = Table.SelectRows(CambiaTipo, each [Data] >= #date(2024,1,1)),
RimuoviColonneInutili = Table.RemoveColumns(FiltraAnno, {"NotaInterna", "Flag"}),
RinominaColonne = Table.RenameColumns(RimuoviColonneInutili, {{"Importo", "Fatturato"}})
in
RinominaColonnePower Query funziona così — modello mentale
Tre verità da assimilare subito:
- Power Query è dichiarativo, non procedurale: non scrivi un loop "per ogni riga fai...". Descrivi cosa vuoi (filtra dove Data > X) e PQ lo applica vettorialmente.
- Le query sono lazy: niente viene eseguito finché non fai Close & Apply o un'anteprima. PQ ottimizza la pipeline prima di eseguire (folding incluso).
- Le query sono immutabili: ogni step prende il risultato del precedente e ne crea uno nuovo. Non modifichi mai "le righe" in-place.
Query folding — perché conta sempre
Quando la sorgente è un DB (o un servizio "intelligente" come SharePoint, Dataverse), PQ cerca di tradurre i tuoi step in una query nativa della sorgente (SQL, OData, ecc.) e di eseguirla lì. Si chiama query folding.
Vantaggi del folding:
- Dati filtrati lato sorgente → meno traffico → refresh più veloce.
- Indici/ottimizzazioni della sorgente sfruttati.
- Stessa velocità anche con dataset enormi.
Per verificare se uno step "folda":
- Right-click sullo step → "View Native Query". Se appare la SQL, folda. Se è grigio, no.
Cose che rompono il folding:
- Custom column con formule complesse.
- Merge con tabelle non-foldable.
- Trasformazioni "esoteriche" (es.
Table.Buffer, certiList.Generate).
Refresh e schema drift
Power Query memorizza lo schema rilevato la prima volta. Se la sorgente cambia (colonna rinominata, nuova colonna), può succedere:
- Colonna rinominata: lo step "Changed Type" o "Renamed Columns" fallisce perché il nome vecchio non esiste più → errore al refresh.
- Colonna nuova: PQ non la include automaticamente; va aggiunta a mano negli step.
- Tipo cambiato: se cambia da numero a testo, lo step "Changed Type" può generare errori in alcune righe.
Esercitazioni
Apri il Power Query Editor
Apri Power BI Desktop. Carica un file CSV qualsiasi → Transform Data. Identifica nel Power Query Editor: 1) il pannello Queries a sinistra, 2) l'anteprima dati al centro, 3) il pannello Query Settings con Applied Steps a destra.
Conta gli step generati
Sulla query caricata dal CSV, prima di aggiungere alcunché, conta gli step automatici già generati. Cosa rappresentano?
Pulisci o lascia? — decisione
Per ognuno di questi "problemi", indica se lo risolvi in Power Query (PQ) o nel modello/DAX:
- I nomi dei prodotti hanno trailing spaces.
- Voglio una misura "Margine %" calcolata da Fatturato e Costo.
- Le date sono in formato testo "31-12-2025".
- Voglio un "Anno" derivato dalla data.
- Mancano 50 colonne inutili nel CSV.
- Voglio il fatturato YTD.
Leggi e capisci uno script M
Cosa fa questa pipeline M? Spiega step per step.
let
Source = Sql.Database("srv01", "VenditeDB"),
Tabella = Source{[Schema="dbo",Item="Vendite"]}[Data],
FiltroData = Table.SelectRows(Tabella, each [DataDoc] >= #date(2024,1,1)),
Aggiungi = Table.AddColumn(FiltroData, "Anno", each Date.Year([DataDoc]), Int64.Type),
Ordina = Table.Sort(Aggiungi, {{"DataDoc", Order.Descending}})
in
OrdinaFolding o non folding?
Nel Power Query Editor, hai una query su SQL Server con 5 step. Lo step 4 ha "View Native Query" attivo (folding ok). Lo step 5 lo ha disabilitato (rotto). Cosa significa praticamente per la performance? Cosa potresti fare?
Strategia per schema drift
Ricevi un CSV mensile da un fornitore. Ogni tanto cambia nome a una colonna o ne aggiunge una nuova. Hai un report Power BI che si rompe quando succede. Quali 3 strategie M / accorgimenti adotti per renderlo più resiliente?
Quick check finale
Dove vanno risolti i problemi di tipo dati e nomi sporchi?
Cos'è il 'query folding'?
Hai finito la Lezione 3.1 ✓
Hai il modello mentale. Nella 3.2 facciamo le operazioni base in PQ: tipi, filtri, rinomine, split, sostituzioni — con dataset di esempio sporco.