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