Привет всем, рад встретиться с вами в другом блоге.

Позвольте мне быстро объяснить, что такое функции DATESINPERIOD() и DATESBETWEEN():

  • Это функции Time-Intelligence DAX от Microsoft, разработанные для POWER BI.
  • Оба возвращают один столбец значений даты.
  • DATESBETWEEN() нужны start_date и end_date.
  • DATESINPERIOD() требуется только начальная_дата, количество интервалов и тип интервала (день/месяц/квартал/год).

Я предпочитаю объяснять понятия проще, как твой друг, который учит тебя всем важным вопросам в день экзамена! В конце концов, нам нужно передавать знания. Перейдем к блогу.

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

Сценарий здесь состоит в том, чтобы представить нашему боссу отчет о продажах автомобилей за март и апрель. Итак, наша первая цель здесь будет заключаться в том, чтобы извлечь данные о продажах автомобилей в марте и апреле, верно?

Цель этого блога – объяснить, какую функцию лучше всего использовать.

Во-первых, я покажу, как извлечь данные о продажах всех производителей в марте и апреле с помощью функции DATESBETWEEN() из #DAX.

Посмотрим, что скажет майкрософт…

Окей круто. Давайте начнем объяснять вещи более простым способом.

Функция DATESBETWEEN() имеет три параметра:

  • ‹даты›: столбец, в котором у нас есть даты. Например: tableName[dateColumn]ПРОСТО!!
  • ‹start_date› — что вы подразумеваете под «выражением даты», просто скажите, что это ДАТА, пожалуйста, это ПЕРВОЕ СВИДАНИЕ !! Следует использовать формат (ГГГГ, ММ, ДД). Не используйте дефис в формате, вы должны использовать запятую.
  • ‹end_date› — окончание ДАТА в допустимом формате.

Хорошо, что мы будем делать с колонкой, полной дат? Не имеет смысла. Какова была наша цель? Это должно было извлечь продажи автомобилей за март и апрель. Прохладный.

Есть простая формула, поверьте мне, это легко. Это мера (DAX, лол):

newColumnName = ВЫЧИСЛИТЬ( СУММА ( CarSales[Цена продажи] ), DATESBETWEEN( carSales[Дата продажи], DATE( 2018,3,1 ), DATE( 2018,3,31 ) ) )

Здесь мы просто рассчитываем цену продажи каждого производителя с 1 марта 2018 года по 31 марта 2018 года. Легкий?

У нас есть стоимость продаж за март и апрель месяц в виде визуализации карты, описание заканчивается на «БД», верно? это означает, что значения были извлечены с помощью функции DATESBETWEEN(). Для апреля формула DAX была такой же, но start_date должна быть (2018,4,1), а end_date должна быть (2018,4,30).

Теперь давайте попробуем то же самое в DATESINPERIOD(), обратите внимание, что мы попробуем то же самое. Прежде чем сделать это, давайте посмотрим, что наш друг ( Microsoft :-P ) говорит о функции DATESINPERIOD().

Функция DATESINPERIOD имеет четыре параметра:

  • ‹даты›: столбец, в котором у нас есть даты. Например: tableName[dateColumn]ПРОСТО!!
  • ‹start_date› — допустимая ДАТА НАЧАЛА (ГГГГ-ММ-ДД).
  • ‹number_of_intervals› — вы должны добавить интервалы 28/29/30/31, чтобы получить последнюю дату месяца с ее первой датой. Вы должны добавить 12 интервалов к первому месяцу, чтобы получить последний месяц в году. Легкий? В основном это количество дней/кварталов/месяцев/годов, которое вы хотите прибавить или вычесть из даты начала.
  • ‹intervals› — нельзя ввести 30 в качестве ‹number_of_intervals› и выбрать Месяц в качестве ‹intervals›, потому что в году у нас всего 12 месяцев! ‹intervals› — это простое определение количества введенных вами интервалов.

Хорошо, в нашем примере DATESBETWEEN() мы рассчитали общий объем продаж за март, используя 1 марта в качестве ‹start_date› и 31 марта в качестве ‹end_date›, верно? Пожалуйста, прокрутите вверх, чтобы перепроверить его.

Мы собираемся сделать то же самое в DATESINPERIOD(). Давайте начнем играть с параметрами функции DIP:

  • ‹даты›: carSales[ dateColumn ]
  • ‹start_Date›: (2018,3,1)То же, что и функция DATESBETWEEN()
  • ‹number_of_intervals›: 30. Поскольку 1 марта + 30 дней = 31 марта, принять?
  • ‹интервалы›: я оставлю этот вариант вам, попробуйте ;-)

Я выполнил код DAX, давайте посмотрим, что произошло на нашем рабочем столе POWER BI. DIP означает, что значение было рассчитано с использованием функции DATESINPERIOD().

Ваааа !! Почему изменились значения?? Есть предположения?? Хорошо, я расскажу вам, что произошло. Взгляните на Edit Query с рабочего стола PowerBI.

ЗАКЛЮЧЕНИЕ:

Как видите, мы обнаружили, что у нас не было продаж за все дни марта, но функция МЕЖДУ ДАТАМИ() работала правильно и давала нам общий объем продаж только за март, потому что она работает в соответствии с фактическая дата, другими словами, он работает в соответствии с КАЛЕНДЕРОМ.

Но в случае функции DATESINPERIOD() она будет работать нормально, если у нас есть все даты для определенного месяца в нашем наборе данных, но в нашем случае мы не выполнили требование. Итак, произошло следующее: он проверяет введенное пользователем ‹start_date› = (2018,3,1), но не может его найти, потому что не существует >. В этом случае, если упомянутые данные не найдены, значение даты первой записи будет взято в качестве даты начала (2018,3,21), и это не работает на основе количества интервалов, которые мы дали из-за несоответствия значения даты. Таким образом, он вычисляется до значения даты 30-й записи.

Не поверил, приведу доказательство (только имейте в виду, что дата 30-й записи была 19th of April, 2018). Я выделил это на предыдущем снимке экрана, давайте попробуем указать эту дату в качестве ‹end_date› для функции DATESBETWEEN().

Я доказал, что LHS(DATESINPERIOD) равно RHS(DATESBETWEEN), LOL.

Как вы можете видеть здесь, я изменил код DATESBETWEEN() здесь, ‹end_date› был обновлен до (2018,4,19) = значение 30-й записи.

DATESBETWEEN() действительно великолепна, даже она работает аналогично DATESINPERIOD(). Функция БД не смогла найти введенную пользователем первую дату, поэтому в качестве первой даты она приняла значения даты первой записи, но вернула ожидаемое значение, поскольку мы упомянули ‹end_date›, а она существовала* в набор данных.

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

Хорошо, теперь у вас возникнут сомнения, как мы можем получить правильное значение продаж за март и апрель, используя функцию ДАТАПЕРИОД(), но не используя функцию МЕЖДУ ДАТАМИ(), это просто. Я покажу вам, как это сделать.

Давайте не будем менять значение ‹start_date› DIP-функции, но давайте сделаем небольшое изменение ‹number_of_intervals› на 11.

Работа СДЕЛАНА! Нам нужен был общий объем продаж за март месяц, мы ввели ‹start_date›, которого не было в наборе данных, поэтому было взято значение даты 1-й записи. Последняя дата мартовского месяца — 31, а соответствующий серийный номер или ‹number_of_intervals› — 11 (согласно моему набору данных). Обновив код DAX функции DATESINPERIOD() указанными выше значениями, мы успешно выполнили работу, используя две разные функции для достижения одной общей цели!

Окончательный отчет нашему боссу с использованием двух разных функций в одном и том же наборе данных:

Сравнение ясно показывает, какой производитель был наиболее перспективным и сколько продаж было зафиксировано у всех производителей. Сладкий!

*Отказ от ответственности: это примерные наборы данных, поэтому никаких претензий со стороны производителя автомобиля. РЖУ НЕ МОГУ*

Спасибо за ваше драгоценное время. До скорой встречи в другом блоге.