Всем привет, меня зовут Сергей Шаблыкин. Я работаю архитектором домена BI в компании «Лента». Сегодня поделюсь описанием архитектуры рассылки отчетов SAP BW, которая помогает отказаться от тяжеловесного стандартного SAP-решения и получить много дополнительных преимуществ в части экономии времени сотрудников и ресурсов компании.
Предыстория
Мы используем SAP BW на SAP HANA уже более 10 лет. Когда-нибудь мы напишем статью об успешном импортозамещении SAP BW, но пока это время еще не пришло. За все годы у нас сложился успешный сценарий получения пользователями отчетов через рассылки: сотни пользователей получают их в определенном формате и с требуемыми фильтрами. Есть выгоды и для ИТ: мы получаем меньше жалоб на производительность SAP BW, ведь без рассылки сотни людей заходили бы в систему, причем примерно в одно и то же время.
С выходом SAP BW/4 вендор поменял реализацию сценария, и теперь для него требуется SAP Business Objects BI Platform – мощное, но тяжеловесное решение. Так сложилось, что от этой платформы нам нужна только рассылка. Другие компоненты платформы проиграли в свое время конкурентную борьбу. Но из-за рассылок приходится ее «терпеть», в том числе все нынешние сложности с обновлением, поддержкой и рядом функциональных недостатков. Это становится проблемой, так как не только усложняет эксплуатацию того, что есть, но и не позволяет расширяться.
Так и родилась идея сделать новое решение по рассылке, которое будет лучше и дешевле в эксплуатации. И, что не менее важно, оно будет реализовано на нашей стороне с расширенными возможностями по техподдержке и возможностью его дальнейшей доработки.
В нашей компании всегда поддерживаются инициативы по созданию quick-win-решений, улучшающих бизнес-процессы и положительно влияющие на наши KPI. В рамках одной из инициатив, на базе open-source-технологий, мы реализовали решение для формирования отчетов SAP BW для рассылки. Открытость и гибкость архитектуры решения позволит в будущем убрать из названия «SAP BW» и сделать его универсальным.
Как выглядит архитектура
При разработке решения использовались следующие продукты, фреймворки и библиотеки:
Web-server (MS ISS);
python framework dash-plotly (frontend);
python libraries, в т.ч. openpyxl для генерации xlsx-файлов;
SAP NetWeaver RFC library (для вызова ABAP-FM из python-кода);
SAP BW/4 (данные - в BW-отчетах, метаданные - в таблицах BW, чтение данных через ABAP API).
Реализованы два сценария запуска рассылки отчетов: по требованию пользователя и по расписанию.
Сценарий запуска по требованию пользователя
В первом сценарии пользователь через браузер заходит на главную страницу со списком BW-отчетов, которые подключены для рассылки и для которых он имеет полномочия на выполнение. Далее, он выбирает отчет и указывает параметры селекционного экрана. Когда все готово, нажимает кнопку «Начать загрузку». Модуль coordinator через ABAP API:
сохраняет выбранные параметры селекционного экрана BW-отчета в таблице метаданных на стороне SAP BW;
запрашивает и получает данные BW-отчета;
передает их в соответствующих report-maker unit, которые отвечают за создание контента: форматированного xlsx-файла или html-контента для e-mail;
когда контент готов, он направляется по соответствующему каналу: либо в виде xlsx-файла, который выгружается через браузер, либо через email.
Настройки списка e-mail-получателей рассылки, как и другие метаданные, ведутся администратором через экранные формы в SAP BW/4. При необходимости, разработчик создает/изменяет report maker units для создания уникального форматирования в xlsx или html для e-mail.
Если уникального форматирования для отчета не требуется, используется универсальный параметризируемый report-maker-unit, который поставит левый верхний угол таблицы в заданную ячейку, добавит автофильтры, зафиксирует области прокрутки, откорректирует ширину ячеек и применит стилевое оформление аналогичное SAP Analysis. Кроме того, в xlsx-файле создается отдельный лист со значениями параметров селекционного экрана, чтобы пользователь мог уточнить, каким критериям соответствуют данные на листе с отчетом.
Сценарий запуска по расписанию
Второй сценарий предназначен для рассылки контента (xlsx-файлов или html-страницы) по email по заданному расписанию. Расписание рассылки отчета определяется в cron-формате и сохраняется в метаданных. Сoordinator на сервере запускает фоновый процесс с дискретностью 1 раз в 10 мин, который проверяет для всех отчетов второго сценария время следующего запуска по их cron-выражениям. Если это время оказывается в прошлом, рассылка этого отчета запускается и по cron обновляется время следующего старта рассылки.
Принцип подготовки контента рассылки аналогичен первому сценарию с той лишь разницей, что во втором случае отсутствует шаг выбора пользователем значений селекционного экрана – значения уже должны быть сохранены в метаданных на стороне SAP BW/4.
Какие результаты мы получили
Предложенное решение позволяет полностью (импорто)заместить SAP BI Platform в части рассылок BW-отчетов: новый инструмент реализует больше функциональных возможностей и проще в эксплуатации.
Подключение нового отчета к рассылке занимает 10-15 мин. При стандартных требованиях к форматированию можно воспользоваться базовым классом report-maker unit - программирование не требуется.
Если необходимо сделать контент рассылки в чем-то уникальным, наследуйте python-класс от базового и перекрывайте методы генерации. Даже для python-джуна дело на час-два. И voilà! Если заказчик, конечно, не попросит, условно, множества «перламутровых пуговиц».
А сценарий запуска выгрузки по требованию пользователей позволяет каждому такому пользователю ежедневно экономить примерно полчаса-час рабочего времени, которое расходуется на подготовку выполнения BW-отчетов в SAP Analysis (без учета длительности выполнения).
Если во всей компании с несколькими тысячами сотрудников таких людей наберется хотя бы 8-16, то мы уже получаем «виртуальную» экономию примерно 1 FTE в год. А то, что данная автоматизация избавляет от утомительных повторяющихся действий в SAP Analysis по выгрузке в Excel, переоценить вообще сложно.
Планы развития решения
Новые источники данных. Кроме SAP BW/4, еще и отдельные СУБД, файлы, REST и т. д;
Новые специфичные для каждого отчета report-maker-unit. В метаданных отчета указывается python-модуль и python-класс, который и реализует генерацию его контента, будь то xlsx-файл или html для e-mail. И координатор динамически вызывает метод соответствующего класса из модуля;
Новые каналы распространения данных: сохранение в общую папку, сохранение в S3-хранилище;
Новые сценарии запуска рассылки: запуск по внешнему событию;
Переезд на unix-based web-server;
Создание мобильного приложения.
Мы планируем инвестировать в развитие этого решения с целью расширения возможностей его применения внутри компании «Лента». Также мы открыты к обсуждению и предложениям по сотрудничеству в плане коммерческого использования и [совместной] разработки нового функционала.
Коллеги, поделитесь, какие инструменты для выгрузки отчетов в Excel используете вы? Как подобные рассылки экономят рабочее время в ИТ и время бизнес-пользователей?