Trasformazioni intermedie: unpivot, Group By, colonne condizionali
Le tre trasformazioni che separano l'analista junior dal senior. Unpivot per trasformare dati "wide" in "long" (essenziale per modellare), Group By per aggregare, colonne condizionali per logica derivata.
- ⏱ Tempo stimato: ~30 min + esercizi
- 🎯 Prerequisiti: L3.1, L3.2
- 🛠 Software: Power BI Desktop
Unpivot — da dati 'wide' a dati 'long'
Excel adora i dati wide (una colonna per ogni mese). Power BI ama i dati long (una colonna "Mese", una colonna "Valore"). L'unpivotè la trasformazione che ti porta dalla forma wide alla forma long.
Esempio. Hai una tabella così (wide):
Prodotto | Gen | Feb | Mar | Apr
P001 | 100 | 120 | 90 | 150
P002 | 50 | 80 | 75 | 100Dopo l'unpivot delle colonne mese diventa:
Prodotto | Mese | Valore
P001 | Gen | 100
P001 | Feb | 120
P001 | Mar | 90
P001 | Apr | 150
P002 | Gen | 50
...Come si fa:
- Seleziona le colonne da unpivotare (Gen, Feb, Mar, Apr).
- Tab Transform → Unpivot Columns → "Unpivot Selected Columns".
- Si crea una colonna "Attribute" (= nome colonna originale) e "Value".
- Rinomina "Attribute" in "Mese", "Value" in "Valore".
Table.UnpivotOtherColumns(
Tabella,
{"Prodotto"},
"Mese",
"Valore"
)Group By — aggregare
Group By raggruppa righe per una o più colonne e calcola aggregati. Tab Transform → Group By, oppure Home → Group By.
Esempio: hai vendite per riga, vuoi totali per Prodotto:
Prodotto | Data | Quantita | Importo
P001 | 2025-01-15 | 2 | 200
P001 | 2025-01-20 | 1 | 100
P002 | 2025-01-18 | 5 | 250Prodotto | TotQuantita | TotImporto | NumOrdini
P001 | 3 | 300 | 2
P002 | 5 | 250 | 1Table.Group(Tabella, {"Prodotto"}, {
{"TotQuantita", each List.Sum([Quantita]), Int64.Type},
{"TotImporto", each List.Sum([Importo]), type number},
{"NumOrdini", each Table.RowCount(_), Int64.Type}
})Aggregazioni disponibili:
- Sum, Average, Min, Max, Median.
- Count Rows, Count Distinct Rows, Count Values.
- All Rows (mantiene le righe originali in una sotto-tabella — utile per Group By "tecnico").
Colonna condizionale — IF semplice senza scrivere M
Dove: tab Add Column → Conditional Column. Si apre un wizard dove definisci le regole "Se [colonna] = X allora Y, altrimenti Z" senza scrivere codice.
Esempio. Vuoi una colonna "Fascia Cliente" basata sul fatturato:
Table.AddColumn(Tabella, "FasciaCliente",
each if [FatturatoCliente] >= 100000 then "VIP"
else if [FatturatoCliente] >= 10000 then "Top"
else if [FatturatoCliente] >= 1000 then "Standard"
else "Small",
type text
)if [Area] = "Nord" and [Importo] > 1000 then "Premium NORD"
else if [Area] = "Sud" and [Importo] > 800 then "Premium SUD"
else "Standard"Custom Column — qualunque espressione M
Dove: tab Add Column → Custom Column. Apri un editor dove scrivi un'espressione M usando i nomi colonna come [NomeColonna].
// Margine % calcolato
[Margine] / [Fatturato]
// Concatenazione
[Cliente] & " - " & [Codice]
// Estrai anno dalla data
Date.Year([DataDoc])
// Logica complessa
if Text.StartsWith([Codice], "EX") then "Export" else "Domestico"
// Lookup in lista
List.Contains({"IT","FR","DE"}, [Paese])Index column e altri trucchi utili
Tab Add Column ha alcune chicche:
- Index Column — aggiunge una colonna 0..n o 1..n. Utile per fare join posizionali o ordinare in modo deterministico.
- Column From Examples — Power Query "indovina" la trasformazione dai tuoi esempi. Tu scrivi 2-3 valori output desiderati, PQ genera l'espressione M. Magia per split/parsing rapidi.
- Duplicate Column — duplica una colonna esistente per applicare trasformazioni diverse mantenendo l'originale.
Errori comuni
Esercitazioni
Unpivot delle vendite mensili
Crea (o trova) un Excel con colonne: Prodotto, Gen, Feb, Mar, Apr (4 mesi di vendite). Caricalo in Power Query. Unpivot delle 4 colonne mese. Rinomina "Attribute" → "Mese", "Value" → "Vendite".
Group By per prodotto
Sulla tabella long appena creata, fai Group By per Prodotto, calcolando: Sum(Vendite), Count Rows. Quale prodotto ha venduto di più?
Colonna condizionale 'Fascia'
Aggiungi una colonna condizionale "Fascia" basata su Vendite: ≥ 200 → "Alta", 100-199 → "Media", 0-99 → "Bassa".
Custom Column con logica composta
Aggiungi una Custom Column "BonusEligibile" che restituisce true se: (Vendite > 150 AND Fascia = "Alta") OR Mese = "Dic". Scrivi l'espressione M.
Column From Examples
Hai una colonna "FullName" con valori tipo "Mario Rossi". Usa "Column From Examples" (Add Column → From Selection) per creare una colonna "Iniziali" che mostri "M. R.". Verifica l'espressione M generata.
Group By + All Rows (trick)
Vuoi calcolare per ogni Cliente la data dell'ultimo ordine, mantenendo tutte le altre colonne (data primo ordine, totale ordini, ecc.) evoler conservare comunque il dettaglio degli ordini in una sotto-tabella. Come fai con Group By "All Rows"?
Unpivot dinamico
Hai una tabella wide con colonne "Vendite_2024_Gen", "Vendite_2024_Feb", ..., "Vendite_2026_Dic" — 36 colonne. Vuoi unpivot e splittare il nome in "Anno" e "Mese". Pensa la pipeline in 4 step.
Quick check finale
Quando preferisci 'Unpivot Other Columns' a 'Unpivot Selected Columns'?
Per logica con AND/OR complessi, conviene:
Trasforma un report 'wide' in formato analizzabile
Crea in Excel un report "wide": una colonna Prodotto e poi una colonna per ogni mese (Gen, Feb, Mar, Apr) con dei valori di vendita. Almeno 5 prodotti. Poi in Power BI:
- Carica il file e apri Power Query.
- Seleziona la colonna Prodotto → Unpivot Other Columns per ottenere colonne
Prodotto · Mese · Valore. - Crea una query separata con Group By per Prodotto (somma del Valore).
- Aggiungi una colonna condizionale "Fascia" (es. Valore ≥ 1000 → "Alto", altrimenti "Basso").
Consegna il .pbix (oppure screenshot dei Applied Steps + tabella risultato long). Bonus: aggiungi un mese all'Excel e ricarica per dimostrare che la pipeline non si rompe.
- I mesi sono stati portati in formato long con Unpivot Other Columns (non Unpivot Columns fisso)
- La pipeline regge l'aggiunta di un mese (robustezza schema)
- Group By produce una tabella aggregata corretta (es. totale per prodotto)
- È presente una colonna condizionale/custom con logica sensata (es. fascia di valore)
- Tipi colonna corretti (numeri come numeri, date come date)
Consegna esercizio (.pbix / .xlsx)
Accedi per caricare il tuo file e ricevere una valutazione dal docente.
Hai finito la Lezione 3.3 ✓
Nella 3.4 vediamo come combinare tabelle: Merge (il CERCA.VERT robusto) e Append (unione di tabelle stessa struttura).