Image

Как реализовать три варианта использования новой календарной временной аналитики

Будущее выглядит очень интересным с этой новой функцией.

Делиться

44b3c34dab7c1d4c1ee54c08623be258

Введение

В прошлом я много писал о Time Intelligence в DAX.

Однако новая функция Time Intelligence на основе календаря меняет правила, поскольку некоторые концепции изменятся, а требуемые методы станут проще, чем раньше.

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

В этой статье я рассмотрю три варианта использования, для которых мне пришлось бы написать сложный код DAX.

Теперь давайте обсудим варианты использования.

Варианты использования

Финансовый календарь

При работе с финансовыми данными может потребоваться учёт более 12 месяцев для управления дополнительными бронированиями. Некоторые компании использовали такие дополнительные месяцы для обеспечения согласованности с обычными бронированиями.

До сих пор это было возможно только с помощью специального кода DAX.

Теперь мы можем создать собственный календарь и использовать с ним стандартные функции анализа времени.

Этот вариант использования имеет следующие требования:

  1. Мы должны охватить 15 месяцев в году.
  2. Нам нужны два представления: одно для месяцев бронирования и одно, где дополнительные месяцы сопоставляются с декабрем.
  3. Мы смотрим на данные PY; мы должны видеть все дни, включая високосные годы (29 февраля).

Еженедельные расчеты

Я уже писал о еженедельных расчётах. Для этого потребовался специальный код DAX, поскольку функции WDT не было, и рассчитать предыдущий год по неделям было невозможно.

Опять же, теперь это можно легко сделать с помощью календаря, содержащего информацию о неделе, а также новых функций TOTALWTD() и DATESWTD().

Еженедельный расчет по финансовым годам

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

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

Предпосылки

Первым условием является включение функции предварительного просмотра:

146362fea203c7f841455d13b3dba612

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

Как и прежде, грамотно составленная таблица дат является ключевым фактором для работы с Time Intelligence, а теперь, с появлением новой функции, это становится еще важнее.

При работе с новыми возможностями Time Intelligence нам необходимо сделать три шага:

  1. Мы строим таблицу дат и определяем, какие столбцы нам нужны для каждого варианта использования.
  2. Затем мы определяем календарь для этой таблицы, назначая столбцы периодам, например, году, кварталу, месяцам, неделям и датам.
  3. Создайте показатели DAX, используя календарь, определенный на шаге 2.

Первые два шага одинаково важны, поскольку таблица должна быть тщательно составлена, чтобы охватить требуемые периоды.

Определение календаря позволяет нам использовать столбцы в таблице дат для назначения им предопределённых категорий. Скоро вы поймёте, что это значит.

Я опишу содержимое таблицы дат с примерами данных для каждого варианта использования.

Случай 1: Финансовый календарь

Прежде всего я создаю таблицу, содержащую следующую информацию:

  • Годы
  • Семестры (1 и 2 плюс третий для дополнительных месяцев)
  • Кварталы (с 1 по 4 и пятый квартал для дополнительных месяцев)
  • Месяц 1–15
  • Названия всех 15 месяцев (янв.–дек. и дополнительные месяцы 1–3)
  • 31 день в каждом месяце, даже в тех месяцах, в которых обычно меньше 31 дня
  • Квартал и месяцы, где дополнительные месяцы сопоставляются с декабрем

Вот как это выглядит с двумя примерами на столбец:

Имя столбца Пример
ID_Дата 20060101
20061301
Дата_Реальная 2006.01.01
Н/Д
Год 2006
ID_месяц 200601
200613
Месяц 1
13
День 1
Дата_немецкая 01.01.2006
01.13.2006
Дата_EN 01/01/2006
13.01.2006
НазваниеМесяца Январь
Дополнительный месяц 1
МесяцНазваниеКраткое Янв
Добавить месяц 1
ГодМесяцНазвание Январь 2006 г.
Дополнительный месяц 1 2006 г.
ГодМесяцИмяКраткое Январь 2006 г.
Добавить месяц 1 2006
Семестр 1
3
Название семестра Семестр 1
Семестр 3
ГодСеместр 20061
20063
ГодСеместрНазвание 1 семестр 2006 г.
3 семестр 2006 г.
Четверть 1
5
QuarterName Квартал 1
Квартал 5
ГодКвартал 20061
20065
ГодКварталНазвание 1 квартал 2006 г.
5 квартал 2006 г.
КалендарьМесяц 1
12
CalendarMonthName Январь
декабрь
КалендарьМесяцНазваниеКраткое Янв
Декабрь
КалендарьГодМесяц 200601
200612
КалендарьГодМесяцНазвание Январь 2006 г.
Декабрь 2006 г.
КалендарьГодМесяцНазваниеКраткое Январь 2006 г.
Декабрь 2006 г.

Два примера: один для января и один для первого дополнительного месяца.

Вот другой вид данных для дополнительных столбцов и строк:

932791993c8860709b0994b763a3364c

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

Пример объединения таблиц со списками чисел вы можете найти в этой статье.

Но главное, что я могу свободно определять содержимое календаря. Даже столбец «Дата» не обязательно должен содержать реальные даты, поскольку в моём случае там только строки.

После импорта нового календаря в Power BI мы можем открыть новое диалоговое окно «Параметры календаря», щелкнув таблицу:

90791eee3863adf9bce9f8f947d10ad2

Теперь я создам два новых календаря.

Обратите внимание, что я не могу установить новую таблицу как таблицу дат, поскольку она содержит несуществующие «даты», например, 30 февраля.

Я нажимаю «Добавить категорию», чтобы добавить, например, год, месяц и месяц года, и назначаю им столбцы с данными:

d7e29827e4035676879b944111b76654

При настройке календаря не забудьте нажать кнопку «Проверить данные» после добавления каждой категории. Это поможет вам обнаружить ошибки в данных, если они есть.

Эта кнопка проверяет, имеет ли каждое значение отношение «многие к одному» к каждому значению в категории выше.

Например, каждый месяц должен относиться к одному году. Категория «Месяц» должна содержать месяц и год, а категория «Месяц года» — только месяц.

В качестве основного столбца я выбрал столбцы идентификаторов, а в качестве ассоциированных столбцов — столбцы наименований с различными форматами и языками.

Подробную информацию о работе этой функции можно найти по ссылкам в разделе «Ссылки» ниже.

Чтобы иметь календарь, в котором дополнительные месяцы привязаны к декабрю, я создал следующий календарь:

43b3dc6463bf9338caeebfaf3933c238

Я не настраивал колонки для квартала в «реальном» календаре, потому что в моем сценарии они не нужны.

Для расчета годового дохода (PY) для онлайн-продаж я могу использовать функцию SAMEPERIODLASTYEAR(). Но вместо столбца «Дата» я передаю название финансового календаря:

Онлайн-продажи Fin PY = CALCULATE([Сумма онлайн-продаж], SAMEPERIODLASTYEAR('Финансовый_календарь'))

Если посмотреть на результаты за високосный год, то получится следующее:

61ed2c72b6cf82d639e867ea88f806a6

А если посмотреть на результаты за дополнительные месяцы, то получится следующее:

fc664cc6b149a4b50c6400915bab9654

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

Кроме того, в правой таблице вы можете увидеть значения за декабрь и дополнительные месяцы (из левой таблицы), добавленные к декабрю с использованием «реального» календаря.

Наличие такого простого решения является новаторским.

Теперь давайте рассмотрим еженедельные расчеты.

Случай 2: Еженедельный расчет

На этот раз я хочу рассчитать PY за неделю.

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

На этот раз я использовал существующие столбцы из моей таблицы дат:

ГодНедели WeekKey Год/Неделя Неделя Дата День недели Название дня недели
2025 202501 2025/1 1 30/12/2024 1 Понедельник
2025 202501 2025/1 1 31/12/2024 2 Вторник
2025 202501 2025/1 1 01.01.2025 3 Среда
2025 202501 2025/1 1 02/01/2025 4 Четверг
2025 202501 2025/1 1 03/01/2025 5 Пятница
2025 202501 2025/1 1 04/01/2025 6 Суббота
2025 202501 2025/1 1 05/01/2025 7 Воскресенье
2025 202552 2025/52 52 22/12/2025 1 Понедельник
2025 202552 2025/52 52 23/12/2025 2 Вторник
2025 202552 2025/52 52 24/12/2025 3 Среда
2025 202552 2025/52 52 25/12/2025 4 Четверг
2025 202552 2025/52 52 26/12/2025 5 Пятница
2025 202552 2025/52 52 27/12/2025 6 Суббота
2025 202552 2025/52 52 28/12/2025 7 Воскресенье

Как видите, столбец [YearOfWeek] привязан к неделе, а не к календарному году. Я сделал это, чтобы гарантировать правильное назначение недели году. Без этого проверка календаря не пройдёт, поскольку столбец [WeekKey] для первой календарной недели каждого года будет привязан к двум разным годам.

Это показывает, насколько важно создать последовательную календарную таблицу.

Вот определение недельного календаря:

b67970e41847cea2e313534aa8a99b4a

А вот результаты измерения с использованием этого календаря:

bfa0abe75be777618b4396f74cf9cc23

Как и прежде, мера использует простой вызов SAMEPRIODLASTYEAR() и использует недавно созданный «еженедельный календарь»:

Онлайн-продажи за неделю (PY) = CALCULATE([Сумма онлайн-продаж] ,SAMEPERIODLASTYEAR( 'Еженедельный календарь' ) )

Сравните это со сложным кодом, который у вас был до внедрения этой новой функции для расчета последовательного еженедельного показателя PY.

Вот результаты измерения с использованием новых показателей WTD:

d7333dcb86fd31a99aeac1312ecc4c91

Вот используемые меры:

Онлайн-продажи WTD = VAR WtdDates = DATESWTD('Еженедельный календарь') RETURN CALCULATE([Сумма онлайн-продаж] ,WtdDates ) Онлайн-продажи PY WTD = CALCULATE([Онлайн-продажи WTD] ,SAMEPERIODLASTYEAR('Еженедельный календарь') )

Почти невероятно, насколько легко создавать эти меры.

Случай 3: Еженедельный расчет с учетом финансовых лет

Этот вариант более сложный.

В этом случае финансовый год начинается первого августа.

Это означает, что первой неделей финансового года является неделя с первым днем финансового года.

Я настроил все столбцы в таблице «Даты». Вот выборка необходимых столбцов:

Финансовый год за неделю Финансовый год Неделя Сортировка FiscalWeekSort Финансовая неделя/год Финансовая неделя Дата Финансовый день недели Название дня недели
25/26 252601 1 1 – 25/26 1 28/07/2025 1 Понедельник
25/26 252601 1 1 – 25/26 1 29/07/2025 2 Вторник
25/26 252601 1 1 – 25/26 1 30/07/2025 3 Среда
25/26 252601 1 1 – 25/26 1 31/07/2025 4 Четверг
25/26 252601 1 1 – 25/26 1 01/08/2025 5 Пятница
25/26 252601 1 1 – 25/26 1 02/08/2025 6 Суббота
25/26 252601 1 1 – 25/26 1 03/08/2025 7 Воскресенье
25/26 252652 52 52 – 25/26 52 20/07/2026 1 Понедельник
25/26 252652 52 52 – 25/26 52 21/07/2026 2 Вторник
25/26 252652 52 52 – 25/26 52 22/07/2026 3 Среда
25/26 252652 52 52 – 25/26 52 23/07/2026 4 Четверг
25/26 252652 52 52 – 25/26 52 24/07/2026 5 Пятница
25/26 252652 52 52 – 25/26 52 25/07/2026 6 Суббота
25/26 252652 52 52 – 25/26 52 26/07/2026 7 Воскресенье

Опять же, мне нужно добавить дополнительную колонку для финансового года, назначенную неделям.

Но на этот раз мне нужно создать отдельную таблицу с необходимыми столбцами. По какой-то причине использование этих столбцов из таблицы Date не работает. Любая попытка использовать эти столбцы приводила к странному эффекту.

Подробнее об этом можно прочитать здесь.

В итоге я добавил расчетную таблицу с необходимыми столбцами:

Дата финансовой недели = CALCULATETABLE( SUMMARIZECOLUMNS( 'Дата'[FiscalYearForWeek] ,'Дата'[Финансовая неделя/год] ,'Дата'[Сортировка финансовой недели] ,'Дата'[Название дня недели] ,'Дата'[День недели] ,'Дата'[Дата] ,'Дата'[Ключ даты]) ,NOT ISBLANK('Дата'[FiscalYearForWeek] ) )

Календарь, созданный на этой таблице, выглядит так:

7f4408b436a20a2625d587659d746d8c

Метод расчета объема продаж за предыдущий год, опять же, прост:

Онлайн-продажи PY (финансовая неделя) = CALCULATE([Сумма онлайн-продаж] ,SAMEPERIODLASTYEAR('Календарь финансовой недели') )

Вот результаты:

b2bf8820e06cfdac114e80be7d3355c4

Видно, что результат идеально совпадает с неделей и днем недели предыдущего года, хотя даты и смещены.

Это именно то, чего я ожидал.

Заключение

Эта новая функция меняет все, что касается Time Intelligence с DAX.

Но, хотя мы можем упростить наши показатели DAX, необходимо проявлять особую осторожность при составлении таблиц дат. Всё дело в правильном содержании.

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

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

Я обязательно воспользуюсь этой функцией при запуске новых решений.

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

Задумайтесь об этом на мгновение:

Действительно ли хорошая идея размещать два разных календаря на одной странице? Будут ли результаты при этом сопоставимы? Может ли это запутать ваших потребителей?

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

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

Ссылки

Ниже представлена документация Microsoft по аналитике времени на основе календаря: Реализация вычислений на основе времени в Power BI – Power BI | Microsoft Learn.

В этой статье SQL BI эта новая функция описывается очень подробно: Знакомство с аналитикой времени на основе календаря в DAX – SQLBI.

Как и в предыдущих статьях, я использую пример набора данных Contoso. Вы можете бесплатно скачать набор данных ContosoRetailDW с сайта Microsoft здесь.

Данные Contoso можно использовать свободно по лицензии MIT, как описано в этом документе. Я изменил набор данных, чтобы сместить данные на современные даты.

Источник: towardsdatascience.com

✅ Найденные теги: Как, новости

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых