Compartilhar via


DATEADD

aplica-se a:coluna calculadatabela calculadamedidacálculo visual

Nota

Essa função é desencorajada para uso em cálculos visuais pois provavelmente retorna resultados sem sentido.

Se a entrada for uma coluna de data, retornará uma tabela que contém uma coluna de datas, deslocada para frente ou para trás no tempo pelo número especificado de intervalos das datas no contexto atual.
Se a entrada for um calendário, a função retornará datas deslocadas para frente ou para trás no tempo pelo número especificado de intervalos, com base no contexto atual. A saída inclui as colunas marcadas primárias, bem como colunas relacionadas ao tempo.

Sintaxe

DATEADD(<dates> or <calendar>, <number_of_intervals>, <interval>[,<Extension>],[,<Truncation>])

Parâmetros

Prazo Definição
dates or calendar Uma coluna que contém datas ou uma referência de calendário.
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: year, , quarter, month, , week. day A enumeração de semana só é aplicável quando uma referência de calendário é fornecida.
extension Aplicável somente quando uma referência de calendário é fornecida. Defina o comportamento quando o período de tempo original tiver menos datas do que o período de tempo resultante. Os valores válidos são: EXTENDING (Padrão), PRECISE, ENDALIGNED.
truncation Aplicável somente quando uma referência de calendário é fornecida. Defina o comportamento quando o período de tempo original tiver mais datas do que o período de tempo resultante. Os valores válidos são: BLANKS (Padrão), ANCHORED.

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 ao tempo para os períodos deslocados, no contexto atual.

Observações

O argumento dates pode ser qualquer um dos seguintes:

  • Uma referência a uma coluna de data/hora,

  • Uma expressão de tabela que retorna uma única coluna de valores de data/hora,

  • Uma expressão booliana que define uma tabela de coluna única de valores de data/hora.

    Nota

    Restrições em expressões boolianas são descritas no tópico, CALCULATE função.

  • Se o número especificado para number_of_intervals for positivo, as datas em dates serão movidas para frente a tempo; se o número for negativo, as datas em dates serão deslocadas novamente no tempo.

  • O parâmetro interval é uma enumeração, não um conjunto de cadeias de caracteres; portanto, os valores não devem ser colocados entre aspas. Além disso, os valores: year, quarter, month, day devem ser escritos na íntegra ao usá-los.

  • A tabela de resultados inclui apenas datas que existem na coluna dates.

  • Se a sintaxe da coluna de data for usada e as datas no contexto atual não formarem um intervalo contíguo, a função retornará um erro.

  • 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 – Deslocando um conjunto de datas

A fórmula a seguir calcula as datas que estão um ano antes das datas no contexto atual.

= DATEADD ( DateTime[DateKey], -1, YEAR )

Exemplo de inteligência de tempo baseada em calendário

A fórmula a seguir retorna uma tabela de datas deslocadas um ano atrás das datas no contexto atual.

DATEADD ( FiscalCalendar, -1, YEAR )

Comportamento especial quando a entrada é uma coluna de data

Quando a seleção incluir os últimos dois dias do mês, DATEADD usará a semântica de "extensão" e incluirá os dias até o final do mês. Por exemplo, quando 27 e 28 de fevereiro de 2013 estiverem incluídos na seleção e um mês for adicionado, DATEADD retornará de 27 a 31 de março.

Esse comportamento só acontece quando os últimos dois dias do mês são incluídos na seleção. Se apenas 27 de fevereiro estiver selecionado, ele irá para 27 de março.

= DATEADD(DateTime[DateKey], 1, month)

A inteligência de tempo baseada em calendário fornece mais controle por meio de dois parâmetros opcionais: "Extensão" e "Truncamento". Confira as descrições de parâmetro acima para obter detalhes.

Comportamento do DateAdd baseado em calendário quando a seleção está em um grão mais fino do que o nível de deslocamento

Quando a referência de calendário é usada e a seleção está em um nível mais refinado do que o nível de deslocamento, uma abordagem baseada em índice é tomada. Para ilustrar esse comportamento, vamos considerar o cenário em que a seleção está no nível da data e DATEADD() está mudando por mês. Veja o que DateAdd fará:

  • Determine as posições da seleção atual dentro do mês.
    Por exemplo, se a seleção atual se estender de 3 a 10 de março, as posições serão do 3º ao 10º dia do mês.

  • Shift the month Apply the month shift — por exemplo, a shift of +1 changes March to April.

  • Retornar as mesmas posições relativas no mês deslocado Recuperar o 3º para o 10º do novo mês (por exemplo, 3 a 10 de abril).

Parâmetros para DateAdd baseado em calendário quando a seleção está em um grão mais fino do que o nível de deslocamento

Quando a granularidade de seleção é mais fina que a unidade de deslocamento (por exemplo, selecionar datas individuais durante a mudança por mês), o comportamento baseado em índice pode levar a ambiguidades, especialmente em meses de comprimentos variados. Para lidar com esses casos de borda, dois parâmetros são introduzidos:

Parâmetro de extensão (para pequenas → grandes turnos de período):

Controla como a função se comporta quando o período de destino é maior que o atual. Use avançar um mês como exemplo:

  • Precise: mantém o intervalo de datas original estritamente.
    Feb 25–28 → →March 25–28

  • Extending: permite que a janela se expanda até o final do período , se necessário.
    Feb 25–28 → →March 25–31

  • EndAligned: alinha a data de término com o final do período de destino quando a seleção atinge o final de seu período; caso contrário, preserva posições relativas.
    Feb 28 → →March 31, enquanto Feb 27March 27

Parâmetro de truncamento (para grandes → pequenos turnos de período)

Controla como a função se comporta quando o mês de destino é menor que o atual. Use mover para trás um mês como exemplo:

  • Anchored: ancora o resultado na última data válida do período menor.
    March 31 → →Feb 28

  • Blanks: retorna em branco quando a data deslocada não existe.
    March 31 → → (em branco) (desde fevereiro não tem 31)

Diferenças no comportamento entre a inteligência de tempo clássica e de calendário

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, SamePeriodLastYear produzirá resultados diferentes na granularidade de data. 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. A solução alternativa é usar DATEADD(Calendário, -<número de um ano>, mês). 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.

funções de inteligência de horafunções de data e hora