Lezione 3.1
Cos'è Power Query
Modulo 03 · Lezione 3.1 · Livello Base

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
1

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.

Animazione: i 3 pannelli del Power Query Editor — Queries (sinistra), anteprima dati (centro), Applied Steps (destra).
Per aprirlo
Home ribbon → Transform data. Si apre una finestra separata. Le modifiche non sono attive finché non clicchi "Close & Apply" in alto a sinistra.
2

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.
Anti-pattern: 'risolvo dopo con DAX'
Vedo spesso misure DAX che fanno 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.
3

Gli Applied Steps — la 'ricetta' delle trasformazioni

Ogni azione cliccata in PQ aggiunge uno step nel pannello Applied Steps a destra. La sequenza è:

  1. Source — la sorgente iniziale.
  2. Navigation — selezione del foglio/tabella specifica.
  3. Changed Type — i tipi delle colonne.
  4. ...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).

Esempio: Applied Steps tradotti in M
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
    RinominaColonne
Naming degli step
Power Query genera nomi inglesi auto come "Filtered Rows", "Removed Columns". Best practice: rinominali in qualcosa di parlante (es. "FiltraAnno2024", "RimuoviColonneInterne"). Tra 3 mesi quando torni sul .pbix sarai grato a te stesso.
4

Power Query funziona così — modello mentale

Tre verità da assimilare subito:

  1. 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.
  2. Le query sono lazy: niente viene eseguito finché non fai Close & Apply o un'anteprima. PQ ottimizza la pipeline prima di eseguire (folding incluso).
  3. Le query sono immutabili: ogni step prende il risultato del precedente e ne crea uno nuovo. Non modifichi mai "le righe" in-place.
5

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, certi List.Generate).
Sposta gli step rompi-folding alla fine
Se hai uno step che rompe il folding ma è indispensabile, mettilo il più in fondo possibile. Tutto quello che viene prima continua a folda.
6

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.
Schema drift — strategie
Per dati instabili (es. CSV ricevuti da clienti), evita di "lockare" lo schema con un Changed Type rigido. Spesso conviene caricare tutto come testo, validare, poi convertire selettivo.
7

Esercitazioni

Esercizio 1Base

Apri il Power Query Editor

Consegna

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.

Esercizio 2Base

Conta gli step generati

Consegna

Sulla query caricata dal CSV, prima di aggiungere alcunché, conta gli step automatici già generati. Cosa rappresentano?

Esercizio 3Base

Pulisci o lascia? — decisione

Consegna

Per ognuno di questi "problemi", indica se lo risolvi in Power Query (PQ) o nel modello/DAX:

  1. I nomi dei prodotti hanno trailing spaces.
  2. Voglio una misura "Margine %" calcolata da Fatturato e Costo.
  3. Le date sono in formato testo "31-12-2025".
  4. Voglio un "Anno" derivato dalla data.
  5. Mancano 50 colonne inutili nel CSV.
  6. Voglio il fatturato YTD.
Esercizio 4Intermedia

Leggi e capisci uno script M

Consegna

Cosa fa questa pipeline M? Spiega step per step.

M
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
    Ordina
Esercizio 5Intermedia

Folding o non folding?

Consegna

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?

Esercizio 6Avanzata

Strategia per schema drift

Consegna

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?

8

Quick check finale

Quick check

Dove vanno risolti i problemi di tipo dati e nomi sporchi?

Quick check

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.