DATEADD

применяется:вычисляемый столбецвычисляемой таблицыизмерениевизуального вычисления

Заметка

Эта функция не рекомендуется использовать в визуальных вычислениях, так как, скорее всего, возвращает бессмысленные результаты.

Если входные данные являются столбцом даты, возвращает таблицу, содержащую столбец дат, сдвигается либо вперед, либо назад в течение указанного числа интервалов от дат в текущем контексте.
Если входные данные являются календарем, функция возвращает даты, перенесенные вперед или назад в течение указанного числа интервалов, в зависимости от текущего контекста. Выходные данные включают основные помеченные столбцы, а также столбцы, связанные с временем.

Синтаксис

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

Параметры

Срок Определение
dates or calendar Столбец, содержащий даты или ссылку на календарь.
number_of_intervals Целое число, указывающее количество интервалов для добавления или вычитания из дат.
interval Интервал, с помощью которого необходимо переместить даты. Значение интервала может быть одним из следующих значений: year, quarter, month, week. day Перечисление недели применимо только в том случае, если указана ссылка на календарь.
extension Применимо только при указании ссылки на календарь. Определите поведение, если исходный период времени имеет меньше дат, чем результирующий период времени. Допустимые значения: EXTENDING (Default), ТОЧНО, ENDALIGNED.
truncation Применимо только при указании ссылки на календарь. Определите поведение, если исходный период времени имеет больше дат, чем результирующий период времени. Допустимые значения: BLANKS (по умолчанию), ANCHORED.

Возвращаемое значение

Для ввода столбца даты таблица, содержащая один столбец значений даты.
Для входных данных календаря таблица, содержащая все основные помеченные столбцы и связанные с временем столбцы для смещенных периодов в текущем контексте.

Замечания

Аргумент dates может быть одним из следующих:

  • Ссылка на столбец даты и времени,

  • Табличное выражение, возвращающее один столбец значений даты и времени,

  • Логическое выражение, определяющее таблицу значений даты и времени с одним столбцом.

    Заметка

    Ограничения логических выражений описаны в разделе CALCULATE функции.

  • Если число, указанное для number_of_intervals положительно, даты в dates перемещаются вперед в течение времени; Если число отрицательное, даты в dates сдвигаются назад.

  • Параметр interval — это перечисление, а не набор строк; поэтому значения не должны быть заключены в кавычки. Кроме того, значения: year, quarter, month, day должны быть полны при их использовании.

  • В таблице результатов содержатся только даты, существующие в столбце dates.

  • Если используется синтаксис столбца дат и даты в текущем контексте не образуют непрерывный интервал, функция возвращает ошибку.

  • Эта функция не поддерживается для использования в режиме DirectQuery при использовании в вычисляемых столбцах или правилах безопасности на уровне строк (RLS).

Пример. Смена набора дат

Следующая формула вычисляет даты, которые за год до дат в текущем контексте.

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

Пример для аналитики времени на основе календаря

Следующая формула возвращает таблицу дат, сменив один год назад с дат в текущем контексте.

DATEADD ( FiscalCalendar, -1, YEAR )

Особое поведение, если входные данные являются столбцом даты

Если выбор включает последние два дня месяца, DATEADD будет использовать семантику расширения и будет включать дни до конца месяца. Например, когда 27 и 28 февраля 2013 года включены в выборку, а месяц добавляется, DATEADD возвращается 27 марта до 31 марта.

Это поведение происходит только в том случае, если последние два дня месяца включены в выборку. Если выбрано только 27 февраля, он перейдет к 27 марта.

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

Аналитика времени на основе календаря обеспечивает больше управления двумя необязательными параметрами: Extension и Truncation. Дополнительные сведения см. в описании приведенных выше параметров.

Поведение на основе календаря DateAdd при выборе на более тонком уровне, чем уровень смены

Если используется ссылка на календарь и выбор находится на более тонком уровне, чем уровень смены, применяется подход на основе индекса. Чтобы проиллюстрировать это поведение, рассмотрим сценарий, в котором выбор находится на уровне даты и DATEADD() сдвигается на месяц. Вот что будет делать DateAdd:

  • Определите позиции текущего выбора в течение месяца.
    Например, если текущий выбор охватывает 3–10 марта, позиции от 3-го до 10-го дня месяца.

  • Shift the month Apply the month shift ( Например, смена +1 изменится на апрель).

  • Верните те же относительные позиции в смещенном месяце извлекает 3-е место до 10-го нового месяца (например, 3–10 апреля).

Параметры для dateAdd на основе календаря, если выбор находится на более тонком уровне, чем уровень смены

Если степень детализации выбора меньше единицы смены (например, выбор отдельных дат при смене по месяцам), поведение на основе индекса может привести к неоднозначности, особенно в течение нескольких месяцев. Для обработки этих пограничных вариантов вводятся два параметра:

Параметр расширения (для небольших → сдвигов больших периодов):

Управляет поведением функции, когда срок назначения превышает текущий. Используйте шаг вперед один месяц в качестве примера:

  • Precise: строго сохраняет исходный диапазон дат.
    Feb 25–28 → →March 25–28

  • Extending: позволяет окну развернуться в конце периода при необходимости.
    Feb 25–28 → →March 25–31

  • EndAligned: выравнивает дату окончания с окончанием конечного периода, когда выбор достигает конца его периода; в противном случае сохраняет относительные позиции.
    Feb 28 → → March 31, а →Feb 27March 27

Параметр усечения (для больших → сдвигов небольших периодов)

Управляет поведением функции, когда целевой месяц короче текущего. Используйте перемещение назад в месяц в качестве примера:

  • Anchored: привязает результат к последней допустимой дате меньшего периода.
    March 31 → →Feb 28

  • Blanks: возвращает пустое значение , когда смена даты не существует.
    March 31 → → (пусто) (с февраля не имеет 31-го)

Различия в поведении между классической и календарной аналитикой времени

Некоторые сценарии могут дать разные результаты при сравнении классической и календарной аналитики времени. Например, в лунном году, SamePeriodLastYear будет производить различные результаты по гранулярности дат. В аналитике времени на основе календаря, сдвиг 29 февраля 2008 года назад один год приводит к марту 1 2007 года, потому что он рассматривается как 60-й день года. В классической аналитике времени та же смена возвращается 28 февраля 2007 года. Обходной путь — использовать DATEADD(календарь,< число в год>, месяц). Например, если год имеет 13 месяцев в календаре, используйте DATEADD(Календарь, -13, месяц). Этот подход изменится на месяц, так что февраль 2008 будет переходить к февралю 2007 года.