Новый инструмент рассылки BW-отчетов в «Ленте»: архитектура решения и сценарии применения

от автора

Всем привет, меня зовут Сергей Шаблыкин. Я работаю архитектором домена 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.

 Лист со значениями селекционного экрана на фоне страницы данных

 Лист со значениями селекционного экрана на фоне страницы данных

Какие результаты мы получили

  1. Предложенное решение позволяет полностью (импорто)заместить SAP BI Platform в части рассылок BW-отчетов: новый инструмент реализует больше функциональных возможностей и проще в эксплуатации.

  2. Подключение нового отчета к рассылке занимает 10-15 мин. При стандартных требованиях к форматированию можно воспользоваться базовым классом report-maker unit — программирование не требуется.

  3. Если необходимо сделать контент рассылки в чем-то уникальным, наследуйте 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 используете вы? Как подобные рассылки экономят рабочее время в ИТ и время бизнес-пользователей?


ссылка на оригинал статьи https://habr.com/ru/articles/843626/