Power Query Editor: la pipeline riproducibile

In Power BI Desktop, quando fai Trasforma dati entri nel Power Query Editor: l’ambiente dove ripulisci e rimodelli i dati prima che entrino nel modello. La sua caratteristica architetturale fondamentale è che ogni operazione viene registrata nel riquadro Applied Steps (Passaggi applicati). Non stai modificando i dati in modo distruttivo: stai costruendo una pipeline dichiarativa e riproducibile di passaggi, eseguiti in sequenza a ogni refresh contro la sorgente originale.

Ogni azione che compi nell’interfaccia genera automaticamente codice M (Power Query Formula Language). Cliccando Advanced Editor vedi l’intera query come una funzione let ... in, dove ogni step referenzia il precedente. Questo significa che l’interfaccia grafica è solo un generatore di M: puoi rinominare, riordinare, eliminare o inserire passaggi, e modificarne la formula manualmente per casi che l’UI non copre.

Le trasformazioni chiave

Righe e colonne

  • Remove/Keep Rows: elimina righe vuote, duplicati (Remove Duplicates), le prime/ultime N, o righe che soddisfano un filtro. Utile per scartare intestazioni multiple o righe di totale importate da Excel.
  • Choose Columns / Remove Columns: tieni solo ciò che serve al modello. Rimuovere colonne inutili a monte riduce memoria e velocizza il refresh.
  • Data types: assegna sempre il tipo corretto (Whole Number, Decimal, Date, Text, True/False). È il passaggio più critico: un tipo sbagliato rompe aggregazioni DAX, relazioni e ordinamenti. Imposta la tipizzazione esplicitamente come ultimo passaggio stabile, non affidarti al rilevamento automatico.

Ristrutturazione

  • Split Column: divide per delimitatore o numero di caratteri (es. Nome Cognome → due colonne, o un codice composito).
  • Group By: aggrega a un livello di granularità superiore (somma, conteggio, media per categoria), producendo una tabella più compatta.
  • Pivot Column: trasforma valori di una colonna in intestazioni (forma long → wide), tipicamente per report a matrice.
  • Unpivot Columns: l’operazione inversa e la più importante da capire.

Perché l’unpivot è essenziale

Molte sorgenti arrivano in forma wide (crosstab): una colonna per ogni mese, ogni prodotto, ogni anno. Questo formato è leggibile per un umano ma pessimo per un modello dati: non puoi creare relazioni pulite, filtrare o aggregare per la dimensione “sparsa” nelle intestazioni. L’Unpivot collassa quelle colonne in due sole — Attribute (l’ex intestazione) e Value (il dato) — producendo una tabella tidy in forma lunga, ideale per lo star schema. Usa Unpivot Other Columns quando in futuro potrebbero arrivare colonne nuove (es. mesi aggiuntivi): resteranno gestite automaticamente senza modificare la query.

Colonne condizionali e personalizzate

La Conditional Column genera logica if/then/else senza scrivere M; la Custom Column ti fa scrivere un’espressione M libera. Preferisci queste alla creazione di colonne calcolate DAX quando il valore è statico e determinabile in fase di caricamento.

Regola d’oro: trasforma il più a monte possibile

Il principio guida è: rimuovi ed elabora i dati il prima possibile nella pipeline, idealmente delegandoli alla sorgente (query folding, quando la sorgente è un database). Filtrare righe e colonne in cima alla query permette a Power Query di tradurre i passaggi in SQL nativo, scaricando il lavoro sul server e riducendo drasticamente il volume importato.

Power Query vs DAX

  • Power Query (M): pulizia, rimodellazione strutturale, tipizzazione, dati importati e materializzati al refresh. Scelta corretta per shape del dato.
  • DAX: calcoli analitici e sensibili al contesto di filtro (measure, colonne calcolate dipendenti dal modello). Scelta corretta per logica di business dinamica.

Correggere a valle in DAX ciò che andava sistemato in Power Query gonfia il modello, complica le measure e degrada le prestazioni.

Trappole tipiche d’esame

  • Sorgente in forma wide (colonne = mesi/anni) da usare in un grafico temporale → la risposta è Unpivot Columns (o Unpivot Other Columns), non creare misure DAX per ogni colonna.
  • Serve filtrare righe da un database SQL con il minimo carico → applica il filtro il più a monte possibile in Power Query per preservare il query folding, non filtrare a valle con DAX.
  • Nuove colonne potrebbero aggiungersi alla sorgente e non devono rompere la query → usa Unpivot Other Columns, che gestisce dinamicamente le colonne non selezionate.
  • Un campo numerico viene trattato come testo e le somme falliscono → correggi il Data Type in Power Query (passaggio Changed Type), non con conversioni ripetute in DAX.
  • Aggregare a granularità superiore riducendo la tabella → usa Group By in Power Query; se il calcolo deve reagire ai filtri del report, allora è una measure DAX.