При работе с датами может возникнуть необходимость проанализировать эффективность рабочих и выходных дней или просто иметь производственный календарь.
Для работы необходимо получить список выходных и праздничных дней, сделать его доступным для PowerBI. Каким образом задача была решена:
- Найден источник информации по выходным и праздничным дням (производственный календарь).
- Данные из него получены в удобном формате.
- Список всех выходных дней размещен в доступном месте.
Итак, по порядку. Поиск производственного календаря был завершен на сайте hh.ru, для каждого года свой календарь расположен по ссылкам вида https://hh.ru/article/calendar2020, где последние четыре цифры это год. Далее встала задача получить данные только по выходным дням. Для этого я использовал jQuery и консоль браузера. Код подлежащий выполнению выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
jQuery('li.calendar-list__item').each(function(){ var m = jQuery(this).find('div.calendar-list__item__title').text(); // для 2020 года заменить в строке выше item__title на item-title switch(m){ case 'Январь': m='01'; break; case 'Февраль': m='02'; break; case 'Март': m='03'; break; case 'Апрель': m='04'; break; case 'Май': m='05'; break; case 'Июнь': m='06'; break; case 'Июль': m='07'; break; case 'Август': m='08'; break; case 'Сентябрь': m='09'; break; case 'Октябрь': m='10'; break; case 'Ноябрь': m='11'; break; case 'Декабрь': m='12'; break; } i = 1; jQuery(this).find('li.calendar-list__numbers__item').each(function(){ if( jQuery(this).attr('class') != 'calendar-list__numbers__item calendar-list__numbers__item_other' ){ var t = jQuery(this).text().trim(); var happy = t.indexOf('Выходной день') != -1 ? 1 : 0 ; var d = i>9 ? i : '0' + i ; if( happy == 1 && i<=31) { console.log( d + '.' + m + '.2020'); // 2020 заменить на нужный номер года } i++; } }); }); |
Возможно не самое оптимальное и красивое решение, но я не профессиональный кодер и буду рад вашим доработкам этого решения. Как пользоваться кодом:
- Открываете ссылку вида https://hh.ru/article/calendar2020
- Меняете в строке console.log( d + ‘.’ + m + ‘.2020’); значение 2020 на последние четыре цифры из ссылки
- Копируете код в консоль и запускаете выполнение
- Отображается список выходных дней
Результат выполнения скрипта:
Теперь мы имеем список выходных дней за один год, далее для создания производственного календаря в Power BI, создаем таблицу Google Docs:
Копируем из консоли браузера наш список и вставляем в первую ячейку таблицы, получаем примерно следующее:
Как видно в списке есть «лишняя» информация вида VM344:26 , она переносится из консоли:
Чтобы избавиться от нее используем возможности поиска и замены в таблицах, не забывая про то, что последним символом в строке должен быть пробел если такая строка находится перед датой, а если после даты, то пробел ставим в начале!
После всех манипуляций у нас получается список дат, которые являются выходными и праздничными днями. Если есть необходимость в одном списке иметь данные из производственного календаря за различные годы, то необходимо повторить действия для каждого года, только каждый раз полученный список выходных дней из консоли копировать в конец таблицы убирая ненужную часть фрагмента строки. Теперь у вас есть своя таблица выходных дней и можно с ней работать, опубликуем ее для получения списка в формате CSV:
Следующим шагом данные по выходным дням нужно получить в Power BI, при необходимости изменив тип данных с таблицы на список (на скриншоте таблица):
Для построения полноценного календаря можно использовать решение Максима Уварова, в котором, при необходимости, можно использовать описанное выше решение по формированию списка выходных дней в PowerBI.