DATESINPERIOD

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

Заметка

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

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

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

Эта функция подходит для передачи в качестве фильтра в функцию CALCULATE. Используйте его для фильтрации выражения по стандартным интервалам даты, таким как дни, месяцы, кварталы или годы.

Синтаксис

DATESINPERIOD(<dates or calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])

Параметры

Срок Определение
dates or calendar Столбец, содержащий даты или ссылку на календарь
start_date Выражение даты. Если используется синтаксис календаря, используйте тот же тип данных, что и основной столбец, помеченный категорией Day.
number_of_intervals Целое число, указывающее количество интервалов для добавления или вычитания из дат.
interval Интервал, с помощью которого необходимо переместить даты. Значение интервала может быть одним из следующих значений: DAY, WEEK, , MONTHQUARTERи YEAR. Вы можете использовать WEEK только с ссылкой на календарь.
endbehavior Применимо только при предоставлении ссылки на календарь. Необязательно. Определяет, как дата окончания выравнивается, если интервал назначения больше исходного диапазона. Допустимые значения: PRECISE (по умолчанию) и ENDALIGNED.

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

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

Замечания

  • В наиболее распространенном случае использования dates является ссылкой на столбец даты помеченной таблицы дат.

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

  • Параметр interval является перечислением. Допустимые значения: DAY, WEEK, MONTH, QUARTER, и YEAR. Так как это перечисление, значения не передаются в виде строк. Поэтому не заключайте их в кавычки.

  • Если endbehavior задано (только аналитика времени календаря), DATESINPERIOD перенаправит значение в DATEADDExtension параметр. Подробные примеры см. в разделе "Общие сведения о endbehavior ".

  • Для входных данных столбца даты возвращаемая таблица может содержать только даты, хранящиеся в столбце dates . Например, если dates столбец начинается с 1 июля 2017 г. и start_date значение равно 1 июля 2016 г., возвращаемая таблица начинается с 1 июля 2017 года.

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

  • Для ввода календаря используйте тот же тип данных и формат, что и столбец помеченного дня для даты начала. Например, если столбец использует формат YYYY-Sn-Qn-Mnn-Wnn-Dnn (например, "2014-S2-Q4-M11-W45-D03"), дата начала должна соответствовать тому же формату (например, "2015-S2-Q4-M11-W45-D03"). В противном случае поведение не определено.

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

Пример

В приведенном ниже определении меры продаж таблица использует функцию DATESINPERIOD для вычисления выручки за предыдущий год (PY).

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

Примеры в этой статье можно использовать с примером модели Adventure Works DW 2020 Power BI Desktop. Сведения о получении модели см. в разделе DAXпримера модели.

Revenue PY =
CALCULATE (
    SUM ( Sales[Sales Amount] ),
    DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)

Отчет фильтруется по месяцам июня 2020 года. Функция MAX возвращается 30 июня 2020 г. Функция DATESINPERIOD возвращает диапазон дат от 1 июля 2019 г. до 30 июня 2020 г. Это год значений дат, начиная с 30 июня 2020 года за последний год.

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

В приведенном ниже определении меры продаж таблица использует функцию DATESINPERIOD для вычисления выручки за предыдущий год (PY).

Формула использует функцию MAX . Эта функция возвращает последнюю дату, которая находится в контексте фильтра. Таким образом, DATESINPERIOD функция возвращает первичные столбцы, начиная с последней даты в прошлом году. Мы используем DateKey в качестве примера, чтобы показать, что категория Day может быть помечена столбцом, не типизированным датой.

Примеры в этой статье можно использовать с примером модели Adventure Works DW 2020 Power BI Desktop. Сведения о получении модели см. в разделе DAXпримера модели.

Revenue PY =
CALCULATE (
    SUM ( Sales[Sales Amount] ),
    DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)

Отчет фильтруется по месяцам июня 2020 года. Функция MAX возвращается 30 июня 2020 г. Затем DATESINPERIOD функция возвращает диапазон от 1 июля 2019 г. до 30 июня 2020 г. Это год, начиная с 30 июня 2020 года в прошлом году.

Общие сведения о параметре endbehavior для аналитики времени календаря

DATESINPERIOD Внутренне вычисляет конечную границу путем вызова DATEADD с тем же интервалом, числом интервалов и endbehavior переданными вDATESINPERIOD. Если number_of_intervals значение отрицательное (обычно при перемещении окна назад), функция возвращает диапазон(endDate, startDate], где endDate дата DATEADD возвращается после смены контекста календаря, который заканчиваетсяstartDate<number_of_intervals><interval>с помощью.<endbehavior> Для положительных значений возвращается [startDate, endDate)интервал.

  • PRECISE сохраняет точное значение, возвращаемое DATEADD.
  • ENDALIGNED DATEADD EndAligned следует семантике, переместив границу в конец конечного периода, когда исходный выбор уже достиг собственного конца. Это полезно, если контекст фильтра уже заканчивается в последний день периода, и вы хотите, чтобы окно обратного просмотра (например, шесть месяцев) использовало последний день смещенного периода в качестве его границы.

Пример с EndAligned

EndAlignedTest =
    CALCULATE (
        COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
        DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
    )

Эта мера подсчитывает отдельные имена месяцев за последние шесть месяцев относительно текущего контекста. При этом EndAlignedокно сохраняет границу в конце смещенного месяца, когда контекст уже заканчивается на месячной границе, предотвращая дополнительные конечные даты, которые Precise будут включать (например, Feb 28 в противном случае переход Aug 28на, вытягивание Aug 29–31 и эффективное расширение диапазона до семи месяцев). Параметр EndAligned сохраняет число в шести случаях в этом сценарии.

В следующем сравнении предполагается, что текущий контекст фильтра заканчивается 28 февраля 2023 г. и вызовы DATESINPERIOD(..., -6, MONTH, <endbehavior>)выражений. Функциональный диапазон имеет значение (endDate, startDate], поэтому endDate возвращаемое DATEADD значение исключается во время startDate включения.

endbehavior DATEADD Enddate DATESINPERIOD диапазон Имена месяцев, возвращаемые мерой
Precise 2022-08-28 (2022-08-28, 2023-02-28] → августа 2022 г. – 28 февраля 2023 г. Август, Сентябрь, Октябрь, Ноябрь, Декабрь, Январь, Февраль (7)
EndAligned 2022-08-31 (2022-08-31, 2023-02-28] → сентября 12022 г. – 28 февраля 2023 г. Сентябрь, Октябрь, Ноябрь, Декабрь, Январь, Февраль (6)

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

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