Condividi tramite


DATESINPERIOD

Si applica a:colonna calcolatatabella calcolata calcolo visivomisura

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 sono DAY, WEEK, MONTH, QUARTER e YEAR. Poiché si tratta di un'enumerazione, i valori non vengono passati come stringhe. Quindi non racchiuderli tra virgolette.

  • Quando endbehavior viene specificato (solo business intelligence per le gerarchie temporali del calendario), DATESINPERIOD inoltra il valore al DATEADDparametro di Extension . 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 dates colonna. Ad esempio, se la colonna dates inizia dal 1° luglio 2017 e il valore start_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).

  • PRECISE mantiene il valore esatto restituito da DATEADD.
  • ENDALIGNED segue la DATEADDEndAligned semantica, 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.

funzioni di Business Intelligence per le gerarchie temporali (DAX)funzioni di data e ora (DAX)DATESBETWEEN (DAX)