Obiettivo
Creare una tabella contenete un calendario
1 Soluzione utilizzando la funzione DAX CALENDARAUTO
Creiamo una Nuova Tabella
Inseriamo il codice
Calendario = VAR Lingua = "IT" // Lingua: IT (italiano), EN (inglese), ES (spagnolo), FR (francese), DE (tedesco) VAR Locale = SWITCH( Lingua, "IT", "it-IT", "EN", "en-US", "ES", "es-ES", "FR", "fr-FR", "DE", "de-DE", "en-US") RETURN ADDCOLUMNS(CALENDARAUTO(), "Data Int", INT(YEAR([Date]) * 10000 + MONTH([Date]) * 100 + DAY([Date])), // Formato AAAAMMGG come intero "Anno", YEAR([Date]), "Mese Nome", FORMAT([Date], "MMMM", Locale), "Mese Abbreviato", FORMAT([Date], "MMM", Locale), "Mese Num", MONTH([Date]), "Giorno Num", DAY([Date]), "Giorno Settimana Nome", FORMAT([Date], "dddd", Locale), "Giorno Settimana Abbreviato", FORMAT([Date], "ddd", Locale), "Giorno Settimana Num", WEEKDAY([Date], 2), // 1 = Lunedì, 7 = Domenica // Altri campi utili "Trimestre", "Q" & QUARTER([Date]), "Trimestre Num", QUARTER([Date]), "Settimana Num", WEEKNUM([Date], 2) )
Funzioni Usate
- CALENDARAUTO() Restituisce una tabella con una singola colonna denominata [Date] contenente un set contiguo di date. L'intervallo di date viene calcolato automaticamente in base ai dati nel modello.
- FORMAT([Date],"mmmm") restituisce il testo del mese
Formattare il campo [Date]
Andiamo in Strumenti colonna. Selezioniamo la colonna Date e scegliamo il formato (Short Date)

Contrassegnare una tabella come "tabella data" (o "tabella calendario")
Infine possiamo contrassegnare questa tabella come "tabella Data"

In Power BI, contrassegnare una tabella come "tabella data" (o "tabella calendario") serve a identificare formalmente quale tabella contiene le date principali per l'analisi temporale. Questo passaggio è fondamentale per l'intelligenza temporale di Power BI e offre diversi vantaggi:
Gerarchia temporale automatica: Power BI crea automaticamente gerarchie temporali come Anno > Trimestre > Mese > Giorno, facilitando l'analisi drill-down.
Funzioni time intelligence: Abilita funzioni DAX di intelligenza temporale come SAMEPERIODLASTYEAR, TOTALYTD, PREVIOUSMONTH che richiedono una tabella data correttamente identificata.
Filtri temporali intelligenti: Migliora le funzionalità di filtraggio relative al tempo nei report e dashboard.
Prestazioni ottimizzate: Power BI ottimizza le query relative al tempo quando sa quale tabella contiene le informazioni di data.
Supporto multilingua: Gestisce automaticamente i nomi dei giorni e dei mesi in base alle impostazioni locali dell'utente.
Per contrassegnare una tabella come tabella data, seleziona la tabella nella vista modello, vai alla scheda "Modellazione" e clicca su "Contrassegna come tabella data". Power BI ti chiederà di specificare quale colonna contiene le date principali.
È una best practice fondamentale per qualsiasi modello di dati che richieda analisi temporali.
2 Soluzione utilizzando il linguaggio DAX
Utilizziamo le seguenti funzioni:
DATE(anno,mese,giorno)
per creare la data inizio calendario e la data di fine
CALENDAR(DataInizio,DataFine)
per creare la tabella calendario
Calendario = VAR DataMinima = MIN(ordini[Data Ordine]) VAR DataMassima = MAX(ordini[Data Ordine])
RETURN ADDCOLUMNS ( CALENDAR (DataMinima, DataMassima), "Anno", YEAR([Date]), "Mese Numero", MONTH([Date]), "Mese", FORMAT([Date], "MMMM"), "Mese Breve", FORMAT([Date], "MMM"), "Trimestre", "T" & QUARTER([Date]), "Anno-Mese", FORMAT([Date], "YYYY-MM"), "Giorno Numero", WEEKDAY([Date], 2), // Il "2" imposta il Lunedì come primo giorno della settimana "Giorno", FORMAT([Date], "dddd") )
2 Soluzione utilizzando il linguaggio Power Query e il linguaggio M
Creiamo una Query vuota dal menù Recupera dati

Creiamo due parametri: uno per la data di inizio e uno per la data di fine.
Andiamo in Home > Gestisci parametri > Nuovo parametro

Inseriamo la data di inizio creando il parametro di tipo Data con nome DataInizio

Facciamo la stessa cosa per la data di fine
Otteniamo i due parametri

Selezionando la Query1 andiamo in Visualizza > Editor Avanzato

A questo punto scriviamo il codice

Con
NumeroGiorni = Duration.Days(DataFine-DataInizio)
Calcoliamo la differenza in giorni tra la data di inizio e fine. A questo valore andrà aggiunto 1 giorno
La funzione List.Dates serve per creare una lista di giorni. Ha tre parametri:
- data di inizio
- numero di giorni
- valore di incremento
Per indicare l'incremento di un giorno usiamo l'espressione
#duration(1,0,0,0)]
Il risultato è

Poichè il risultato è una lista (Elenco) occorre trasformarlo in tabella. Andiamo in Trasforma e selezioniamo Con la tabella

Diamo OK

Abbiamo ottenuto una colonna di tipo generico. Scegliamo il tipo calendario e chiamiamo la colonna DataCompleta

Otteniamo

Possiamo inserire ora varie colonne. La prima contenete solo l'anno. Per ottenere questo andiamo su Aggiungi colonna > Data > Anno > Anno

Otteniamo così la colonna con solo l'anno.

lo stesso può essere fatto per: Mese, Nome del mese, Giorno, Nome del giorno, Trimestre, Settimana dell'anno, Giorno dell'anno

Determinare il giorno della settimana
All'inizio del tutorial abbiamo inserito la formula DAX
Per ottenere un calendario. Possiamo aggiungere una colonna per calcolare il giorno della settimana in formato numerico:
"2" significa che la numerazione parte da lunedì. Infatti otteniamo

Per tradurre 7 in domenica, 1 in lunedì ecc. possiamo crearci una tabella "numero-giornosettimana" con due campi: numero e giorno-settimana utilizzando la sintassi DAX
numero-giornosettimana = DataTable(
"numero",INTEGER,
"giorno-settimana",STRING,
{
{1,"lunedì"},
{2,"martedì"},
{3,"mercoledì"},
{4,"giovedì"},
{5,"venerdì"},
{6,"sabato"},
{7,"domenica"}
}
)
Otteniamo così la tabella





