Записки охотника

Производственный календарь

Собственные разработки
Рвав-рвав, всем хорошего настроения!

Представляем вашему вниманию свою 1-ю разработку комплекта отчетности «Офисная жизнь» — отчет «Производственный календарь».
Итак, начинаем.

Описание решения

Календарь реализован при помощи DAX и Power Query, это уже 4-я реинкарнация описываемого решения.
В отчете «Производственный календарь» реализованы следующие расчеты:
  • Общее количество календарных дней.
  • Общее количество рабочих дней, при этом отдельно выделены сокращенные рабочие дни.
  • Количество рабочих часов, которое считается отдельно в зависимости от продолжительности рабочей недели.
  • Количество нерабочих дней, а именно выходных, праздничных, и так называемых «перенесенных» нерабочих дней.
Производственный календарь: представление данных
Календарь является параметрическим, то есть он может работать не только в течении календарного года, но и вне его рамок. Параметры задаются на уровне пользователя. При желании, данный функционал можно использовать в качестве фискального года.
Отчет содержит 3 листа:
  • Лист «Навигатор» — титульный лист отчета, содержащий навигационное меню, маркетинговую информацию, и контакты для связи с разработчиком решения.
  • Лист «Календарь» — собственно, сам отчет, содержащий сводные показатели производственного календаря.
  • Лист «Информация» — памятка пользователя.
Основные элементы:
  • «Карточка» нового образца.
  • «Срез» в виде выпадающего списка.
Дополнительные элементы:
  • Навигатор.
  • Скрывающаяся панель фильтров.
  • Кнопка.
  • Иконка.
  • Изображение.
  • Текстовое поле.
  • Эмодзи.
Рвав-рвав, на мой взгляд дизайн получился вполне себе неплохим, а не согласные пусть себе не соглашаются, будете обзываться — покусаю!

Процесс разработки

  • Для указания базового промежутка времени на уровне Power Query были созданы параметры «Начало периода» и «Конец периода» — это даты начала и окончания периода, которые выведены в название отчета.
  • Создана таблица «Календарь» — базовая таблица, определяющая набор дат для расчета.
  • Создана таблица «Праздники» — таблица настройки, содержащая список российских праздников, например, «1-е января 2019 года». Данная таблица является локальной, однако ее заполнение не составит особого труда.
Рвав-рвав, лично я справляюсь минут за 5, правда у меня 4 лапы)
  • Создана таблица «Переносы» — таблица настройки, содержащая даты так называемых «перенесенных» дней, например, в 2019 году 2-е мая является нерабочим днем за счет 5-го января, выпавшего на субботу. По временя заполнения та же песня, хватит 5-ти минут, но, в отличии от предыдущей таблицы, этот список не является постоянным из года в год, и утверждается постановлением Правительства примерно в октябре. То есть, условия корректной настройки отчета на следующий год будут известны в 4-м квартале текущего.
Рвав-рвав, попросил хозяина погуглить, самому неудобно.
  • Создана таблица «Длительность недели» — справочник, определяющий продолжительность рабочей недели, поскольку неделя может быть, в общем случае, не только 40-ка часовой, но и сокращенной (36 часов, 24 часа), в зависимости от вредности работы. К тому же учтено, что перед федеральными праздниками продолжительность рабочего дня на 1 час меньше, например, 11-го июня 2019 года работать будем 7 часов при 40-ка часовой рабочей неделе.
  • Создана таблица «Меры» — техническая таблица, созданная для удобства.
Рвав-рвав, таблица пуста, аки моя миска вечером (еда нынче в дефиците, поскольку размер миски существенно меньше того, что я могу съесть «не отходя от кассы»). Однако создана табличка не просто так, я туда меры складываю (надо написать отдельно в блог, если не забуду).
  • Создана таблица «Параметры» — содержит параметры отчета, о которых говорил в самом начале (отсекаем нужный отрезок времени, но обычно это календарный год).
Рвав-рвав, с Power Query, пожалуй, все.
  • Дальше не забываем создать нужные связи в нашей модели данных — это один из важнейших этапов в любой разработке на Power BI:
Производственный календарь: модель данных
  • Затем, при помощи DAX, начинаем формировать нужные аналитические разрезы, например, год, номер квартала, название квартала и все такое прочее. В получившийся массив данных, конечно же, необходимо добавить некоторое количество расчетных столбцов, например, итоговый тип дня, так как в связи с переносом рабочие дни становятся нерабочими. После этого рассчитываем кучу мер, складываем для удобства в отдельный «горшочек» (см. таблицу «Меры»).
Рвав-рвав, кстати говоря, продолжительность рабочей недели — это так называемая «переключаемая мера», сделать которую потянет на небольшой кейс, как-нибудь расскажу отдельно.
  • Когда все готово, можно приступать к предварительной визуализации данных.
  • Последний шаг — это раздумья над дизайном, но тут на вкус и цвет товарищей нет.

Ключевые преимущества

Из песни слова не выкинешь, а потому ниже представлен небольшой список того, о чем обязательно, на наш взгляд, стоит сказать в итоге.
Ключевые преимущества описанного решения заключаются в следующем:
  • Скорость работы. Благодаря тому, что данные календаря, а именно список нерабочих дней, формируются локально (мы не парсим какой-то сайт, который, к тому же, может быть недоступен), при изменении параметров периода обновление занимает 5 секунд (!).
Рвав-рвав, граждане, даже я за это время велосипедиста с трудом догоню! (Если, конечно, хорошенько перед этим поем, хе-хе).
  • Настройка отчета занимает 10 минут (!) в год, все происходит легко и непринужденно.
  • Календарь может работать, как уже говорилось выше, вне календарного года, это можно использовать для формирования фискальных календарей.
  • Учтена разная продолжительность рабочей недели, и, собственно, предпраздничных дней.
  • Имеются различные разрезы времени (год, квартал, месяц, неделя) в различных вариациях (например, полные и короткие названия).
  • Гибкость. При реализации используется стандартный механизм построения производственного календаря, но, как вы уже поняли, в нем можно учитывать и «индивидуальные особенности», например, дополнив таблицу праздников собственными датами.
  • Универсальность. Данный отчет, или примененную в нем логику, можно встраивать в другие ваши решения Power BI, поскольку очень редко какая-либо разработка обходится без календаря.
  • Отдельно настроено отображение отчета на мобильном устройстве.
В общем, удобство и простота — наше кредо!
Что-то я устал писать, пойду погоняю кошек и спать…
До новых встреч!

Ваш Смайл