- Проблема с функцией DATEADD в DAX
- DATEADD
- Синтаксис
- Параметры
- Возвращаемое значение
- Remarks
- Пример. Сдвиг набора дат
- BI — это просто
- Простой авторский взгляд на сквозную BI аналитику (разбираем на практике Power BI, Excel, Power Pivot, DAX. и многое другое)
- Как в Power BI и Power Pivot сдвинуть даты? DAX функции DATEADD, PARALLELPERIOD и SAMEPERIODLASTYEAR
- DAX функция DATEADD в Power BI и Power Pivot
- DAX функция PARALLELPERIOD в Power BI и Power Pivot
- DAX функция SAMEPERIODLASTYEAR в Power BI и Power Pivot
Проблема с функцией DATEADD в DAX
Недавно я начал изучать DAX. Я не могу правильно понять функцию DATEADD. Выражение выражения дает ошибку.
Но его работа с EDATE
и FIRSTDATE не работает, как FIRSTNONBLANK, есть ли проблемы с использованием DATATABLE? Пожалуйста, дайте мне знать, что я пропустил.
Функция DATEADD принимает столбец, содержащий даты в качестве первого параметра, вы передаете таблицу, чтобы вызвать ошибку. Даже если вы проходите таблицу с одним столбцом, она отличается от столбца.
Примечание. FIRSTNONBLANK и FIRSTDATE возвращают таблицу, содержащую один столбец и одну строку с вычисленным первым значением или датой, соответственно, поэтому вы передаете таблицу.
Даже если вы передавали один столбец с одной строкой в функцию DATEADD он не будет DATEADD ошибки, но не возвращает ничего, поскольку DATEADD возвращает вычисленную дату, если она присутствует в столбце, поэтому, если у вас есть одно значение, больше нет дат для возврата, Если вам непонятно, рассмотрите этот пример, чтобы понять, как работает DATEADD :
У вас есть таблица MyDates
Если вы используете DATEADD для создания расчетного столбца с именем 4MonthsAfter :
Он возвращает это:
Как вы можете увидеть столбец 4MonthsAfter на дату 24/08/2016 значение пусто, так как столбец не содержит 24/12/2016 значение, то же самое происходит на 24/01/2017 , потому что нет 24/05/2017 стоимость. Но через 4 месяца после 24/09/2016 вычислено с 24/01/2017 в колонке.
Способ DATEADD отличается от способа EDATE . EDATE принимает дату (не столбец столбцов дат) в формате даты и времени или текст и вычисляет заданное количество месяцев до или после даты.
По сути, DATEADD ожидает столбец столбцов дат в качестве первого параметра, как и большинство функций Time Intelligence, которые предназначены для работы с таблицами Date/Calendar (размеры даты).
Если вы DATEADD из программирования, вы можете запутаться в том, как DATEADD работает в DAX. Обычно DATEADD требует только дату, количество интервалов и определенный интервал (MONTH, DAY, YEAR, QUARTER) для вычисления даты, в DAX для этого требуется явный столбец дат в качестве первого параметра.
Источник
DATEADD
Возвращает таблицу, содержащую столбец дат со сдвигом вперед или назад на указанное число интервалов от дат в текущем контексте.
Синтаксис
Параметры
Термин | Определение |
---|---|
даты | Столбец, содержащий даты. |
number_of_intervals | Целое число, указывающее количество интервалов, добавляемых в даты или вычитаемых из них. |
interval | Интервал для сдвига дат. Значение параметра interval может быть одним из следующих: year , quarter , month , day . |
Возвращаемое значение
Таблица, содержащая один столбец значений даты.
Remarks
Аргумент dates может принимать любое из следующих значений:
ссылка на столбец даты и времени;
табличное выражение, возвращающее один столбец значений даты и времени;
логическое выражение, определяющее таблицу значений даты и времени из одного столбца.
Ограничения логических выражений описаны в разделе Функция CALCULATE.
Если число, указанное для number_of_intervals, положительное, даты в dates перемещаются вперед во времени. Если число отрицательное, даты в dates сдвигаются назад во времени.
Параметр interval является перечислением, а не набором строк. Поэтому значения не должны заключаться в кавычки. Кроме того, значения year , quarter , month , day должны быть записаны полностью при использовании.
Таблица результатов содержит только даты, которые существуют в столбце dates.
Если даты в текущем контексте не формируют непрерывный интервал, функция возвращает ошибку.
Эта функция не поддерживается для использования в режиме DirectQuery при использовании в вычисляемых столбцах или правилах безопасности на уровне строк (RLS).
Пример. Сдвиг набора дат
Следующая формула вычисляет даты на год раньше дат в текущем контексте.
Источник
BI — это просто
Простой авторский взгляд на сквозную BI аналитику (разбираем на практике Power BI, Excel, Power Pivot, DAX. и многое другое)
Как в Power BI и Power Pivot сдвинуть даты? DAX функции DATEADD, PARALLELPERIOD и SAMEPERIODLASTYEAR
Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):
Приветствую Вас, дорогие друзья, с Вами Будуев Антон. В данной статье мы поговорим о том, как в Power BI и Power Pivot сдвинуть даты вперед или назад для сравнения текущих показателей с прошлыми или будущими. А конкретно, разберем функции, отвечающие в DAX за этот процесс — DATEADD, PARALLELPERIOD и SAMEPERIODLASTYEAR.
Разберем детально каждую из этих функций.
Для Вашего удобства, рекомендую скачать «Справочник DAX функций для Power BI и Power Pivot» в PDF формате.
Если же в Ваших формулах имеются какие-то ошибки, проблемы, а результаты работы формул постоянно не те, что Вы ожидаете и Вам необходима помощь, то записывайтесь в бесплатный экспресс-курс «Быстрый старт в языке функций и формул DAX для Power BI и Power Pivot».
А также, подписывайтесь на наши социальные сети. Потому что именно в них, Вам будут доступны оперативно и каждый день наши актуальные фишки, секреты, наработки, примеры, кейсы, полезные советы, видео и статьи по темам сквозной BI аналитики (Power BI, DAX, Power Pivot, Excel…): Вконтакте, Инстаграм, Фейсбук, YouTube.
DAX функция DATEADD в Power BI и Power Pivot
DATEADD () — создает таблицу со столбцом из дат, сдвинутых назад (в прошлое) или вперед (в будущее) на заданное количество интервалов от даты текущего контекста.
- [Дата] — столбец из дат или выражений, возвращающих даты
- Количество Интервалов — целое число, характеризующее количество интервалов, которое нужно добавить (вычесть) к дате в текущем контексте. Если указано положительное число — то интервалы добавляются, если указано отрицательное число — то интервалы вычитаются
- Интервал — тип интервала: year (год), quarter (квартал), month (месяц), day (день)
! — Для правильной работы функции необходимо в качестве ее первого параметра [Дата] использовать столбец из таблицы непрерывных дат в Power BI, то есть, создавать отдельную связанную таблицу «Календарь» с непрерывным перечислением всех дат.
Разберем работу DAX функции DATEADD на примере нескольких формул.
В Power BI Desktop имеется таблица с датами «Календарь»:
Для создания формул сравнения текущих показателей с прошлыми, необходимо внутри этих формул, относительно текущей даты, как-то получить соответствующую дату в прошлом. Для этого, воспользуемся рассматриваемой функцией DATEADD.
И для примера того, как она сдвигает даты, создадим в таблице «Календарь» вычисляемый столбец на основе следующей формулы:
В первом параметре этой формулы мы указали ссылку на столбец даты в календаре (календарь должен быть связан с той таблицей фактов, по которой Вы рассчитываете показатели).
Во втором параметре — количество интервалов, на которое нужно сдвинуть даты, причем значение отрицательное, то есть, сдвиг будет в прошлое.
В третьем — тип самого интервала (день).
Как результат выполнения этой формулы на основе DATEADD, получился столбец дат, сдвинутый в прошлое на два дня назад:
То есть, каждой текущей дате из столбца [Дата] соответствует своя дата из прошлого на 2 дня назад (для текущей даты 5 января соответствует дата из прошлого 3 января).
Если мы в формуле укажем в качестве количества интервалов положительное число:
то сдвиг произойдет в будущее:
То есть, каждой текущей дате из столбца [Дата] соответствует своя дата из будущего на 1 день вперед (для текущей даты 1 января соответствует дата из будущего 2 января).
DAX функция PARALLELPERIOD в Power BI и Power Pivot
PARALLELPERIOD () — возвращает таблицу из дат, смещенных во времени вперед или назад параллельно текущей дате в текущем контексте на заданное количество интервалов.
- [Дата] — столбец из дат или выражений, возвращающих даты
- Количество Интервалов — целое число, характеризующее количество интервалов, которое нужно добавить (вычесть) к дате в текущем контексте. Если указано положительное число — то интервалы добавляются, если указано отрицательное число — то интервалы вычитаются
- Интервал — тип интервала: year (год), quarter (квартал), month (месяц)
! — Для правильной работы функции необходимо в качестве ее первого параметра [Дата] использовать столбец из таблицы непрерывных дат в Power BI, то есть, создавать отдельную связанную таблицу «Календарь» с непрерывным перечислением всех дат.
В общем и целом, функции DATEADD и PARALLELPERIOD практически одинаковы, за исключением того, что:
- в PARALLELPERIOD нет интервала day (день)
- PARALLELPERIOD возвращает параллельный период полностью (например, от начала до конца месяца), тогда как DATEADD возвращает конкретно только тот интервал, который задан в изначальном столбце дат.
Например, изначальный набор дат будет отфильтрован датами от 16 до 25 октября. И если мы обеими функциями попытаемся возвратить набор дат на 1 месяц назад, то DATEADD возвратит даты только с 16 до 25 сентября, а PARALLELPERIOD — уже возвратит даты всего предыдущего месяца от начала и до конца, то есть, с 1 по 30 сентября.
Давайте разберем разницу работы DATEADD и PARALLELPERIOD на конкретном практическом примере.
В Power BI Desktop имеется исходная таблица по продажам за 2018 год (с 16.01.2018 по 31.12.2018):
Задача состоит в следующем — в рамках сводной таблицы, напротив текущего месяца, получить сумму продаж за предыдущий месяц. Для этого подойдут обе рассматриваемые выше функции.
Для корректной работы DATEADD и PARALLELPERIOD мы не можем ссылаться на столбец дат, который находится в таблице продаж. Для них нужна совершенно отдельная таблица неразрывных дат «Календарь». В разборе синтаксисов функций я об этом писал (напоминаю, как создавать таблицы неразрывных дат (календари) разбирается в этой статье).
Итак, в модели данных я создал отдельный «Календарь» и связал его со столбцом [Дата Продаж] в таблице «Продажи»:
Теперь можно приступать к созданию формул:
Обе формулы, которые мы записали выше, рассчитывают сумму прибыли за предыдущий месяц:
- за суммирование отвечает функция SUM, которая суммирует все значения в столбце [СуммаПродаж]
- за перемещение периода отвечают функции DATEADD и PARALLELPERIOD, которые перемещают даты из календаря на 1 месяц назад, причем, напомню, «Календарь» связан с таблицей «Продажи» по столбцам дат
- и, за само вычисление суммы, под условием перемещения дат на месяц назад, отвечает DAX функция CALCULATE, внутрь которой помещены все функции, участвующие в работе
Посмотрим как поведут себя эти формулы в Power BI Desktop:
Как мы видим, формулы отработали как нужно и для текущего месяца (например, февраль) дают сумму продаж за предыдущий месяц (январь).
Обе функции DATEADD и PARALLELPERIOD пока работают абсолютно одинаково, так в чем же их различие?
А различие в том, что DATEADD — возвращает дату, которая была месяц назад. А PARALLELPERIOD весь период, который был месяц назад (в данном случае, период равен месяцу, так как в параметрах указан MONTH).
Давайте это подтвердим на нашем примере и в созданной матрице спустимся в иерархии дат до дней, тогда мы тут же заметим разницу в работе этих двух функций (для удобства демонстрации я создал две копии визуализаций: на первой показан январь по дням, на второй — февраль по дням):
То есть, теперь, когда мы спустились в матрице к отображению дней, то DATEADD возвращает для каждого текущего дня сумму продаж именно по этому же дню, но из прошлого месяца. А PARALLELPERIOD возвращает для каждого текущего дня сумму продаж уже не по этому же дню из прошлого месяца, а именно сумму продаж за весь прошлый период (в данном случае, за месяц).
DAX функция SAMEPERIODLASTYEAR в Power BI и Power Pivot
SAMEPERIODLASTYEAR () — возвращает таблицу из дат, смещенных на 1 год назад относительно дат текущего контекста.
На самом деле, SAMEPERIODLASTYEAR это упрощенный вариант DAX функции DATEADD, а именно, упрощенный ее вариант с конкретными настройками параметров:
И нужна эта функция только для того, чтобы упростить написание кода на языке DAX в Power BI.
Посмотрим на практике как работают формулы на основе этих двух функций:
Как мы видим, формула на основе SAMEPERIODLASTYEAR, как и на основе DATEADD, вывела значение суммы продаж за январь предыдущего года. Соответственно, в тех случаях, когда нам нужно вычислить какие-то значения за прошлый год, то лучше просто воспользоваться SAMEPERIODLASTYEAR, так как она позволяет быстрее и легче написать DAX код в Power BI.
На этом, с разбором DAX функций DATEADD, PARALLELPERIOD и SAMEPERIODLASTYEAR, сдвигающих период дат в прошлое или будущее в Power BI или Power Pivot, в этой статье все.
Единственное, напоминаю, что для корректной работы этих функций, в качестве столбца дат требуется указывать совершенно отдельную в модели данных таблицу «Календарь» с неразрывными датами.
Пожалуйста, оцените статью:
- 5
- 4
- 3
- 2
- 1
(20 голосов, в среднем: 5 из 5 баллов)
Успехов Вам, друзья!
С уважением, Будуев Антон.
Проект «BI — это просто»
Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.
Понравился материал статьи? Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D
Источник