La maggior parte dei report PL-300 vive di analisi temporali: crescita anno su anno, totali year-to-date, confronti tra periodi. Perché queste analisi funzionino serve una date table dedicata nel modello, non le colonne data sparse presenti nelle tabelle dei fatti.
Perché una date table dedicata
Quando ti affidi alle colonne data delle tabelle fatti (es. OrderDate, ShipDate) incontri tre problemi. Primo, ogni colonna copre solo le date effettivamente presenti nei dati: se in febbraio non ci sono vendite, febbraio semplicemente non esiste e i grafici mostrano un asse temporale con buchi. Secondo, non puoi confrontare in modo coerente due tabelle che usano date diverse. Terzo, le funzioni di time intelligence non hanno un asse temporale unico su cui iterare.
La soluzione è una tabella calendario contigua e continua: una riga per ogni singolo giorno dell’intervallo, senza interruzioni, dal minimo al massimo delle date del modello. La continuità è un requisito, non un dettaglio estetico: funzioni come DATESYTD scorrono l’intera sequenza di date e, se manca anche un solo giorno, restituiscono risultati errati.
Costruzione
Puoi generare la tabella con CALENDAR o CALENDARAUTO in una tabella calcolata DAX, oppure in Power Query. Regola pratica per l’esame: l’intervallo deve andare dal 1 gennaio del primo anno al 31 dicembre dell’ultimo anno presente nei fatti, così gli anni sono sempre completi.
Calendario =
ADDCOLUMNS (
CALENDAR ( DATE(2022,1,1), DATE(2026,12,31) ),
"Anno", YEAR([Date]),
"Trimestre", "Q" & FORMAT([Date], "Q"),
"Mese", FORMAT([Date], "MMM"),
"NumMese", MONTH([Date])
)
Mark as Date Table
Creare la tabella non basta: devi indicare a Power BI che è la tabella delle date, tramite Mark as Date Table (Contrassegna come tabella data), selezionando la colonna data. Questo passaggio:
- valida che la colonna sia di tipo date/datetime, univoca e senza valori vuoti o buchi;
- rimuove le gerarchie di data automatiche nascoste che Power BI crea per ogni colonna data (riducendo la dimensione del modello);
- garantisce che le funzioni di time intelligence usino questa tabella come riferimento anche quando non passi esplicitamente la colonna date.
Senza il Mark as Date Table, funzioni come TOTALYTD possono comportarsi in modo inatteso perché si appoggiano alle gerarchie auto-generate.
Gerarchie e attributi utili
Per il drill-down crei una gerarchia trascinando i campi in ordine: Anno > Trimestre > Mese > Giorno. Attenzione a due dettagli architetturali:
- Ordina il Mese per il suo numero con Sort by Column (Ordina per colonna), usando
NumMese. Altrimenti i mesi appaiono in ordine alfabetico (apr, ago, dic…). - Distingui gli attributi di visualizzazione (etichetta “Gen”) da quelli di ordinamento (numero 1). Servono entrambi.
Attributi che l’esame si aspetta:
- Fiscal year / fiscal quarter: se l’anno fiscale inizia, ad esempio, a luglio, aggiungi colonne calcolate che spostano il conteggio di 6 mesi. Questi campi non si derivano dall’anno civile: vanno calcolati esplicitamente.
- Giorno feriale (weekday): nome e numero del giorno, più un flag
IsWorkingDayper filtrare weekend o festività. - Etichette come “Nome mese”, “Settimana ISO”, “Anno-Mese” per ordinamenti e assi puliti.
Legame con la time intelligence
Le funzioni SAMEPERIODLASTYEAR, DATESYTD, TOTALYTD, DATEADD, PREVIOUSMONTH presuppongono una date table valida e in relazione (di solito molti-a-uno dalla tabella fatti alla date table, con filtro a direzione singola). Il flusso corretto è: colonna data nei fatti in relazione con la colonna data del calendario, date table marcata, gerarchia costruita. Solo così una misura come Vendite YTD = TOTALYTD([Vendite], Calendario[Date]) produce risultati affidabili.
Trappole tipiche d’esame
- Time intelligence dà valori sbagliati o vuoti → la date table ha buchi o non è marcata con Mark as Date Table. Rendila contigua e marcala.
- I mesi appaiono in ordine alfabetico → applica Sort by Column sul nome mese usando la colonna numero mese, non riordinare manualmente.
- Serve confronto su anno fiscale (inizio luglio) → non basta
YEAR(); crea colonne calcolate di fiscal year/quarter con l’offset dei mesi. - Modello troppo pesante / gerarchie di data duplicate → disattiva Auto date/time e usa una sola date table centrale marcata.
- Un anno risulta incompleto nei totali → estendi il calendario dal 1° gennaio al 31 dicembre, coprendo anni interi anche se i dati iniziano a metà anno.