Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
aplica-se a:
coluna calculada
tabela calculada
medida
cálculo visual
Nota
Essa função é desencorajada para uso em cálculos visuais pois provavelmente retorna resultados sem sentido.
Para entrada de coluna de data, retorna uma tabela que contém uma coluna de datas que começa com uma data de início especificada e continua para o número especificado e o tipo de intervalos de data.
Para entrada de calendário, retorna uma tabela que começa com uma data de início especificada e continua para o número e o tipo de intervalos de data especificados. A tabela contém todas as colunas marcadas primárias e colunas relacionadas a todos os tempos.
Essa função é adequada para passar como um filtro para a função CALCULATE. Use-a para filtrar uma expressão por intervalos de data padrão, como dias, meses, trimestres ou anos.
Sintaxe
DATESINPERIOD(<dates> or <calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])
Parâmetros
| Prazo | Definição |
|---|---|
dates or calendar |
Uma coluna que contém datas ou uma referência de calendário |
start_date |
Uma expressão de data. Se a sintaxe do calendário for usada, use o mesmo tipo de dados que a coluna primária marcada para a categoria Dia. |
number_of_intervals |
Um inteiro que especifica o número de intervalos a serem adicionados ou subtraídos das datas. |
interval |
O intervalo pelo qual deslocar as datas. O valor do intervalo pode ser um dos seguintes: DAY, , WEEK, MONTH, e QUARTERYEAR. A semana só poderia ser usada com o calendário. |
endbehavior |
Aplicável somente quando uma referência de calendário é fornecida. Optional. Controla como a data de término é alinhada quando o intervalo de destino é maior que o intervalo de origem. Os valores válidos são: PRECISO (padrão) e ENDALIGNED. |
Valor de retorno
Para entrada de coluna de data, uma tabela que contém uma única coluna de valores de data.
Para entrada de calendário, uma tabela que contém todas as colunas marcadas primárias e colunas relacionadas a todos os tempos.
Observações
No caso de uso mais comum,
datesé uma referência à coluna de data de uma tabela de data marcada.Se o número especificado para
number_of_intervalsfor positivo, as datas serão movidas para frente no tempo; se o número for negativo, as datas serão alteradas para trás no tempo.O parâmetro
intervalé uma enumeração. Os valores válidos sãoDAY,WEEK,MONTH,QUARTEReYEAR. Como é uma enumeração, os valores não são passados como cadeias de caracteres. Portanto, não coloque-os entre aspas.Quando
endbehaviorfor fornecido (somente inteligência de tempo do calendário), DATESINPERIOD encaminha o valor para DATEADDo parâmetro 'sExtension. Consulte Noções básicas sobre endbehavior para obter exemplos detalhados.Para a entrada da coluna de data, a tabela retornada só pode conter datas armazenadas na
datescoluna. Portanto, por exemplo, se a colunadatescomeçar a partir de 1º de julho de 2017 e o valorstart_datefor 1º de julho de 2016, a tabela retornada começará a partir de 1º de julho de 2017.Para entrada de calendário, se a data de entrada não for encontrada na coluna de dia marcada, o resultado será indefinido. Forneça uma entrada de data válida.
Para entrada de calendário, use o mesmo tipo de dados e formato da coluna de dia marcada para a data de início. Por exemplo, se a coluna usar o formato YYYY-Sn-Qn-Mnn-Wnn-Dnn (por exemplo, "2014-S2-Q4-M11-W45-D03"), a data de início deverá seguir o mesmo formato (por exemplo, "2015-S2-Q4-M11-W45-D03"). Caso contrário, o comportamento é indefinido.
Essa função não tem suporte para uso no modo DirectQuery quando usada em colunas calculadas ou regras de RLS (segurança em nível de linha).
Exemplo
A definição de medida da tabela Sales a seguir usa a função DATESINPERIOD para calcular a receita do ano anterior (PY).
Observe que a fórmula usa a função MAX. Essa função retorna a data mais recente que está no contexto do filtro. Portanto, a função DATESINPERIOD retorna uma tabela de datas a partir da data mais recente do ano passado.
Exemplos neste artigo podem ser usados com o modelo adventure works dw 2020 power bi desktop de exemplo. Para obter o modelo, consulte DAX modelo de exemplo.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)
Considere que o relatório é filtrado até o mês de junho de 2020. A função MAX retorna 30 de junho de 2020. A função DATESINPERIOD retorna um intervalo de datas de 1º de julho de 2019 a 30 de junho de 2020. É um ano de valores de data a partir de 30 de junho de 2020 para o último ano.
Exemplo de inteligência de tempo baseada em calendário
A definição de medida da tabela Sales a seguir usa a função DATESINPERIOD para calcular a receita do ano anterior (PY).
Observe que a fórmula usa a função MAX. Essa função retorna a data mais recente que está no contexto do filtro. Portanto, a DATESINPERIOD função retorna colunas primárias a partir da data mais recente do ano passado. DateKey é usado como um exemplo para mostrar que a categoria "Dia" pode ser marcada com uma coluna que não é tipada em data.
Exemplos neste artigo podem ser usados com o modelo adventure works dw 2020 power bi desktop de exemplo. Para obter o modelo, consulte DAX modelo de exemplo.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)
Considere que o relatório é filtrado até o mês de junho de 2020. A função MAX retorna 30 de junho de 2020. Em DATESINPERIOD seguida, a função retorna um intervalo de 1º de julho de 2019 a 30 de junho de 2020. É um ano a partir de 30 de junho de 2020 para o último ano.
Noções básicas sobre o parâmetro endbehavior para inteligência de tempo do calendário
Internamente, DATESINPERIOD calcula o limite final chamando DATEADD com o mesmo intervalo, número de intervalos e endbehavior que foram passados para DATESINPERIOD. Quando number_of_intervals é negativo (comum ao rolar uma janela para trás), a função retorna o intervalo(endDate, startDate], onde endDate é a data retornada DATEADD depois de deslocar o contexto do calendário que termina startDate<number_of_intervals><interval> usando .<endbehavior> Para valores positivos, o intervalo retornado é [startDate, endDate).
-
PRECISEmantém o valor exato retornado por DATEADD. -
ENDALIGNEDsegue a DATEADDEndAlignedsemântica, movendo o limite para o final do período de destino quando a seleção de origem já atingiu seu próprio fim. Isso é útil quando o contexto de filtro já termina no último dia de um período e você deseja que uma janela com aparência anterior (por exemplo, seis meses) use o último dia do período deslocado como seu limite.
Exemplo com EndAligned
EndAlignedTest =
CALCULATE (
COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
)
Essa medida conta os nomes de mês distintos nos últimos seis meses em relação ao contexto atual. Com EndAligned, a janela mantém o limite no final do mês deslocado quando o contexto já termina em um limite de mês, impedindo as datas adicionais à direita que Precise incluiriam (por exemplo, Feb 28 de outra forma mudaria para Aug 28, puxando Aug 29–31 e expandindo efetivamente o intervalo para sete meses). A EndAligned configuração mantém a contagem em seis nesse cenário.
A comparação a seguir pressupõe que o contexto de filtro atual termina em 28 de fevereiro de 2023 e as chamadas DATESINPERIOD(..., -6, MONTH, <endbehavior>)de expressão. O intervalo funcional é (endDate, startDate], portanto, o endDate retornado por DATEADD é excluído enquanto startDate está incluído.
| endbehavior |
DATEADD endDate |
DATESINPERIOD gama | Nomes de mês retornados pela medida |
|---|---|---|---|
Precise |
2022-08-28 |
(2022-08-28, 2023-02-28] → 29 de agosto de 2022 – 28 de fevereiro de 2023 |
Ago, Sep, Out, Nov, Dez, Jan, Feb (7) |
EndAligned |
2022-08-31 |
(2022-08-31, 2023-02-28] → 1º de set de 2022 – 28 de fevereiro de 2023 |
Sep, Out, Nov, Dez, Jan, Feb (6) |
Diferenças no comportamento entre a inteligência de tempo clássica e de calendário
Internamente, DATESINPERIOD usa a mesma lógica DATEADD para determinar a data de término da data de início e, em seguida, calcula o intervalo. Alguns cenários podem produzir resultados diferentes ao comparar a inteligência de tempo clássica e de calendário. Por exemplo, em um ano lunar, DATEADD produz resultados diferentes na granularidade de data, portanto, o resultado também DATESINPERIOD será diferente. Na inteligência temporal baseada em calendário, a mudança de 29 de fevereiro de 2008 para trás um ano resulta em 1º de março de 2007, porque é tratada como o 60º dia do ano. Na inteligência temporal clássica, o mesmo turno retorna 28 de fevereiro de 2007. Como a data de DATESINPERIOD término é diferente, a saída também será diferente. A solução alternativa é usar DATEADD(Calendário, -<número de um ano>, mês) para calcular a data de término. Por exemplo, se um ano tiver 13 meses no calendário, use DATEADD(Calendário, -13, mês). Essa abordagem mudará por mês, então fevereiro de 2008 irá para fevereiro de 2007. Em seguida, escreva uma data personalizadaInPeriod com base na nova data de término.
Conteúdo relacionado
funções de inteligência de tempo (DAX)DAX (DATESBETWEEN)DAX)