Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
применяется:
вычисляемый столбец
вычисляемой таблицы
измерение
визуального вычисления
Заметка
Эта функция не рекомендуется использовать в визуальных вычислениях, так как, скорее всего, возвращает бессмысленные результаты.
Для входных данных столбца дат возвращает таблицу, содержащую столбец дат, начинающийся с указанной даты начала и продолжающийся для указанного числа и типа интервалов даты.
Для входных данных календаря возвращает таблицу, которая начинается с указанной даты начала и продолжается для указанного числа и типа интервалов даты. Таблица содержит все основные помеченные столбцы и все связанные со временем столбцы.
Эта функция подходит для передачи в качестве фильтра в функцию 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. -
ENDALIGNEDDATEADDEndAlignedследует семантике, переместив границу в конец конечного периода, когда исходный выбор уже достиг собственного конца. Это полезно, если контекст фильтра уже заканчивается в последний день периода, и вы хотите, чтобы окно обратного просмотра (например, шесть месяцев) использовало последний день смещенного периода в качестве его границы.
Пример с 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 на основе новой даты окончания.
Связанное содержимое
- функции аналитики времени (DAX)
- функции даты и времени (DAX)
- функция DATESBETWEEN (DAX)