Lezione 3.2
Operazioni base
Modulo 03 · Lezione 3.2 · Livello Base

Operazioni base: tipi, filtri, rinomina, split, sostituzione valori

Le 6 operazioni che farai ogni giorno in Power Query, sui dati reali. Per ciascuna: cosa fa, dove sta nel ribbon, cosa genera in M, errori tipici, e tanti micro-esercizi per fissarla.

  • ⏱ Tempo stimato: ~30 min + esercizi pratici
  • 🎯 Prerequisiti: L3.1
  • 🛠 Software: Power BI Desktop + un CSV sporco di esempio
1

Cambiare il tipo di una colonna

Dove: click sull'icona tipo a sinistra del nome colonna (mostra ABC, 123, 📅, ecc.) → scegli il tipo. Oppure: tab Transform → Data Type.

Tipi disponibili:

  • Decimal Number, Whole Number, Fixed Decimal, Percentage — numeri.
  • Date, Date/Time, Time, Duration — data/orario.
  • Text — testo.
  • True/False — booleano.
  • Binary — binario (file, immagini).

Per date con formato locale (italiano dd/mm/yyyy), usa:

Change Type with Locale
Table.TransformColumnTypes(
    Origine,
    {{"Data", type date}},
    "it-IT"
)
Errori di Change Type
Se una riga ha un valore non convertibile (es. "N/A" in una colonna numero), genera Error in quella cella. Power BI lo segnala con un avviso. Decidi tu: eliminare le righe errore, sostituire i valori, o aggiungere "N/A" alla lista nulls.
2

Filtrare righe

Dove: click sulla freccia accanto al nome colonna (come Excel) → spunta i valori da tenere, o scegli "Number Filters / Text Filters / Date Filters". Anche tab Home → Keep Rows / Remove Rows.

Esempi di Table.SelectRows
// Mantieni le righe con Importo > 100
Table.SelectRows(Tabella, each [Importo] > 100)

// Mantieni le righe dell'anno corrente
Table.SelectRows(Tabella, each Date.Year([DataDoc]) = Date.Year(DateTime.LocalNow()))

// Mantieni le righe con stato in una lista
Table.SelectRows(Tabella, each List.Contains({"Confermato", "Spedito"}, [Stato]))

// Escludere righe null in una colonna
Table.SelectRows(Tabella, each [Cliente] <> null)
Filtra il prima possibile (folding)
Spostare il filtro in cima alla pipeline (subito dopo Source) riduce i dati su cui lavorano gli step successivi e massimizza il query folding.
3

Rinominare colonne

Dove: doppio click sul nome della colonna. Oppure: right-click → Rename.

Table.RenameColumns
Table.RenameColumns(Tabella, {
    {"DataDoc", "Data"},
    {"Importo", "Fatturato"},
    {"IdCli", "IdCliente"}
})

Convenzioni di naming (scegli e mantieni una sola, in tutto il modello):

  • PascalCase: "DataVendita", "Cliente", "Fatturato".
  • Spazi e leggibilità: "Data Vendita", "Importo Lordo" — preferito per nomi che vede l'utente nei visual.
  • snake_case: "data_vendita", "fatturato" — comune lato database.
Naming consistente = Copilot-ready
Per essere "Copilot-ready" (Modulo 8), tutto il modello deve avere nomi parlanti e consistenti. Niente "Col1", "Field_x", "DT_VND". Copilot interpreta meglio se i nomi sono autoesplicativi.
4

Rimuovere colonne (e righe)

Rimuovere colonne: select una o più colonne (Ctrl+click) → tab Home → Remove Columns → Remove. Oppure "Remove Other Columns" per tenere solo le selezionate (preferito quando vuoi essere esplicito).

Table.RemoveColumns vs Table.SelectColumns
// Toglie 2 colonne
Table.RemoveColumns(Tabella, {"NotaInterna", "Flag"})

// Tiene solo 4 colonne (preferito: esplicito è meglio di implicito)
Table.SelectColumns(Tabella, {"Data", "Cliente", "Prodotto", "Importo"})

Rimuovere righe: tab Home → Remove Rows → Remove Top/Bottom/Alternate/Duplicate/Errors.

Remove Other Columns batte Remove Columns
Quando arriva una nuova colonna alla sorgente, RemoveColumns la include lo stesso (sporcando il modello), mentre SelectColumns la esclude automaticamente. Best practice: lavora per lista positiva.
5

Split column — dividere stringhe

Dove: tab Transform → Split Column. Opzioni: By Delimiter, By Number of Characters, By Positions, By Lowercase to Uppercase, ecc.

Caso classico: colonna "Cliente Completo" con formato "Mario Rossi - 12345":

Split by Delimiter
Table.SplitColumn(Tabella, "ClienteCompleto",
    Splitter.SplitTextByDelimiter(" - ", QuoteStyle.Csv),
    {"NomeCliente", "CodCliente"})
Attenzione al numero di colonne risultanti
Se la sorgente ha alcuni record con più o meno occorrenze del delimitatore, ottieni un numero variabile di colonne. Conviene specificare un limite massimo(es. 2 colonne) per evitare di esplodere la tabella.
6

Sostituire valori

Dove: right-click su una colonna → Replace Values. Comodo per:

  • Sostituire null con un valore default ("N/D", 0).
  • Normalizzare codici ("S" → "Sì", "N" → "No").
  • Rimuovere caratteri spuri ("€" da Importo per renderlo numerico).
Table.ReplaceValue
// Sostituisci null con 0 nella colonna Quantita
Table.ReplaceValue(
    Tabella, null, 0,
    Replacer.ReplaceValue, {"Quantita"}
)

// Rimuovi simbolo Euro da Importo
Table.ReplaceValue(
    Tabella, "€", "",
    Replacer.ReplaceText, {"Importo"}
)
7

Bonus: Trim, Clean, Upper/Lower

Tab Transform → Format → propone una manciata di trasformazioni utilissime:

  • Trim: rimuove spazi iniziali e finali. Sempre dopo l'import di Excel/CSV.
  • Clean: rimuove caratteri non stampabili (TAB, line break sporchi).
  • UPPERCASE / lowercase / Capitalize: normalizza maiuscole/minuscole.
  • Add Prefix / Suffix: aggiunge testo.
Esempio: trim + lowercase su Email
Table.TransformColumns(
    Tabella,
    {{"Email", each Text.Lower(Text.Trim(_)), type text}}
)
8

Esercitazioni — fai TUTTE quelle a portata

Esercizio 1Base

Cambia tipo a una colonna data italiana

Consegna

Carica un CSV con date "31/12/2025" interpretate come testo. Cambia il tipo a Date usando il locale italiano. Verifica nel pannello dati che ora siano date "vere" (ordinabili, filtrabili per anno).

Esercizio 2Base

Filtra le righe

Consegna

Sullo stesso CSV, applica 3 filtri in sequenza: 1) solo righe del 2025, 2) escludi valori null nella colonna Cliente, 3) tieni solo importi > 0. Annota gli step generati.

Esercizio 3Base

Rinomina 3 colonne

Consegna

Rinomina 3 colonne del tuo CSV con nomi più parlanti (es. "DT_VND" → "DataVendita", "IMP_LRD" → "Fatturato"). Verifica nello step generato che usi Table.RenameColumns.

Esercizio 4Base

Rimuovi colonne con SelectColumns

Consegna

Tieni solo 4 colonne usando "Remove Other Columns" (oppure tieni-pulsanti). Confronta lo step generato con Table.SelectColumns.

Esercizio 5Intermedia

Split di una colonna

Consegna

Hai una colonna "ClienteCompleto" con valori tipo "Mario Rossi - 12345". Splittala in due colonne ("Nome", "Codice") usando il delimitatore " - ".

Esercizio 6Intermedia

Sostituisci null e simbolo

Consegna

Sulla colonna "Importo" hai valori tipo "€ 1.234,56" misti a null. Vuoi una colonna numerica pulita. Scrivi i passaggi.

Esercizio 7Intermedia

Trim + lowercase su email

Consegna

Sulla colonna Email applica: trim spazi, lowercase. Verifica con Text.Lower(Text.Trim(_))in M.

Esercizio 8Avanzata

Pipeline completa su CSV sporco

Consegna

CSV ricevuto da un fornitore: 5 righe di header inutile in cima, separatore ;, date italiane, importi con €, una colonna "Note interne" da rimuovere, colonna Email con spazi. Scrivi l'ordine degli step Power Query (almeno 7) per renderlo pronto al modello.

9

Quick check finale

Quick check

Quale operazione preserva meglio la robustezza del modello quando arrivano nuove colonne in sorgente?

Quick check

Date dd/mm/yyyy lette come stringa. Cosa fai?

Hai finito la Lezione 3.2 ✓

Le operazioni base ti sono in mano. Nella 3.3 saliamo di livello: unpivot, Group By, colonne condizionali.