Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Power BI offre più strumenti per eseguire calcoli basati sul tempo, che si basano su tabelle data automatiche o tabelle data aggiunte.
È consigliabile usare funzionalità di time intelligence basate sul calendario (anteprima) perché garantisce le migliori prestazioni e la massima flessibilità per adattarsi a qualsiasi calendario.
Questa tabella confronta i tre strumenti forniti:
| Tool | Sforzo di installazione richiesto | Facilità di gestione | Flessibilità | Note |
|---|---|---|---|---|
| Data/ora automatica | praticamente zero | duro | basso | Aumenta le dimensioni del modello a causa della creazione di più tabelle di data nascoste. |
| Intelligenza temporale classica | medium | facile | basso | Richiede la creazione di una tabella di date, presuppone che il calendario gregoriano o spostato subisca problemi di prestazioni in alcuni scenari specifici |
| Intelligenza temporale basata sul calendario | alto | medium | alto | Consigliato per creare una tabella di date, massima flessibilità, prestazioni ottimali, ma costi di configurazione maggiori |
Annotazioni
Si sconsiglia di utilizzare tecniche alternative di time intelligence, in particolare quelle che comportano l'aggiunta di colonne extra alle tabelle di date per calcolare gli offset, ad eccezione di casi d'uso specifici. Anche se questi approcci possono interessare i principianti a causa delle loro semplici formule DAX, tendono a gonfiare i modelli semantici inutilmente. Questo gonfiore può causare aggiornamenti dei dati più lenti e riduzione delle prestazioni del report man mano che i set di dati aumentano.
Data/ora automatica
La funzionalità data/ora automatica crea automaticamente tabelle data nascoste per ogni campo data nel modello di dati. Per altre informazioni su questo comportamento automatico, vedere Applicare la data/ora automatica in Power BI Desktop.
Annotazioni
Anche se data/ora automatica è un'opzione pratica per i modelli semplici, non è consigliabile per scenari più complessi e modelli più grandi. Per questi modelli, è preferibile creare una tabella dedicata per una maggiore flessibilità.
Aggiungere una tabella delle date di calendario
Per la maggior parte dei modelli, è consigliabile aggiungere una tabella data (o più in alcuni scenari). Molti analisti di dati preferiscono creare tabelle data personalizzate, che è corretto.
Esistono diversi modi per creare una tabella di questo tipo, tra cui:
- Power Query M. È possibile usare la funzione List.Dates . Più avanti in questo documento viene fornito un esempio.
- DAX. È possibile utilizzare le funzioni CALENDAR o CALENDARAUTO per generare una tabella data calcolata di base. È anche possibile usare un'istruzione DAX più avanzata per creare una tabella delle date. Più avanti in questo documento viene fornito un esempio.
- Strumenti esterni.
- Caricamento da un'origine, ad esempio un sistema di origine, un file o un altro modello semantico di Power BI.
Quale opzione è ideale per l'utente dipende da vari fattori e non rientra nell'ambito di questa esercitazione.
Usare calcoli basati sul tempo
Supponendo che non si usi la data/ora automatica, esistono due modi alternativi per usare le funzioni di intelligenza temporale in Power BI per eseguire calcoli basati sul tempo.
- Intelligenza temporale classica. L'opzione più semplice, che è ideale per i calendari gregoriani o per quelli spostati, ma ha una flessibilità limitata per i calendari strutturati in modo diverso o per i calendari basati sulla settimana.
- Intelligenza temporale basata su calendario (anteprima). L'opzione più recente, ma richiede un po' di lavoro da configurare. Tuttavia, offre anche prestazioni migliori, maggiore flessibilità per lavorare con calendari non gregoriani e la possibilità di eseguire calcoli basati su settimana.
Annotazioni
È necessario impostare la tabella come tabella delle date per scenari specifici.
Intelligenza temporale classica
Questa opzione richiede di avere una tabella data nel modello e di impostarla di conseguenza. Successivamente, è possibile usare le funzioni di intelligenza temporale e fare riferimento alla tabella delle date. Ad esempio, se nel modello è presente una tabella data denominata Date impostata come tabella data, che contiene una colonna Date, è possibile usare:
SAMEPERIODLASTYEAR ( 'Date'[Date] )
Anche se si tratta di un approccio rapido e semplice, esistono molti svantaggi rispetto all'approccio basato sul calendario:
- è necessario impostare la tabella delle date
- funziona solo con i modelli con almeno una tabella data dedicata
- Le colonne di data utilizzate non devono contenere date mancanti tra la prima e l'ultima data. Se sono presenti date mancanti tra le prime e le ultime date, viene generato un errore.
- è meno flessibile perché è ottimizzato per i calendari gregoriani o spostati, ad esempio gli anni fiscali che iniziano il 1° luglio, ma seguono comunque un calendario gregoriano
- non fornisce calcoli basati su settimana
- in scenari specifici, i calcoli basati sul tempo non funzionano correttamente.
Annotazioni
È consigliabile usare l'approccio avanzato basato sul calendario .
Intelligenza temporale basata sul calendario (anteprima)
I calendari sono definizioni di metadati aggiunte a una tabella per indicare quali colonne della tabella rappresentano gli attributi di tempo. È possibile definire uno o più calendari in qualsiasi tabella del modello. Dopo aver definito il calendario nel modello, è possibile farvi riferimento nelle funzioni di analisi temporale. Ad esempio, ecco come calcolare un anno totale fino alla data di vendita usando un calendario fiscale definito:
TOTALYTD ( [Sales], 'Fiscal Calendar' )
Vantaggi dell'intelligenza temporale basata sul calendario
I principali vantaggi dell'intelligenza temporale basata sul calendario sono:
- Funziona con qualsiasi calendario
- Date di tipo sparse
- Calcoli basati su settimana
- Miglioramenti delle prestazioni
Funziona con qualsiasi calendario
I calendari offrono la massima flessibilità per decidere come dividere il tempo in anni, trimestri, mesi e settimane. È possibile, ad esempio, definire i calendari che seguono questi modelli:
- Gregorian
- Gregoriano spostato
- Retail (445, 454, 544 pattern)
- 13 mesi
- Lunare
Le possibilità sono infinite perché non esiste alcun presupposto predefinito da Power BI sul modo in cui il calendario è strutturato. L'intelligenza temporale basata sul calendario non presuppone le date sottostanti. Tutti i calcoli usano esattamente i dati sottostanti as-is.
Date di tipo sparse
L'intelligence per le gerarchie temporali classiche richiede che la colonna data specificata sia completa. Se sono presenti date mancanti tra la prima e l'ultima data, viene generato un errore. Le funzioni di intelligenza temporale basate sul calendario non hanno un requisito di questo tipo. Operano invece sulle date così come sono. Anche se è comunque consigliabile avere una tabella di calendario completa e dedicata, non è più necessario. Ad esempio, se tutti i punti vendita vengono chiusi durante il fine settimana, è possibile ignorare i giorni del fine settimana perché non hanno vendite. Supponendo che il fine settimana sia sabato e domenica, è ora possibile usare PREVIOUSDAY con un calendario basato su una tabella che non include voci per il fine settimana per passare da lunedì direttamente a venerdì.
Calcoli basati su settimana
L'intelligenza temporale basata su calendario fornisce direttamente funzioni DAX che operano a una granularità settimanale. Ad esempio, i totali da settimana a data possono essere calcolati direttamente usando TOTALWTD:
TOTALWTD ( Expr, CalendarName )
Miglioramenti delle prestazioni
Alcuni scenari possono presentare prestazioni migliori quando si confronta una funzione di intelligenza temporale basata su calendario con la sua controparte classica. Ad esempio, un oggetto visivo raggruppato in base alla settimana ed esegue un calcolo da anno a data utilizzando TOTALYTD ( ..., CalendarName ) dovrebbe in genere essere eseguito più rapidamente rispetto a se fosse stata usata la controparte classica, TOTALYTD ( ..., TableName[DateColumnName] ), . Per informazioni dettagliate sul motivo per cui questo problema può verificarsi, vedere la sezione Cancellazione del contesto .
Abilitare l'anteprima avanzata di Intelligenza Temporale DAX
Per iniziare, è prima necessario abilitare la funzionalità di anteprima Intelligenza Temporale DAX Avanzata.
- In Power BI Desktop, vai su File > Opzioni e impostazioni > Opzioni > Funzionalità di anteprima.
- Selezionare l'anteprima Funzionalità DAX avanzate di intelligenza temporale.
- Selezionare OK
- Riavviare Power BI Desktop
Gestire i calendari
Per gestire un calendario, fare clic con il pulsante destro del mouse sulla tabella contenente il calendario o su cui si desidera definire il calendario e scegliere Opzioni Calendario oppure selezionare Opzioni Calendario nella barra multifunzione Strumenti tabella dopo aver selezionato la tabella:
In alternativa, è possibile usare strumenti esterni o la visualizzazione TMDL per definire un calendario. Per altre informazioni, vedere lo script TMDL.
I calendari vengono visualizzati anche in Esplora modelli nella tabella in cui sono definiti:
Schermata delle opzioni del calendario
La schermata delle opzioni del calendario mostra i calendari definiti nella tabella selezionata. A questo punto è possibile:
- creare un nuovo calendario selezionando Nuovo calendario
- modificare un calendario esistente selezionando Modifica
- eliminare un calendario esistente selezionando Elimina
- impostare la tabella come tabella di data selezionando Contrassegna come tabella di data
Assegnare categorie di colonne
La definizione di un calendario comporta l'assegnazione di un nome e l'assegnazione di colonne alle categorie. Ogni categoria rappresenta un'unità di tempo e categorie di colonne specifiche sono disponibili. Per salvare il calendario, è necessario assegnare almeno una colonna primaria a una categoria. Ogni categoria deve avere una colonna primaria e può avere zero o più colonne associate. Ogni volta che le colonne associate a una categoria sono nel contesto, Power BI sa quale unità di tempo presentano. Inoltre, per alcune funzioni, TOTALMTD ad esempio Power BI, usa la colonna primaria mappata alla categoria pertinente nel calendario a cui si fa riferimento per eseguire il calcolo richiesto. Per assegnare una colonna a una categoria, selezionare la categoria dal menu Aggiungi categoria e quindi selezionare le colonne primarie e facoltative associate.
Categorie di colonne disponibili
La tabella seguente illustra le categorie disponibili. La tabella fornisce anche valori di esempio e cardinalità per i calendari gregoriani.
Le categorie sono suddivise in due gruppi:
- Completamento. I dati nelle colonne assegnate alle categorie Complete sono sufficienti per identificare in modo univoco il periodo di tempo.
- Parziale. I dati nelle colonne assegnate alle categorie Parziali non sono sufficienti per identificare in modo univoco il periodo di tempo.
| Categoria | Description | TIPO | Cardinalità di esempio in un calendario gregoriano | Valori di colonna di esempio in un calendario gregoriano |
|---|---|---|---|---|
| Anno | L'anno | Completo |
Y = numero di anni |
2024, 2025 |
| Trimestre | Il trimestre compreso l'anno | Completo | 4*Y |
1° trimestre 2024, 2° trimestre 2025 |
| Trimestre dell'anno | Trimestre dell'anno | Parziale | 4 |
Trimestre 1, YQ1, Q1, Trimestre 2 |
| Mese | Il mese compreso l'anno | Completo | 12*Y ≤ value ≤ 13*Y |
Gennaio 2023, febbraio 2024 |
| Mese dell'anno | Mese dell'anno | Parziale | 12 |
Gennaio, Anno Mese 11, YM11, M11, 11 |
| Mese del trimestre | Il mese del trimestre | Parziale | 3 |
1, QM2 |
| Week | La settimana che include l'anno | Completo | 52 ≤ value ≤ 53 |
Settimana 50 2023, W50-2023, 2023-W50 |
| Settimana dell'anno | La settimana dell'anno | Parziale | 52 |
Settimana 50, W50, 50 |
| Settimana del trimestre | La settimana del trimestre | Parziale | 13 |
Trimestre settimana 10, QW10, 10 |
| Settimana del mese | Settimana del mese | Parziale | 5 |
Settimana mensile 2, MW2, 2 |
| Date | La data | Completo | 365*Y ≤ value ≤ 366*Y |
12/31/2025 |
| Giorno dell'anno | Il giorno dell'anno | Parziale | 365 ≤ value ≤366 |
365, D1 |
| Giorno del trimestre | Il giorno del trimestre | Parziale | 92 |
Giorno di Quarto 10, QD2, 50 |
| Giorno del mese | Giorno del mese | Parziale | 31 |
Giorno mese 30, MD10, 30 |
| Giorno della settimana | Il giorno della settimana | Parziale | 7 |
Giorno della settimana 5, WD5, 5 |
Oltre a queste categorie, è possibile associare un numero qualsiasi di colonne nella tabella alla categoria Relativa al tempo . Questa operazione non è attualmente possibile nelle opzioni del calendario, ma può essere eseguita solo usando strumenti esterni o TMDL.
Annotazioni
Il contesto in tutte le colonne assegnate alla categoria relativa al tempo viene rimosso durante l'esecuzione di calcoli in tutte le funzioni ad eccezione DATEADD di e SAMEPERIODLASTYEAR. Qualsiasi contesto sulle colonne che fanno parte della tabella in cui è definito il calendario, ma non sono etichettate in quel calendario, viene mantenuto.
Annotazioni
Si consiglia di associare solo le colonne del calendario che si desidera utilizzare nei calcoli di intelligenza temporale.
Colonne primarie e associate
La colonna primaria è obbligatoria per ogni categoria. Ogni volta che la colonna o le colonne associate assegnate alla stessa categoria nel calendario a cui si fa riferimento sono nel contesto o la categoria è necessaria per eseguire un calcolo, Power BI usa la colonna primaria. Inoltre, le colonne primarie vengono usate per l'ordinamento. Se i valori nella colonna primaria non consentono l'ordinamento come previsto, è possibile configurare la colonna primaria per l'ordinamento in base a un'altra colonna o usare un'altra colonna e impostare la colonna originale come colonna associata. Ad esempio, una colonna con dati testuali contenenti numero mese e anno in un formato mm-yyyy (ovvero , 01-2024, 02-2024e così via) non verrà ordinata correttamente tra più anni, ma una colonna che usa il yyyy-mm formato sarà:
È possibile avere zero o più colonne associate assegnate a una categoria.
Validation
È importante convalidare e testare il calendario in modo da soddisfare le proprie esigenze. Le validazioni offerte in Power BI includono sia le validazioni in tempo reale che le validazioni offline.
Annotazioni
È possibile salvare il calendario nonostante gli errori di convalida offline, ma è consigliabile risolverli per primi. Per salvare, è necessario correggere gli errori di convalida in tempo reale.
Convalide in tempo reale
Le convalide in tempo reale eseguite nei calendari sono:
- Nome calendario univoco. Ogni calendario deve avere un nome univoco nel modello semantico.
- Singola associazione per calendario. Una colonna non può appartenere a più di una categoria nello stesso calendario.
- Univocità del periodo. Le categorie assegnate devono identificare in modo univoco il periodo.
- Categorizzazione coerente. Ciò garantisce che le colonne siano associate alla stessa categoria tra calendari.
Unicità del periodo
Deve essere sempre presente un percorso per identificare in modo univoco il periodo per le categorie assegnate.
Ogni volta che si aggiunge una categoria parziale, Power BI verifica che una combinazione corrispondente di categorie complete o parziali sia contrassegnata nello stesso calendario. In caso contrario, viene visualizzato un avviso.
Ad esempio, quando si configura un calendario per i calcoli basati su settimana, assicurarsi di assegnare almeno una colonna primaria a uno dei set di categorie seguenti:
- Week
- Settimana dell'anno, anno
- Settimana del trimestre, trimestre
- Settimana del trimestre, trimestre dell'anno, anno
- Settimana del mese, mese
- Settimana del mese, mese dell'anno, anno
- Settimana del mese, mese del trimestre, trimestre
- Settimana del mese, mese del trimestre, trimestre dell'anno, anno
Categorizzazione coerente
Le colonne devono avere una categoria coerente tra i calendari. Non è possibile assegnare la stessa colonna a categorie diverse, ad esempio Year, Quarter of Year o time-related in calendari separati.
Validazioni offline
Le convalide offline possono richiedere potenzialmente molto tempo durante l'accesso ai dati della tabella. Di conseguenza, non vengono eseguiti automaticamente in contrasto con le convalide in tempo reale. Per eseguire le convalide, selezionare Convalida dati:
Le convalide offline controllano le regole seguenti e restituisce un avviso se le regole sono invalidate nel calendario:
- una colonna associata a una categoria non ha valori vuoti.
- le categorie di livello superiore e inferiore hanno un rapporto di cardinalità uno-a-molti. Ad esempio, le colonne associate alla categoria Anno devono avere una cardinalità uno-a-molti con le colonne associate alla categoria Mese.
- le colonne associate alle categorie nello stesso livello hanno un rapporto di cardinalità uno-a-uno. Ad esempio, le colonne associate alla categoria Mese devono avere una cardinalità uno-a-uno con le combinazioni delle colonne associate alle categorie Mese dell'Anno e Anno.
- le colonne primarie e associate assegnate alla stessa categoria hanno un rapporto di cardinalità uno-a-uno. Ad esempio, quando viene assegnato alla categoria "Month", una colonna principale "Month" e una colonna associata "EnglishMonthName" devono avere una cardinalità uno a uno.
Lavorare con i calendari
Dopo aver definito un calendario, è possibile farvi riferimento nelle funzioni di analisi temporale. Ad esempio, la misura seguente calcola il valore totale mensile della quantità totale rispetto al calendario ISO-454 :
Total Quantity MTD ISO-454 = TOTALMTD ( [Total Quantity], 'ISO-454' )
Se il calendario non è definito e viene restituito l'errore:
Anche se il calendario è definito, tuttavia, una misura potrebbe comunque restituire un errore. Ciò si verifica se la funzione usata prevede che una categoria sia presente nel calendario e il calendario non dispone di tale categoria. Si supponga, ad esempio, TOTALWTD che le categorie specifiche siano presenti nel calendario. Se non lo sono, viene restituito un errore:
Funzioni di intelligenza temporale e categorie richieste
Molte funzioni di time intelligence richiedono l'inserimento di categorie sufficienti nel calendario di riferimento nella chiamata di funzione per permettere a Power BI di identificare un'unità di tempo unica. In altre parole, Power BI deve essere in grado di "camminare" dal livello in cui viene eseguito il calcolo fino a un singolo anno. Ad esempio, quando si esegue un calcolo sui trimestri, usando TOTALQTD, è possibile assegnare la categoria Quarter, oppure assegnare sia Trimestre dell'Anno che Anno nel calendario, come stabilito dalla convalida dell'univocità del periodo.
Annotazioni
Per alcune funzioni il nome è indicativo del livello di funzionamento del calcolo ( ad esempio , ), mentre per altri dipende dai parametri e dal contesto (ad esempio TOTALYTD, DATEADD).
Pulizia del contesto
Le funzioni di intelligenza temporale operano a partire da un punto nel tempo e poi eseguono un'operazione su di esso per ottenere un punto nel tempo diverso. Naturalmente, il punto iniziale nel tempo può essere in conflitto con questo risultato, causando così un'intersezione del contesto di filtro che per impostazione predefinita, produrrebbe risultati parziali o vuoti. Si consideri ad esempio lo scenario seguente.
Definizione del calendario
È disponibile un semplice calendario gregoriano che contrassegna tre categorie, definite come:
| Categoria | Colonna primaria |
|---|---|
| Anno | Anno |
| Mese dell'anno | MeseDellAnno |
| Trimestre | Trimestre |
Definizioni delle misure
Vengono definite due misure di base: una per calcolare le vendite totali e un'altra per calcolare le vendite totali del trimestre precedente:
[TotalSales] = CALCULATE ( SUM( FactInternetSales[SalesAmount] ) )
[LastQuarterSales] = CALCULATE ( [TotalSales], DATEADD( GregorianCalendar, -1, QUARTER ) )
Esempio: Funzionamento della cancellazione del contesto
Il nostro oggetto visivo tabella esplora i dati con una granularità a livello mensile utilizzando le colonne Year e MonthOfYear.
| Anno | MeseDellAnno | TotalSales | LastQuarterSales |
|---|---|---|---|
| 2011 | 1 | 10 | |
| 2011 | 2 | 20 | |
| 2011 | 3 | 30 | |
| 2011 | 4 | 40 | 10 |
| 2011 | 5 | 50 | 20 |
In questa tabella la riga in grassetto viene visualizzata a livello di mese per il mese di aprile 2011. Pertanto, tutte le misure in questa riga verranno valutate nel contesto di filtro [Year] == 2011 e [MonthOfYear] == 4.
Come previsto, TotalSales viene calcolato come vendite totali per aprile 2011.
LastQuarterSales calcola in modo analogo TotalSales, ma ha fornito un filtro aggiuntivo fornito dalla DATEADD funzione basata sul calendario.
Per questa riga, DATEADD avrebbe un punto di partenza iniziale di aprile 2011 e fornirebbe il momento nel tempo di esattamente un trimestre fa: gennaio 2011. Di conseguenza, è possibile che questo totalSales venga calcolato nei due contesti di filtro seguenti:
- Fornito dalle colonne di navigazione della riga corrente:
{ [Year] == 2011, [MonthOfYear] == 4 }(equivalente ad aprile 2011) - Fornito dal DATEADD filtro:
{ [Year] == 2011, [MonthOfYear] == 1 }(equivalentemente, gennaio 2011)
Chiaramente, questi due contesti di filtro sono in conflitto: non è possibile valutare le vendite totali date il mese corrente come gennaio 2011 e aprile 2011. Tale intersezione non produrrebbe risultati.
Tuttavia, questo non è ciò che si verifica. Invece, in base alla definizione del calendario, le funzioni di intelligenza temporale basate sul calendario identificano le colonne delle categorie che possono causare conflitti, in seguito all'operazione temporale eseguita dalla funzione. In questo caso, DATEADD esegue uno spostamento a livello Trimestre. La funzione identifica che le categorie Year e Month of Year possono cambiare in seguito a una modifica nelle colonne della categoria Quarter . La funzione cancella quindi il contesto di filtro in tutte le colonne primarie e associate contrassegnate con tali categorie.
In altre parole, è possibile dire che le categorie Year e Month of Year sono dipendenze della categoria Quarter . Al contrario, possiamo dire che la categoria Quarter è dipendente dalle categorie Year e Month of Year .
Funzionamento della cancellazione del contesto
Questo diagramma viene fornito per visualizzare meglio le dipendenze tra le diverse categorie temporali. Ogni categoria in questo reticolo rappresenta tutte le colonne (primarie e associate) contrassegnate con tale categoria. Le categorie sono connesse alle relative dipendenze tramite frecce. Ad esempio, "Mese" dipende da "Anno", "Trimestre dell'Anno", "Mese del Trimestre", "Trimestre" e "Mese dell'Anno".
Quando il contesto viene impostato su una colonna o il relativo ordinamento associato per colonna contrassegnato in un calendario, il contesto di filtro precedente viene cancellato in:
- Tutte le dipendenze di categoria di X. Questo può essere considerato come tutte le categorie sopra X.
- Tutte le sottocategorie di X e delle sue dipendenze (ovvero da 1. sopra). Questo può essere considerato come tutte le categorie sotto X e tutte le categorie in 1 sopra.
Annotazioni
La cancellazione del contesto viene eseguita sulle colonne contrassegnate in un calendario o nelle colonne di ordinamento associate, indipendentemente dal fatto che il contesto sia impostato usando funzioni di intelligenza temporale o in altro modo.
Colonne relative al tempo
La maggior parte delle funzioni di intelligenza temporale, ad eccezione di DATEADD e SAMEPERIODLASTYEAR, cancellerà il contesto di tutte le colonne correlate al tempo e le colonne di ordinamento associate.
Comportamento dei calendari incrociati
Se nella stessa tabella sono definiti più calendari, questi processi vengono completati per ogni calendario definito nella tabella. Ciò include la osservazione relativa alla cancellazione del contesto delle colonne correlate al tempo. In altre parole, si supponga che una tabella definisca tre calendari: Calendar1, Calendar2 e Calendar3. Se il contesto di filtro è impostato sulla categoria "X" in Calendar1, i processi precedenti vengono eseguiti in tutti e tre i calendari.
Esempio: filtro impostato su "Quarter"
Se il contesto di filtro è stato impostato nella categoria "Quarter", il processo sarà il seguente.
Prima di tutto, tutte le dipendenze della categoria "Quarter" sarebbero considerate.
Verranno quindi considerati tutti i dipendenti di "Quarter" e le relative dipendenze.
Infine, il risultato finale sarà il seguente. Tutte le categorie colorate rosse avrebbero il contesto di filtro precedente rimosso e il nuovo contesto è impostato su Quarter.
Script TMDL per i calendari
createOrReplace
table Date
lineageTag: xyz
column Date
dataType: dateTime
formatString: Long Date
lineageTag: abc
summarizeBy: none
sourceColumn: Date
column Year
dataType: string
lineageTag: abc
summarizeBy: none
sourceColumn: Year
annotation SummarizationSetBy = Automatic
column Month
dataType: string
lineageTag: def
summarizeBy: none
sourceColumn: Month
annotation SummarizationSetBy = Automatic
column MonthName
dataType: string
lineageTag: ghi
summarizeBy: none
sourceColumn: MonthName
sortByColumn: SortByMonth
changedProperty = SortByColumn
annotation SummarizationSetBy = Automatic
column DutchMonthName
dataType: string
lineageTag: jkl
summarizeBy: none
sourceColumn: DutchMonthName
annotation SummarizationSetBy = Automatic
column 'Holiday Name'
dataType: string
lineageTag: mno
summarizeBy: none
sourceColumn: Holiday Name
annotation SummarizationSetBy = Automatic
column IsWorkingDay
dataType: string
lineageTag: pqr
summarizeBy: none
sourceColumn: IsWorkingDay
annotation SummarizationSetBy = Automatic
...
calendar 'Demo Calendar'
lineageTag: def
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = month
primaryColumn: Month
associatedColumn: DutchMonthName
associatedColumn: MonthName
calendarColumnGroup
column: 'Holiday Name'
column: isWorkingDay
Annotazioni
Si noti che se non si specifica alcuna categoria per in calendarColumnGroup TMDL, le colonne vengono contrassegnate come correlate al tempo. In questo esempio , Holiday Name e isWorkingDay sono colonne correlate all'ora nel Calendario demo.
Mettere tutto insieme: esempi di spostamento del tempo
Alcune funzioni di intelligenza temporale spostano il contesto solo lateralmente, considerando tutte le colonne, mentre altre eseguono spostamenti gerarchici, mantenendo o cancellando il contesto in base al fatto che le colonne siano contrassegnate nel calendario. Le funzioni di intelligenza temporale possono essere suddivise in due gruppi in base al fatto che consentano cambiamenti gerarchici:
- Corretto. Le funzioni in questo gruppo sono DATEADD e SAMEPERIODLASTYEAR. Queste funzioni consentono solo turni temporali laterali e non restituiscono valori da un livello di dettaglio diverso.
- Flessibile. Questo gruppo contiene tutte le altre funzioni di intelligenza temporale. Queste funzioni consentono turni di tempo gerarchici e, a seconda dell'impostazione del calendario, possono restituire risultati da un livello di dettaglio diverso.
Per illustrare questi comportamenti, verrà illustrato un esempio usando un modello di dati semplice costituito da due tabelle, due calendari e cinque misure.
Tabelle e relazioni
Per questo esempio, è disponibile il modello di dati semplice seguente:
| Tabella | Colonne |
|---|---|
| Date | Anno, GiornoLavorativo, Data |
| Vendite | ChiaveOrdine, Quantità, DataOrdine |
Ecco alcuni esempi di righe nella tabella Date :
Ecco alcune righe di esempio nella tabella Sales :
Le tabelle Sales e Date sono relazionate su OrderDate e Date.
Calendars
Nella tabella Date sono stati definiti calendari con questi mapping:
| NomeCalendario | Categoria | Colonna primaria |
|---|---|---|
| Gregoriano | Anno | Anno |
| Date | Date | |
| GregorianWithWorkingDay | Anno | Anno |
| Date | Date | |
| Legato al tempo | IsWorkingDay |
La definizione TMDL equivalente di questi due calendari è:
ref table Date
calendar 'Gregorian'
lineageTag: xyz
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = date
primaryColumn: Date
calendar 'GregorianWithWorkingDay'
lineageTag: dc4fc383-1661-4112-8afb-930d324fbb6e
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = date
primaryColumn: Date
calendarColumnGroup
column: IsWorkingDay
Misure
Nella tabella Sales vengono definite le misure seguenti:
Total Quantity = SUM ( 'Sales'[Order Quantity] )
OneYearAgoQuantity =
CALCULATE ( [Total Quantity], DATEADD ( 'Gregorian', -1, YEAR ) )
OneYearAgoQuantityTimeRelated =
CALCULATE ( [Total Quantity], DATEADD ( 'GregorianWithWorkingDay', -1, YEAR ) )
FullLastYearQuantity =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'Gregorian', -1, YEAR ) )
FullLastYearQuantityTimeRelated =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR )
)
Esempio di spostamento laterale
Creiamo un elemento visivo che mostri Year, MonthOfYear, IsWorkingDay, Total Quantity, OneYearAgoQuantity e OneYearAgoQuantityTimeRelated per il 2024 e il 2025:
Tutti i valori per OneYearAgoQuantity e OneYearAgoQuantityTimeRelated per il 2025 corrispondono alla quantità totale di un anno precedente (2024), per lo stesso valore IsWorkingDay .
Ciò mostra che mantiene il contesto in qualsiasi colonna della tabella Date che contiene il calendario utilizzato indipendentemente dal fatto che DATEADD non sia contrassegnato o se è contrassegnato come correlato all'ora nel calendario. Poiché nelle definizioni delle misure è stato richiesto DATEADD di tornare indietro di un anno, l'unica colonna il cui contesto è stato spostato è la colonna associata alla categoria Year. Che la colonna IsWorkingDay fosse contrassegnata nel calendario come correlata al tempo o non fosse contrassegnata affatto non cambiava il risultato. L'unica altra funzione che mostra questo comportamento è SAMEPERIODLASTYEAR.
Esempio di spostamento gerarchico
Si esaminerà ora un esempio in cui se una colonna viene contrassegnata come correlata al tempo o meno cambia effettivamente il risultato.
A questo scopo, verrà ricreato lo stesso oggetto visivo dell'esempio precedente, ma questa volta useremo le misure FullLastYearQuantity e FullLastYearQuantityTimeRelated:
Ciò mostra che PARALLELPERIOD mantiene il contesto per le colonne non contrassegnate nel calendario, ma cancella il contesto per quelli contrassegnati come correlati al tempo. FullLastYearQuantity usava il calendario gregoriano in cui IsWorkingDay non veniva contrassegnato nel calendario, mentre FullLastYearQuantityTimeRelated usava il calendario GregorianWithWorkingDay in cui IsWorkingDay veniva contrassegnato come correlato al tempo. Tutte le funzioni di analisi temporale tranne DATEADD e SAMEPERIODLASTYEAR funzionano in questo modo.
Bonus: se si vuole forzare queste funzioni a mantenere il contesto anche per le colonne correlate al tempo, è possibile usare VALUES:
FullLastYearQuantityTimeRelatedOverride =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR ), VALUES('Date'[IsWorkingDay]) )
In questo caso, restituisce FullLastYearQuantityTimeRelatedOverride gli stessi risultati di FullLastYearQuantity.
Conclusione
L'esempio dettagliato sopra mostra che diverse funzioni di intelligenza temporale si comportano in modo diverso a seconda che le colonne siano contrassegnate come relative al tempo nel calendario. DATEADD e SAMEPERIODLASTYEAR eseguono solo spostamenti temporali laterali. Tutte le altre funzioni di intelligenza temporale consentono spostamenti gerarchici nel tempo.
Usare DATEADD con i calendari
La DATEADD funzione dispone di parametri specifici che consentono un controllo con granularità fine sulla modalità di esecuzione dei turni quando la selezione si trova su un livello più granulare rispetto al livello di spostamento indicato dal interval parametro in DATEADD. Ciò si verifica, ad esempio, se vengono visualizzati i dati sul livello di data, ma si imposta il interval parametro su DATEADDMONTH. Ad esempio, in un calendario gregoriano, quando si sposta un periodo compreso tra il 3 marzo e il 10 di un mese comporterà il 3 aprile e il 10. Tuttavia, poiché i mesi nei calendari gregoriani variano in lunghezza, ciò può causare ambiguità durante lo spostamento. Di seguito sono riportati alcuni scenari di esempio basati su un calendario gregoriano:
Passare da un periodo più breve a un periodo più lungo
Ad esempio, spostandosi in avanti di un mese con una selezione in febbraio, quindi marzo diventa il mese di destinazione.
È possibile usare il extension parametro per influenzare il modo in cui viene eseguito il turno:
| Valore del parametro di estensione | Description | Result |
|---|---|---|
precise |
In questo modo l'intervallo di date originale viene mantenuto rigorosamente. | Il 25-28 febbraio viene spostato a marzo 25-28. |
extended |
Consente alla finestra di espandersi verso la fine del mese. | Il 25-28 febbraio viene spostato a marzo 25-31. |
Passare da un periodo più lungo a un periodo più breve
Ad esempio, spostandosi indietro di un mese con una selezione nel mese di marzo, quindi il mese di destinazione è febbraio.
È possibile usare il truncation parametro per influenzare il modo in cui viene eseguito il turno:
| Valore del parametro di troncamento | Description | Result |
|---|---|---|
anchored |
Ancora il risultato all'ultima data valida del mese con meno giorni. | Il 31 marzo viene spostato al 28 febbraio (o 29 nell'anno bisestile). |
blank |
Quando una data spostata non esiste, restituisce vuoto. | Lo spostamento del 31 marzo indietro di un mese restituisce vuoto (dal 31 febbraio non esiste). |
Considerazioni sull'uso dell'intelligenza temporale basata sul calendario
- L'esecuzione di un calcolo di time intelligence su una tabella dei fatti che definisce un calendario ed è soggetta a regole di sicurezza a livello di riga (RLS) può portare a risultati imprevisti.
- Le prestazioni di questa funzionalità di anteprima non sono rappresentative del prodotto finale.
- Non è ancora possibile creare calendari nel servizio Power BI.
- Non è consigliabile usare tabelle di data/ora automatica con calendari personalizzati.
- Non è possibile usare calendari con modelli connessi o compositi in tempo reale.
- Si consiglia di associare solo le colonne del calendario che si desidera utilizzare nei calcoli di intelligenza temporale.
- I calendari sono soggetti a convalide in tempo reale e offline . È possibile salvare il calendario nonostante gli errori di convalida offline, ma è consigliabile risolverli per primi. Per salvare, è necessario correggere gli errori di convalida in tempo reale.
- Ogni calendario deve avere un nome univoco all'interno del modello di dati
- Una singola tabella può contenere più calendari
- La tabella contenente il calendario deve contenere meno di 200 colonne. Se la tabella contiene più di 20.000 righe, le convalide non saranno disponibili, ma è comunque possibile aggiungere un calendario.
- Un calendario deve assegnare almeno una colonna primaria a una categoria
- Un calendario può assegnare solo colonne dalla propria tabella alle categorie
- Ogni categoria deve avere una colonna primaria e può avere zero o più colonne associate assegnate
- DATEADD ha nuovi parametri per controllare l'estensione e il comportamento dell'estensione, che non sono riconosciuti in IntelliSense.
- È possibile eseguire il mapping di una determinata colonna a una sola categoria
- Non è possibile annidare funzioni di intelligenza temporale che utilizzano calendari. Ad esempio, l'istruzione DAX seguente non è supportata:
ThisIsNotSupported = PREVIOUSDAY ( PREVIOUSMONTH( 'Calendar' ) )
In alternativa, è possibile eseguire le operazioni seguenti:
ThisWorks = CALCULATETABLE ( PREVIOUSDAY ( 'Calendar' ), PREVIOUSMONTH( 'Calendar' ) )
Creare una tabella data usando gli strumenti predefiniti
Gli esempi seguenti creano una tabella data dal 1° gennaio 2010 al 31 dicembre 2030 usando Power Query M o DAX. Includere le seguenti colonne: Anno, Numero del mese, Nome del mese, Anno mese, Trimestre, Trimestre dell’anno, Giorno e Data.
Power Query M
let
StartDate = #date(2010, 1, 1),
EndDate = #date(2030, 12, 31),
NumberOfDays = Duration.Days(EndDate - StartDate) + 1,
DateList = List.Dates(StartDate, NumberOfDays, #duration(1,0,0,0)),
DateTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}),
AddYear = Table.AddColumn(DateTable, "Year", each Date.Year([Date]), Int64.Type),
AddMonthNumber = Table.AddColumn(AddYear, "Month Number", each Date.Month([Date]), Int64.Type),
AddMonthName = Table.AddColumn(AddMonthNumber, "Month Name", each Date.ToText([Date], "MMMM"), type text),
AddMonthYear = Table.AddColumn(AddMonthName, "Month Year", each Date.ToText([Date], "MMM yyyy"), type text),
AddQuarter = Table.AddColumn(AddMonthYear, "Quarter", each "Q" & Text.From(Date.QuarterOfYear([Date])), type text),
AddYearQuarter = Table.AddColumn(AddQuarter, "Year Quarter", each Text.From(Date.Year([Date])) & " Q" & Text.From(Date.QuarterOfYear([Date])), type text),
AddDay = Table.AddColumn(AddYearQuarter, "Day", each Date.Day([Date]), Int64.Type)
in
AddDay
DAX
DateTable =
ADDCOLUMNS (
CALENDAR ( DATE ( 2010, 1, 1 ), DATE ( 2030, 12, 31 ) ),
"Year", YEAR ( [Date] ),
"Month Number", MONTH ( [Date] ),
"Month Name", FORMAT ( [Date], "MMMM" ),
"Month Year", FORMAT ( [Date], "MMM YYYY" ),
"Quarter", "Q" & FORMAT ( [Date], "Q" ),
"Year Quarter",
FORMAT ( [Date], "YYYY" ) & " Q"
& FORMAT ( [Date], "Q" ),
"Day", DAY ( [Date] ),
"Date", [Date]
)
Per altre informazioni e altre opzioni, vedere Tabelle data.
Contenuti correlati
Per altre informazioni correlate a questo articolo, vedere le risorse seguenti: