Lezione 2.3
Excel · CSV · SQL
Modulo 02 · Lezione 2.3 · Livello Base

Caricare Excel, CSV e SQL passo-passo

Le tre sorgenti che incontrerai in 90% dei progetti reali. In questa lezione facciamo le tre connessioni con tutte le insidie: fogli vs tabelle vs named range, encoding CSV, separatori, query SQL custom, autenticazione, query folding.

  • ⏱ Tempo stimato: ~30 min + esercizi pratici
  • 🎯 Prerequisiti: L2.1, L2.2
  • 🛠 Software: Power BI Desktop; opzionale: SQL Server Express o Azure SQL DB di test
1

Caricare un file Excel — fogli, tabelle, named range

Get Data → Excel → seleziona il file. Si apre il Navigator. Qui c'è la prima insidia: vedi tre tipi di oggetti con icone diverse:

  • 📄 Sheet — un foglio intero del workbook. Power BI legge dal primo riempito; serve quasi sempre pulizia (PromoteHeaders, rimuovere righe vuote).
  • 🔢 Table — una tabella Excel (Format as Table in Excel, Ctrl+T). Ha già header automatici e perimetro definito. Sempre preferibileai fogli.
  • 🏷 Named Range — un intervallo nominato (Formulas → Define Name). Utile per zone fisse di un foglio (es. una tabella di parametri in alto a destra).
Prima di caricare un Excel: 'as table'
Se il file Excel non ha tabelle definite, aprilo in Excel, seleziona le righe, Ctrl+T, dai un nome alla tabella ("Vendite", "Anagrafica"). Power BI riconoscerà l'intervallo esattamente, niente sorprese se domani aggiungono righe.
Navigator di Excel: a sinistra l'albero con fogli e tabelle (icone diverse), a destra l'anteprima.
Navigator di Excel: a sinistra l'albero con fogli e tabelle (icone diverse), a destra l'anteprima.
2

Caricare un CSV — separatore, encoding, intestazioni

Get Data → Text/CSV → seleziona il file. Power BI auto-rileva:

  • il delimiter (virgola, punto-virgola, tab, custom);
  • l'encoding (UTF-8, Windows-1252, UTF-16, ecc.);
  • il numero di righe per il rilevamento dei tipi (200 default, modificabile).

Se l'auto-rilevamento sbaglia, puoi correggere manualmente prima di confermare. Errori tipici:

  • CSV italiani con separatore ; letto come , → tutto in una colonna.
  • Caratteri accentati storti (è → è) → encoding sbagliato; passa a Windows-1252 o UTF-8 a seconda della sorgente.
  • Date in formato dd/mm/yyyy interpretate come mm/dd/yyyy → vai in Power Query, click tipo colonna → "Using Locale" → Italian (Italy).
Mai fidarsi del primo refresh
Dopo aver caricato un CSV, vai in vista Tabella e controlla 2-3 valori di ogni colonna. Le date e i numeri sono la fonte più frequente di errori che esplodono dopo.
3

Caricare una cartella di file (Folder)

Get Data → Folder → indica una cartella. Power BI mostra l'elenco file con metadata (Name, Extension, Date Modified). Il pulsante chiave è "Combine Files":

  1. Power BI prende il primo file come "sample".
  2. Apre Power Query e ti chiede di confermare lo schema (separatore, header, ecc.).
  3. Genera automaticamente: una funzione M "Transform Sample File" + una query Helper che applica quella funzione a tutti i file della cartella.
  4. Aggiunge una colonna Source.Name per sapere da quale file viene ogni riga.
Schema invariante
Combine Files presuppone schema identico tra i file. Se mancano colonne in alcuni, le righe arrivano comunque ma con null. Se l'ordine è diverso, Power Query unisce per nome di colonna (non per posizione) — purché i nomi siano uguali.
4

Connessione SQL Server — passo per passo

Get Data → SQL Server. Si apre una finestra con:

  • Server: hostname o IP, opzionalmente server\instance (es. SRV01\SQLEXPRESS).
  • Database: opzionale (se vuoto, vedi tutti i DB disponibili).
  • Data Connectivity mode: Import o DirectQuery (vedi 2.2).
  • Advanced options: timeout, command text custom (SQL diretto), include relationship columns.

Per autenticazione, le opzioni più comuni:

  • Windows — usa le tue credenziali AD locali (LDAP). Tipico in on-prem.
  • Database — username + password SQL specifici.
  • Microsoft account / Entra ID — per Azure SQL DB.
  • Service Principal — per scenari automatici (CI/CD, refresh).
Query SQL custom — utile ma con cautela
In Advanced options puoi mettere una query SQL custom (es. SELECT a, b FROM v_Vendite WHERE Anno > 2023). Vantaggi: filtri server-side, performance. Svantaggi: rompi il query foldingper gli step successivi in Power Query — quindi tutto quello che fai dopo gira in locale, non più sul server.
5

Esempi pratici di SQL in connessione

Caricamento filtrato server-side (raccomandato):

SQL custom in Get Data → Advanced options
SELECT
    v.IdVendita,
    v.Data,
    v.IdCliente,
    v.IdProdotto,
    v.Quantita,
    v.Importo,
    v.IdArea
FROM dbo.Vendite AS v
WHERE v.Data >= '2024-01-01'
  AND v.Stato = 'Confermato'

Caricamento di una vista o stored procedure (preferito a query lunghe inline, perché manutenibile lato DB):

Chiamare una vista creata sul DB
SELECT *
FROM analytics.v_VenditeGiornaliere
WHERE Anno >= 2024
Best practice: viste sul DB invece di SQL inline
Quando il SQL inizia ad essere complesso, fallo creare al DBA come vista sul DB. In Power BI carichi la vista. Domani se cambia la logica, modifichi la vista senza toccare il .pbix.
6

Errori comuni e debug rapido

'The remote name could not be resolved'
Hostname sbagliato o firewall che blocca. Verifica con ping nomeserver da PowerShell. Per Azure SQL DB, controlla che il tuo IP sia in whitelist su Azure Firewall.
'Login failed for user'
Credenziali errate o tipo di auth sbagliato. Vai in File → Options → Data source settings → seleziona la connessione → Edit Permissions → Edit credentials.
Date italiane interpretate male
Power Query → click sull'icona tipo della colonna data → "Using Locale" → Italian (Italy). Non basta cambiare tipo a "Date"; il locale serve per la parsing.
CSV con righe vuote o di intestazione fittizia
Es. Excel/CSV "report" con titolo nelle prime 3 righe e dati dalla 4. Soluzione: Home → Remove Rows → Remove Top Rows → 3. Poi Promote First Row as Header.
7

Esercitazioni — fanne almeno 4

Esercizio 1Base

Excel: foglio vs tabella

Consegna

Prendi un file Excel con un foglio "Vendite" che contiene una tabella di dati. In Excel, prima di caricare, premi Ctrl+T su quei dati e nominala tbl_Vendite. Poi: Get Data → Excel → file. Confronta la differenza tra spuntare "Sheet1" vs "tbl_Vendite" nel Navigator. Cosa cambia?

Esercizio 2Base

CSV italiano

Consegna

Trova un CSV con separatore ; e date dd/mm/yyyy (puoi crearne uno esportando una pivot Excel). Caricalo in Power BI Desktop. Controlla che: 1) le colonne siano separate correttamente, 2) le date appaiano come date e non come testo. Se non vanno, sistema in Power Query.

Esercizio 3Base

Combina 3 file CSV in cartella

Consegna

Crea 3 CSV "Vendite_Gen.csv", "Vendite_Feb.csv", "Vendite_Mar.csv" con lo stesso schema. Mettili in una cartella. Get Data → Folder → seleziona la cartella → Combine Files. Verifica che la colonna Source.Name indichi il file di origine di ogni riga.

Esercizio 4Intermedia

SQL con query custom

Consegna

Se hai un SQL di test (o Azure SQL DB), connettiti in Advanced options con questa query:

SQL
SELECT TOP 1000 *
FROM Sales.SalesOrderHeader
WHERE OrderDate >= '2014-01-01'

Poi controlla in Power Query (right click ultimo step → View Native Query) che la query folding funzioni. Se non hai SQL, descrivi cosa ti aspetteresti di vedere.

Esercizio 5Intermedia

Excel sporco da pulire

Consegna

Hai un Excel con: 3 righe di titolo all'inizio, una colonna vuota in fondo, date come testo (formato "31/01/2026"), nomi di colonna in italiano con spazi. Scrivi in 5 step la pipeline Power Query per renderlo pronto al modello.

Esercizio 6Avanzata

Vista SQL vs query inline

Consegna

Il tuo DBA ti chiede: "vuoi che ti faccio una vista SQL o tieni la query inline nel .pbix?". Rispondi argomentando in 4 punti (manutenibilità, performance, sicurezza, versionamento).

8

Quick check finale

Quick check

Hai un Excel con dati in foglio non strutturati. Cosa fai PRIMA di Get Data?

Quick check

Date dd/mm/yyyy interpretate come mm/dd/yyyy. Soluzione?

Hai finito la Lezione 2.3 ✓

Ora sai caricare i tre formati più comuni senza inciampare nei tranelli classici. Nella 2.4 vediamo il Gateway on-premises in pratica.