Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Questa funzione è sconsigliata per l'uso nei calcoli visivi perché probabilmente restituisce risultati senza significato.
Per l'input della colonna data, restituisce una tabella contenente una colonna di date che inizia con una data di inizio specificata e continua per il numero e il tipo di intervalli di date specificati.
Per l'input del calendario, restituisce una tabella che inizia con una data di inizio specificata e continua per il numero e il tipo di intervalli di data specificati. La tabella contiene tutte le colonne con tag primarie e tutte le colonne correlate all'ora.
Questa funzione è adatta per passare come filtro alla funzione CALCULATE. Usarlo per filtrare un'espressione in base a intervalli di data standard, ad esempio giorni, mesi, trimestri o anni.
Sintassi
DATESINPERIOD(<dates> or <calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])
Parametri
| Termine | Definizione |
|---|---|
dates or calendar |
Colonna contenente date o riferimenti al calendario |
start_date |
Espressione di data. Se viene usata la sintassi del calendario, usare lo stesso tipo di dati della colonna primaria contrassegnata nella categoria Day. |
number_of_intervals |
Intero che specifica il numero di intervalli a cui aggiungere o sottrarre le date. |
interval |
Intervallo in base al quale spostare le date. Il valore per interval può essere uno dei seguenti: DAY, WEEK, MONTH, QUARTERe YEAR. Settimana può essere usata solo con il calendario. |
endbehavior |
Applicabile solo quando viene fornito un riferimento al calendario. Optional. Controlla la modalità di allineamento della data di fine quando l'intervallo di destinazione è più lungo dell'intervallo di origine. I valori validi sono: PRECISE (impostazione predefinita) e ENDALIGNED. |
Valore restituito
Per l'input della colonna data, una tabella contenente una singola colonna di valori di data.
Per l'input del calendario, una tabella che contiene tutte le colonne con tag primarie e tutte le colonne correlate.
Osservazioni
Nel caso d'uso più comune,
datesè un riferimento alla colonna data di una tabella data contrassegnata.Se il numero specificato per
number_of_intervalsè positivo, le date vengono spostate in avanti nel tempo; se il numero è negativo, le date vengono spostate indietro nel tempo.Il parametro
intervalè un'enumerazione . I valori validi sonoDAY,WEEK,MONTH,QUARTEReYEAR. Poiché si tratta di un'enumerazione, i valori non vengono passati come stringhe. Quindi non racchiuderli tra virgolette.Quando
endbehaviorviene specificato (solo business intelligence per le gerarchie temporali del calendario), DATESINPERIOD inoltra il valore al DATEADDparametro diExtension. Per esempi dettagliati, vedere Understanding endbehavior .See Understanding endbehavior for detailed examples.Per l'input della colonna data, la tabella restituita può contenere solo le date archiviate nella
datescolonna. Ad esempio, se la colonnadatesinizia dal 1° luglio 2017 e il valorestart_dateè 1 luglio 2016, la tabella restituita inizierà dal 1° luglio 2017.Per l'input del calendario, se la data di input non viene trovata nella colonna giorno con tag, il risultato non sarà definito. Specificare l'input di data valido.
Per l'input del calendario, usare lo stesso tipo di dati e lo stesso formato della colonna giorno con tag per la data di inizio. Ad esempio, se la colonna usa il formato YYYY-Sn-Qn-Mnn-Wnn-Dnn (ad esempio, "2014-S2-Q4-M11-W45-D03"), la data di inizio deve seguire lo stesso formato ,ad esempio "2015-S2-Q4-M11-W45-D03"). In caso contrario, il comportamento non è definito.
Questa funzione non è supportata per l'uso in modalità DirectQuery quando viene usata nelle colonne calcolate o nelle regole di sicurezza a livello di riga.
Esempio
La definizione di misura tabella Sales seguente usa la funzione DATESINPERIOD per calcolare i ricavi per l'anno precedente (PY).
Si noti che la formula usa la funzione MAX. Questa funzione restituisce la data più recente presente nel contesto del filtro. Pertanto, la funzione DATESINPERIOD restituisce una tabella di date che iniziano dall'ultima data dell'anno precedente.
Gli esempi in questo articolo possono essere usati con il modello adventure works DW 2020 di Power BI Desktop di esempio. Per ottenere il modello, vedere DAX modello di esempio.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)
Tenere presente che il report viene filtrato in base al mese di giugno 2020. La funzione MAX restituisce il 30 giugno 2020. La funzione DATESINPERIOD restituisce quindi un intervallo di date compreso tra il 1° luglio 2019 e il 30 giugno 2020. Si tratta di un anno di valori di data a partire dal 30 giugno 2020 per l'ultimo anno.
Esempio di Business Intelligence per le gerarchie temporali basate su calendario
La definizione di misura tabella Sales seguente usa la funzione DATESINPERIOD per calcolare i ricavi per l'anno precedente (PY).
Si noti che la formula usa la funzione MAX. Questa funzione restituisce la data più recente presente nel contesto del filtro. La funzione restituisce quindi DATESINPERIOD le colonne primarie a partire dall'ultima data dell'anno precedente. DateKey viene usato come esempio per indicare che la categoria "Day" può essere contrassegnata con una colonna che non è tipizzata da date.
Gli esempi in questo articolo possono essere usati con il modello adventure works DW 2020 di Power BI Desktop di esempio. Per ottenere il modello, vedere DAX modello di esempio.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)
Tenere presente che il report viene filtrato in base al mese di giugno 2020. La funzione MAX restituisce il 30 giugno 2020. La DATESINPERIOD funzione restituisce quindi un intervallo compreso tra il 1° luglio 2019 e il 30 giugno 2020. È un anno a partire dal 30 giugno 2020 per l'ultimo anno.
Informazioni sul parametro endbehavior per l'intelligence sulle gerarchie temporali del calendario
Internamente, DATESINPERIOD calcola il limite finale chiamando DATEADD con lo stesso intervallo, il numero di intervalli e endbehavior che sono stati passati in DATESINPERIOD. Quando number_of_intervals è negativo (comune quando si rotola una finestra all'indietro), la funzione restituisce l'intervallo (endDate, startDate], dove endDate è la data restituita da DATEADD dopo aver spostato il contesto del calendario che termina<interval>startDate<number_of_intervals>usando .<endbehavior> Per i valori positivi, l'intervallo restituito è [startDate, endDate).
-
PRECISEmantiene il valore esatto restituito da DATEADD. -
ENDALIGNEDsegue la DATEADDEndAlignedsemantica, spostando il limite alla fine del periodo di destinazione quando la selezione di origine ha già raggiunto la propria fine. Ciò è utile quando il contesto di filtro termina già l'ultimo giorno di un periodo e si desidera che una finestra di visualizzazione all'indietro (ad esempio, sei mesi) usi l'ultimo giorno del periodo spostato come limite.
Esempio con EndAligned
EndAlignedTest =
CALCULATE (
COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
)
Questa misura conta i nomi dei mesi distinti negli ultimi sei mesi rispetto al contesto corrente. Con EndAligned, la finestra mantiene il limite alla fine del mese spostato quando il contesto termina già in base al limite di un mese, impedendo le date finali aggiuntive che Precise includerebbero (ad esempio, in caso contrario, Feb 28 si sposta su Aug 28, trascinando ed espandendo Aug 29–31 in modo efficace l'intervallo a sette mesi). L'impostazione EndAligned mantiene il conteggio a sei in tale scenario.
Il confronto seguente presuppone che il contesto di filtro corrente termini il 28 febbraio 2023 e che l'espressione chiami DATESINPERIOD(..., -6, MONTH, <endbehavior>). L'intervallo funzionale è (endDate, startDate], quindi l'oggetto endDate restituito da DATEADD viene escluso mentre startDate è incluso.
| endbehavior |
DATEADD endDate |
DATESINPERIOD gamma | Nomi dei mesi restituiti dalla misura |
|---|---|---|---|
Precise |
2022-08-28 |
(2022-08-28, 2023-02-28] → 29 agosto 2022 - Febbraio 28 2023 |
Ago, Sep, Oct, Nov, Dec, Jan, Feb (7) |
EndAligned |
2022-08-31 |
(2022-08-31, 2023-02-28] → set 1 2022 – Febbraio 28 2023 |
Sep, Oct, Nov, Dec, Jan, Feb (6) |
Differenze di comportamento tra la funzionalità classica e l'intelligence per le gerarchie temporali del calendario
Internamente, DATESINPERIOD usa la stessa logica di DATEADD per determinare la data di fine dalla data di inizio e quindi calcola l'intervallo. Alcuni scenari possono produrre risultati diversi quando si confronta l'intelligenza temporale classica e quella del calendario. Ad esempio, in un anno lunare, DATEADD produce risultati diversi con la granularità della data, quindi anche il risultato di DATESINPERIOD sarà diverso. Nell'intelligenza temporale basata sul calendario, spostando il 29 febbraio 2008 indietro di un anno si ottiene il 1° marzo 2007, perché viene trattato come il 60° giorno dell'anno. Nell'intelligenza temporale classica, lo stesso turno restituisce il 28 febbraio 2007. Poiché la data di fine è diversa, anche l'output di DATESINPERIOD sarà diverso. La soluzione alternativa consiste nell'usare DATEADD(Calendario, numero< di un anno>, mese) per calcolare la data di fine. Ad esempio, se un anno ha 13 mesi nel calendario, usare DATEADD(Calendario, -13, mese). Questo approccio passerà di mese in modo che febbraio 2008 passerà a febbraio 2007. Scrivere quindi una data personalizzataInPeriod in base alla nuova data di fine.
Contenuto correlato
funzioni di Business Intelligence per le gerarchie temporali (DAX)funzioni di data e ora (DAX)DATESBETWEEN (DAX)