Производственный календарь (или календарь рабочих и праздничных дней) – одна из важных составляющих многих отчетов и инструментов планирования.

Из-за “плавающих” выходных и праздничных дней в России мы не можем каждый год использовать один и тот же набор данных.

Лично у меня ежегодно возникает вопрос – где скачать производственный календарь. Желательно в удобном формате Excel и с наименьшими трудозатратами. И вот совсем недавно я нашёл для себя решение, которое, уверен, пригодится многим.

Для автоматизации процесса нам понадобится

  • Microsoft Excel (2010, 2013 или 2016)
  • Страничка на портале Открытых Данных России откуда можно скачать производственный календарь в csv формате: http://data.gov.ru/opendata/7708660670-proizvcalendar.

* для Excel 2010 и 2013 вам понадобится бесплатная надстройка Power Query, скачать можно отсюда.

Как страничка выглядит на момент написания данной статьи – возможность скачать актуальную версию проиводственного календаря


На странице так же доступны предыдущие версии и версия производственного календаря в xlsx:


В Excel 2016 для решения подобных задач у нас есть группа кнопок “Скачать и преобразовать” (Get & Transform) на закладке меню “Данные” (Data).


Для Excel 2010 и Excel 2013 такой же функционал доступен в виде бесплатной надстройки Power Query, можно скачать отсюда. Функционал надстройки развивается каждый месяц, я рекомендую регулярно обновляться, чтобы всегда иметь под рукой новейшие функции и возможности трансформации данных.

Когда все нужные программы установлены и источник информации исследован – вернемся к задаче.

Для скачивания чего-либо из Интернета нам нужна ссылка на файл или страницу.

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

Паспорт содержит важную информацию о наборе, из которой, в частности, мы можем взять “Гиперссылку (URL) на набор данных”


Скопируем URL и сделаем запрос “Из интернета”.


Вставляем ссылку на csv файл


Далее – выберем кодировку 65001 UTF-8, игнорируем авто-определение типов данных и жмём “Изменить”


Теперь необходимо преобразовать полученные данные.

  • Используем первую строку в качестве заголовков столбцов


  • Выберем нужные нам столбцы. Воспользуемся функцией “Выбор столбцов” (Select Columns)



  • Для удобства фильтрации изменим формат столбца “Год/Месяц” на “Целое число”

 


  • Воспользуемся фильтром, оставим только интересующие нас годы

 


Зададим фильтр с нужными нам условиями


  • Переименуем столбцы в порядковые номера месяцев и “Год/Месяц” в “Год”

 


  • Далее воспользуемся функцией “Отменить свёртывание других столбцов” (Unpivot Other Columns) доступной на закладке меню “Преобразование” (Transform), выделив предварительно столбец “Год”


  • Теперь выделим столбец “Значение” и разделим его на столбцы по разделителю “запятая”.


Это действие превращает таблицу в нечто ужасное с кучей столбцов. К тому же возникает непрошенный шаг – “Измененный тип1”, который нужно удалить.


Чтобы привести таблицу в нормальный вид, еще раз воспользуемся функцией “Отменить свертывание других столбцов” (Unpivot Other Columns)

  • Выделяем столбцы “Год” и “Атрибут” (далее его переименуем в месяц)


В результате получается таблица


  • Удаляем столбец “Атрибут.1” образованный из заголовков столбцов


  • Среди значений выходных и праздничных дней опубликованный календарь содержит предпраздничные дни. В некоторых сценариях их важно учитывать, так как в эти дни количество рабочих часов сокращено.

    Но если интерес представляют только нерабочие дни, то дни со звёздочкой нужно исключить из списка. Это можно сделать простым фильтром “не содержит” символ “*”


  • Осталась пара штрихов – переименовать столбцы и установить корректный тип данных


  • В заключение можно добавить столбец с датой


Используем формулу


  • Получив столбец с датой, можно убрать предыдущие столбцы


  • Важно установить корректный тип данных!


  • Осталось сохранить запрос и можно выводить его на лист


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

Полученный список может быть использован в функциях РАБДЕНЬ (WORKDAY), РАБДЕНЬ.МЕЖД (WORKDAY.INTL), а также для разметки полного календаря рабочими / не рабочими днями (что актуально для моделей в Power Pivot и Power BI).

Как обращаться к наиболее актуальному набору данных

Благодаря тому, что есть HTML представление паспорта данных на странице http://data.gov.ru/node/19107/code-passport

к нему тоже можно сделать запрос из Power Query (“Скачать и Преобразовать” / Get & Transform)

Интерес представляет блок со словами “Гиперссылка (URL) на набор”. Именно эта строка содержит ссылку на наиболее актуальный набор.


Разобраться, как это работает, вы можете, изучив xlsx-файл доступный по ссылке.

В нём вы найдёте несколько запросов


Для упрощения жизни разработчиков моделей в Power Pivot и Power BI, запрос на получение списка выходных дней доступен в виде функции в моей коллекции функций на Github – List.Dates.HolidaysRU

Если вы знаете, где можно найти такую же официальную информацию для СНГ стран, в частности, Казахстана, Украины и Республики Беларусь, оставьте комментарий со ссылкой. А ещё лучше – pull request в проект с соответствующими функциями.

Leave a Reply