Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:
Coluna calculada
Tabela calculada
Medida
Cálculo visual
Observação
Esta 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 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 especificado e tipo de intervalos de data. A tabela contém todas as colunas marcadas primárias e todas as colunas relacionadas ao tempo.
Esta função é adequada para passar como um filtro para a função CALCULATE. Use-o 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
| Vigência | 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 da coluna principal 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 as datas devem ser alteradas. O valor para intervalo pode ser um dos seguintes: DAY, WEEK, MONTH, QUARTERe YEAR. A semana só podia ser usada com calendário. |
endbehavior |
Aplicável apenas quando é fornecida uma referência de calendário. Opcional. Controla como a data final é alinhada quando o intervalo de destino é maior do que o intervalo de origem. Os valores válidos são: PRECISE (por defeito) e ENDALIGNED. |
Valor de retorno
Para entrada de coluna de data, uma tabela contendo uma única coluna de valores de data.
Para entrada de calendário, uma tabela que contém todas as colunas marcadas primárias e todas as colunas relacionadas ao tempo.
Comentários
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 são antecipadas no tempo; Se o número for negativo, as datas são deslocadas para trás no tempo.O parâmetro
intervalé uma enumeração. Os valores válidos sãoDAY,WEEK,MONTH,QUARTER, eYEAR. Por ser uma enumeração, os valores não são passados como cadeias de caracteres. Portanto, não os coloque entre aspas.Quando
endbehavioré fornecido (apenas inteligência em tempo de calendário), DATESINPERIOD encaminha o valor para DATEADDo parâmetro de .ExtensionVeja Compreender o comportamento final para exemplos detalhados.Para entrada de coluna de data, a tabela retornada só pode conter datas armazenadas na
datescoluna. Assim, 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 marcado, o resultado será indefinido. Por favor, forneça uma data de entrada válida.
Para entrada de calendário, use o mesmo tipo de dados e formato que a coluna de dia marcado 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 deve seguir o mesmo formato (por exemplo, "2015-S2-Q4-M11-W45-D03"). Caso contrário, o comportamento é indefinido.
Esta função não é suportada para utilização no modo DirectQuery quando utilizada em colunas calculadas ou regras de segurança ao nível da linha (RLS).
Exemplo
A seguinte definição de medida da tabela de vendas usa a função DATESINPERIOD para calcular a receita do ano anterior (PY).
Observe que a fórmula usa a função MAX. Esta função retorna a data mais recente que está no contexto do filtro. Assim, a função DATESINPERIOD retorna uma tabela de datas começando a partir da data mais recente do ano passado.
Exemplos neste artigo podem ser usados com o modelo de exemplo do Power BI Desktop do Adventure Works DW 2020. Para obter o modelo, consulte DAX exemplo de modelo.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)
Considere que o relatório é filtrado pelo mês de junho de 2020. A função MAX retorna em 30 de junho de 2020. Em seguida, 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 ano passado.
Exemplo de inteligência de tempo baseada em calendário
A seguinte definição de medida da tabela de vendas usa a função DATESINPERIOD para calcular a receita do ano anterior (PY).
Observe que a fórmula usa a função MAX. Esta função retorna a data mais recente que está no contexto do filtro. Assim, 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 é digitada por data.
Exemplos neste artigo podem ser usados com o modelo de exemplo do Power BI Desktop do Adventure Works DW 2020. Para obter o modelo, consulte DAX exemplo de modelo.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)
Considere que o relatório é filtrado pelo mês de junho de 2020. A função MAX retorna em 30 de junho de 2020. Em seguida, a DATESINPERIOD função retorna um intervalo de 1º de julho de 2019 até 30 de junho de 2020. É um ano a partir de 30 de junho de 2020 para o ano passado.
Compreender o parâmetro de comportamento final para inteligência em tempo de calendário
Internamente, DATESINPERIOD calcula a fronteira final chamando DATEADD com o mesmo intervalo, número de intervalos, e endbehavior que foram passados em DATESINPERIOD. Quando number_of_intervals é negativo (comum ao recuar uma janela), a função devolve o intervalo (endDate, startDate], onde endDate é a data devolvida por DATEADD depois de deslocar o contexto do calendário que termina em startDate usando<interval><number_of_intervals><endbehavior>. Para valores positivos, o intervalo devolvido é [startDate, endDate).
-
PRECISEmantém o valor exato devolvido por DATEADD. -
ENDALIGNEDsegue a DATEADDEndAlignedsemântica, movendo a fronteira para o fim do período de destino quando a seleção da fonte já atingiu o seu próprio fim. Isto é útil quando o contexto do filtro já termina no último dia de um período e se quer uma janela com vista para trás (por exemplo, seis meses) para usar 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 )
)
Esta medida conta os nomes distintos dos meses dos últimos seis meses em relação ao contexto atual. Com , a janela mantém a fronteira no final do mês deslocado quando o contexto já termina EndAlignednuma fronteira de um mês, impedindo as datas adicionais que Precise incluiriam (por exemplo, Feb 28 de outra forma deslocariam para Aug 28, puxando e Aug 29–31 expandindo efetivamente o intervalo para sete meses). A EndAligned configuração mantém a contagem em seis nesse cenário.
A comparação seguinte assume que o contexto atual do filtro termina a 28 de fevereiro de 2023 e que a expressão chama DATESINPERIOD(..., -6, MONTH, <endbehavior>). O intervalo funcional é (endDate, startDate], pelo que o endDate devolvido por DATEADD é excluído enquanto startDate é incluído.
| Comportamento final |
DATEADD Fim Data |
DATESINPERIOD Distribuição | Nomes dos meses devolvidos pela medida |
|---|---|---|---|
Precise |
2022-08-28 |
(2022-08-28, 2023-02-28] → 29 de agosto de 2022 – 28 de fevereiro de 2023 |
Ago, Set, Out, Nov, Dez, Jan, Fev (7) |
EndAligned |
2022-08-31 |
(2022-08-31, 2023-02-28] → 1 de setembro de 2022 – 28 de fevereiro de 2023 |
Set, Out, Nov, Dez, Jan, Fev (6) |
Diferenças de comportamento entre a inteligência de tempo clássica e de calendário
Internamente, DATESINPERIOD usa a mesma lógica para DATEADD determinar a data final a partir 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 da data, então o resultado de DATESINPERIOD será diferente também. Na inteligência de tempo baseada em calendário, mudar 29 de fevereiro de 2008 para trás um ano resulta em 1 de março de 2007, porque é tratado como o 60º dia do ano. Na inteligência temporal clássica, o mesmo turno retorna em 28 de fevereiro de 2007. Como a data final é diferente, a saída do DATESINPERIOD testamento também é 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). Esta abordagem mudará por mês, pelo que fevereiro de 2008 passará para fevereiro de 2007. Em seguida, escreva um datesInPeriod personalizado com base na nova data de término.
Conteúdo relacionado
Funções de inteligência de tempo (DAX)Funções de data e hora (DAX)DATESBETWEEN função (DAX)