Русский
Русский
English
Статистика
Реклама

Отчетность

Ещё один шаг в сторону open source как и почему мы внедрили Arenadata DB

22.04.2021 10:12:30 | Автор: admin

Привет, Хабр! Меня зовут Станислав Маскайкин, я архитектор аналитических систем ВТБ. Сегодня я расскажу о том, почему мы перевели нашу систему подготовки отчётности с Oracle SuperCluster на российскую Arenadata DB. Как мы выбирали решение, почему не взяли чистый опенсорс, а также о некоторых результатах такой миграции под катом.

Зачем нужен был переход?

Несколько лет назад банк ВТБ объединился с Банком Москвы и ВТБ 24. Каждый из банков имел собственную ИТ-инфраструктуру с отдельным аналитическим контуром. После объединения получилось, что в банке одновременно существуют три разных ИТ ландшафта.

Само по себе владение тремя разными системами это тройные затраты на инфраструктуру, поддержку и развитие. Но в нашем случае было ещё несколько факторов.

С точки зрения законодательства любой банк должен регулярно сдавать отчётность проверяющим органам. После объединения эту отчётность мы должны были сдавать уже по единому ВТБ. Имея три разрозненные системы, решать эту задачу можно было разве что вручную.

Исторически ВТБ24 был ориентирован на работу с физическими лицами, ВТБ на работу с юридическими лицами, а Банк Москвы на работу и с первыми, и со вторыми.

На момент объединения этих банков обязательная отчётность формировалась в следующих системах:

  1. Единое хранилище данных (ЕХД) хранилище данных Банка Москвы, реализованное на SuperCluster M8 и ETL-инструменте Informatica Power Center.

  1. Система подготовки отчётности хранилище данных ВТБ24, реализованное на Oracle SuperCluster M8 с программным обеспечением Diasoft Flextera BI. Данные для этой системы готовились в другом хранилище корпоративном хранилище данных (КХД), реализованном на СУБД Teradata и ETL-инструменте SAS Data Integration. КХД, в свою очередь, получало данные из оперативного хранилища данных, реализованного на Oracle SuperCluster M8. А туда они реплицировались из автоматизированных банковских систем при помощи инструмента Oracle Golden Gate.

  1. Корпоративное информационное хранилище хранилище данных ВТБ, реализованное на Oracle Exadata X8-2 и ETL-инструменте Informatica Power Center.

Чтобы не формировать обязательную отчётность по объединённому ВТБ в ручном режиме, были созданы интеграции между хранилищами данных.

Это привело к ещё двум большим проблемам:

  1. Увеличилось время получения данных, что часто приводило к срыву сроков предоставления информации.

По правилам ЦБ РФ отчётность за очередной месяц сдаётся в течение первых четырех дней следующего месяца. В банке под это задействуются огромные вычислительные мощности. Если первые дни месяца попадают на рабочие дни (как в марте), мы даже не имеем возможности вернуться и что-то пересчитать это риск для банка не сдать отчётность вовремя. Повышение доступности данных на этом уровне играет огромную роль.

  1. Из-за большого количества расчётов в хранилищах и копирования данных выросло количество инцидентов с качеством этих данных, что тоже очень сильно влияет на сроки предоставление отчётности.

Ещё один момент: многие компоненты нашей инфраструктуры, такие как Oracle SuperCluster, на котором у нас реализована большая часть аналитического ландшафта, попали под End of life. Они были сняты с поддержки производителем и больше не развивались, т.е. обновление необходимо было в любом случае.

Проблема окончания поддержки коснулась не только системы подготовки отчётности, но и озера данных на платформе Oracle Big Data Appliance. К тому моменту а происходило все в 20182019 годах сотрудники ВТБ уже в полной мере оценили data-driven подход и потребляли достаточно много данных. Поэтому с точки зрения бизнеса банка система была критичной. Т.е. перед нами стояла более глобальная задача масштабов всей инфраструктуры.

Параллельно в объединённом ВТБ началась масштабная цифровая трансформация, охватившая все уровни IT, начиная от создания новых ЦОДов и объединения сетей, и заканчивая унификацией автоматизированных банковских систем и созданием омниканальной платформы для фронтальных решений. Всё это кардинально меняло внутренний IT-ландшафт банка.

Поэтому мы задумались не просто об обновлении продукта, решающего частную задачу сбора отчетности, а об изменении аналитического ландшафта и подходов по работе с данными.

Логичная идея создание единого аналитического контура, в рамках которого все данные будут находиться в едином хранилище данных и доступны для всех пользователей в удобном виде. Это привело нас к решению о построении платформы данных ВТБ.

Что такое платформа данных? Для себя мы определили её так: это набор сквозных интегрированных технологических решений (технологическое ядро), которые являются основой для разработки и функционирования сервисов по работе с данными банка ВТБ.

Главная часть платформы данных технологическое ядро. Это системные компоненты, которые переиспользуются на всех уровнях платформы данных.

Мы выделили 6 компонентов технологического ядра:

  1. Управление данными.

  2. Управление качеством данных.

  3. Управление доступом.

  4. Аналитические справочники.

  5. Корректировки.

  6. ETL Framework.

Концептуальная архитектура платформы данных выглядит следующим образом:

Ядром платформы данных является СУБД, на которой реализовывается хранилище данных. Далее расскажу об этом подробнее.

Выбор новой платформы

Поскольку платформа данных содержит персональные данные о клиентах и банковскую тайну, требования по надёжности и безопасности были ключевыми. Однако они не лишали нас вариантов выбора решений, которые могли бы нам подойти, было много.

Мы не просто подбирали систему по набору функций, мы смотрели в будущее. С точки зрения бизнеса нам выгоднее было искать продукт, на развитие которого мы сможем оказывать влияние. При этом разработка собственного инструмента (где все стратегии в наших руках) всё-таки не входила в наши планы. Это слишком трудозатратный подход, да и влияние других игроков рынка мы рассматривали как позитивное. Не только мы должны являться триггером для появления новых функций. Коллеги по рынку другие клиенты разработчика могли бы принести в такой продукт интересные идеи. По мере обновления версий мы получим технологическое развитие.

Мы рассматривали всех крупнейших производителей подобных решений: Oracle Exadata, Teradata, Huawei. Оценили отечественные разработки практически все, что есть на рынке. Нам показался интересным опенсорс, тем более для банка это не первый заход в тему открытого исходного кода.

В принципе, можно было бы купить железо, скачать открытый код и собрать собственную платформу данных. Но для нас это означало серьёзные риски: нужны были компетенции, чтобы доработать всё это до уровня энтерпрайза. А на момент старта проекта у нас не было уверенности в успешном завершении подобного мероприятия. Поэтому мы сформулировали ещё один критерий поставка решения в виде программно-аппаратного комплекса (ПАК), чтобы совместная работа железа и программных инструментов была протестирована с учётом версий. Так мы хеджировали риски, связанные с недостаточной экспертизой в опенсорсных решениях внутри ВТБ на момент старта проекта.

При выборе платформы мы учитывали следующие критерии:

  • функциональность

  • качество поддержки

  • отсутствие санкционных рисков

  • возможность гибкого масштабирования

  • надёжность

  • безопасность

  • наличие Road Map развития платформы и возможность на него влиять

  • стоимость владения совокупные затраты на программно-аппаратный комплекс на горизонте 10 лет (TCO5).

Если взять последний критерий, то даже с учётом стоимости всех контуров Arenadata DB и самого проекта миграции мы получали существенную экономию на фоне Oracle SuperCluster.

В итоге по совокупности факторов мы выбрали Arenadata DB.

Тестирование платформы

Перед тем, как принимать окончательное решение, мы провели серию технологических испытаний, чтобы проверить систему на работоспособность и определить параметры сайзинга для целевого решения.

В итоге нами были проведены следующие проверки.

  • Функциональное тестирование:

    • Сложность изменения запросов. Процедура предусматривает запуск исходного, не переработанного скрипта и контроль ошибок выполнения. В случае наличия ошибок, они исправляются и скрипт запускается повторно. От количества исправлений зависит оценка сложности.

  • Отказоустойчивость и отключение компонентов:

  • Отключение дисковых устройств на уровне БД для проверки стабильности работы кластера.

  • Отключение питания одного блока питания на серверах для проверки стабильности работы кластера.

  • Отключение сетевого подключения для имитации выхода из строя узла кластера в ходе тестирования отмечается, продолжил ли работать кластер, и фиксируется степень деградации производительности).

  • Совместимость со средствами резервного копирования банка:

    • Проведение цикла резервного копирования и восстановления БД на СРК Veritas Netbackup:

      • Полное резервное копирование БД

      • Инкрементальное резервное копирование БД

      • Восстановление БД

  • Управление и качество работы системы:

    • Перезагрузка кластера: фиксация успешного выполнения процедуры перезагрузки.

    • Мониторинг и управление: субъективная балльная оценка от 0 до 5.

    • Генерация тестового отчёта: прогон запроса изсистемы подготовки отчётности в Arenadata DB для анализа качества результата генерируемого отчёта результаты выполнения отчёта должны быть идентичны.

  • Нагрузочное тестирование:

    • Скорость загрузки данных

  • Интеграционное тестирование:

    • Интеграция с ПО Infomatica Power Center

    • Интеграция с Oracle BI

    • Интеграция с QlikView 12.

Результаты тестирования

В ходе тестирования кластера Arenadata DB показал высокую производительность как на синтетических тестах, так и на реальных нагрузках.

Ниже приведено сравнение скорости выполнения запросов по сравнению с текущим Oracle Super Cluster T5-8.

Тестирование проводил системный интегратор IBS Platformix.

Скорость выполнения синтетического запроса Jmeter (сек)

Arenadata DB (сек.)

Oracle (сек.)

160.3

1291

Кластер показал высокую скорость загрузки данных через ETL-инструмент Informatica Power Center: 200 Мбит/с.

В ходе тестирования была также осуществлена интеграция с основными BI-инструментами, используемыми в Банке ВТБ (Oracle BI и QlikView), и протестирован их функционал.

В QlikView на простейших SQL-запросах протестированы соединение с БД и выборка данных с последующей загрузкой в модель BI-инструмента.

Результаты выполнения представлены в таблице ниже.

Тест 1

Тест 2

Драйвер

ODBC PostgreSQL35W

ODBC PostgreSQL35W

Запрос

select * from user.test1

// 3 коротких поля

select e.* from dds.accounts e

where

e.entry_dt ='2019-02-03'

-and e.partition_source_system_cd ='00006'

and e.src_deleted is null

Строк

20480000

45 920

Затраченное время

0:58

2:59

Скорость загрузки в модель, строк в сек.

353103

257

При выполнении тестов была замечена особенность: получение первых строк данных из БД происходило с задержкой примерно в 23 секунды. После этого скорость выборки данных из БД и их доставки в QlikView становилась очень высокой.

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

Нефункциональное тестирование показало, что кластер не имеет единой точки отказа и сохраняет свою функциональность при отказе любого из компонентов.

Цель теста

Предварительные условия

Процедура

Результат

Тестирование отказа диска с данными

Отказ диска эмулируется физическим извлечением диска или логическим отключения дискового уст-ва из работающего сервера.

Подключиться к серверу

Провести процедуру unmount для физического диска

Проверить доступность данных

Данные доступны

Тестирование отказа кэширующего диска

Отказ диска эмулируется физическим извлечением диска или логическим отключения дискового устройства из работающего сервера

Подключиться к серверу

Провести процедуру unmount для физического диска

Проверить доступность данных

Данные доступны

(Отказ кэширующего диска не приводит к потере данных)

Тестирование включения кластера после эмуляции аварии

Отказ сервера при выполнении SQL запроса к базе данных, эмулируется отключением электропитания работающего сервера

Подключиться к серверу

Выполнить SQL запрос

Выключить 1 ноду

Перезапустить выполнение SQL

Данные получены при повторном SQL запросе

Благодарю Дениса Степанова и Никиту Клименко, экспертов IBS Platformix, за предоставленные результаты тестирования.

Сбор отчётности как пилот

Наша цель это миграция на Arenadata DB всех существующих хранилищ банка ВТБ.

Но в качестве пилота мы запустили перевод систем сбора обязательной отчётности проект, где обновление было наиболее критичным.

Arenadata новая для нас платформа, а в перспективе она должна была стать стратегически важным элементом архитектуры. Поэтому мы выстроили партнёрство с компанией-производителем максимально плотно, вплоть до выравнивания планов по развитию. В рамках этого партнерства часть функционала, который был нам необходим для сбора обязательной отчетности, реализовали чуть раньше. Доработки позволили нам развернуть Arenadata на разных ЦОДах, обеспечив таким образом георезервирование.

Arenadata принципиально не создает под нас отдельное решение, а немного модифицирует стандартную поставку, так что другие участники рынка тоже могут пользоваться наработками, реализованными под одного из клиентов. От такого подхода выигрывают все: и коллеги, которые могут использовать наши идеи, и мы, поскольку наша платформа не закуклится внутри инфраструктуры, а будет обновляться в соответствии с веяниями рынка.

С глобальными сложностями в ходе проекта мы не сталкивались. Да, было много переговоров, в том числе по вечерам, когда мы придумывали схемы коммутации серверов и т.п. Но не было нерешаемых вопросов. Только сложные инженерные задачи.

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

Помимо экономии на стоимости владения, мы получили эффект от увеличения скорости расчета ряда форм в разы. Это дает нам более высокую доступность данных - по нашим оценкам в два раза.

Поскольку мы уже видим результаты и детали взаимодействия, около полугода назад стартовал наш основной проект - миграция на продукты Arenadata центрального единого хранилища данных и озера данных. Помимо Arenadata DB, мы используем Arenadata Streaming на базе Apache Kafka и Arenadata Hadoop на базе Apache Hadoop. В ближайшее время первые результаты пойдут в продакшен.

Целевая архитектура платформы данных к концу 2022 годаЦелевая архитектура платформы данных к концу 2022 года

Одновременно с обновлением системы сбора отчетности мы наращивали экспертизу внутри банка. Как я упоминал выше, на момент старта мы не были уверены, что сможем запустить такое решение из чистого опенсорса с нуля. Все это время мы плотно работали с подрядчиками, которые поставляли нам необходимую экспертизу, а также через обучение и тренинги развивали экосистему партнеров. Это наш резерв по разработке, который мы сможем подключить к развитию проекта в будущем.

Подробнее..

Работа с отчетностью в системе управления данными

27.04.2021 18:13:12 | Автор: admin

Всем привет! В этой статье мы хотим рассказать о том, каким образом мы в платформе Unidata формируем отчетность. Любая работа с данными неизбежно ведет к построению специализированных отчетов, в которых пользователи могут эффективно эти данные обрабатывать и принимать на их основе бизнес-решения.

Как выбирали систему построения отчетности

Создавать модуль построения отчетов в платформе задача нетривиальная и дорогостоящая, поэтому возникла необходимость поиска подходящего инструментария для построения отчетов. Главными нашими критериями были:

  • Бесплатное использование ПО в коммерческих проектах с открытым исходным кодом

  • Инструмент для построения данных должен работать с основными форматами источников данных, а так же напрямую БД.

  • Использование языка Java для построения отчетов

  • ПО должно быть поддерживаемым и обновляемым c поддержкой обратной совместимости

  • Редактор построения отчетов должен быть удобным и понятным

  • Инструмент должен позволять создавать шаблоны отчетов всех основных форматов: excel, csv, pdf, html, и т.д

  • Богатые возможности визуализации и построения дашбордов.

Мы провели исследование части наиболее известных open-source систем построения отчетов, и результаты нашего исследование мы собрали в таблицу, которой хотим поделиться.

Наименование

Производитель

Лицензия

Возможности и достоинства

Недостатки

BIRT

The Business Intelligence and Reporting Tools (BIRT)

Eclipse Foundation

Eclipse Public License

Последняя версия 4.5.0 (Июнь 24, 2015) т.е. проект живой;

Есть визуальный редактор отчетов в среде разработкиEclipse IDE;

Сконструированные отчеты BIRT сохраняются в XML и имеют доступ к целому ряду различных источников данных, включаяхранилище данных JDO,JFire, Plain Old Java Object,SQL,database,Web Serviceи XML;

Содержит технологию построения графиков, которая полностью интегрирована в дизайнер отчетов и может использоваться автономно для интеграции графиков в приложение;

Много документации;

Сырой и неудобный редактор;

Ставится отдельным web-приложением;

Для использования необходим Eclipse;

Отчеты, созданные в разных версиях несовместимы;

JasperReports

Jaspersoft

GNU Lesser General Public License

Последняя версия 6.2.2 (6 мая2016 года)отчёты могут выводиться на экран, принтер, либо в форматыPDF,RTF,HTML,XLS,CSVиXML;

Использование динамических языковJavaScriptиGroovyпри реализации логики отчета;

Реализация диаграмм (charts) на основе библиотекиJFreeChart;

Реализация подотчётов (subreports) с неограниченной глубиной вложенности;

Реализация кросстаблиц (crosstabs);

Pentaho Reporting JFreeReport

Project Corporation

Pentaho Community Edition (CE): Apache version 2.x; Pentaho Enterprise Edition (EE): Commercial License

Гибкое позиционирование элементов дашборда на макете;

Развитые инструменты визуализации отчетов;

Возможность вывода отчетов в форматах HTML, Excel, csv, xml, PDF, текстовых форматах;

Мало информации о применении;

Все основные фичи реализованы в коммерческой версии от Hitachi Group Company;

YARG

CUBA

Apache 2.0 License

Генерировать отчет в формате шаблона или конвертировать результат в PDF;

Создавать шаблоны отчетов в привычных и распространенных форматах: DOC, ODT, XLS, DOCX,XLSX, HTML;

Создавать сложные XLS и XLSX шаблоны: с вложенными областями данных, графиками, формулами и т.д.;

Использовать в отчетах изображения и HTML-разметку;

Хранить структуру отчетов в формате XML;

Запускать standalone приложение для генерации отчетов, что делает возможным использование библиотеки вне Java-экосистемы (например для генерации отчетов в PHP);

Интегрироваться с IoC-фреймворками (Spring, Guice).

Нет внятного редактора;

Есть UI, который предоставляет платформа CUBA;

Как видно из нашего небольшого исследования, наиболее подходящим инструментом для нас стал JasperReports. В пользу этого open-source инструмента говорит наличие весьма удобного визуального редактора проектирования отчетов, богатого набора визуализаций, включая кросстаблицы, а самое главное - наличие REST API. Проектирование макетов отчетов в JasperReports не требует особых глубоких знаний, а результаты проекта сохраняются в xml-формат. Так же мы ориентируемся на опыт коллег, например, наши партнеры КРОК в своей статьеhttp://personeltest.ru/aways/habr.com/ru/company/croc/blog/244085/рекомендуют использовать Jasper. JasperSoft наибольшим образом подходит для построения фиксированной отчетности. Интересны любой компании, которой необходимы инструменты анализа данных. Конечно, у jasper есть определенные проблемы, когда требуется сделать гибкий шаблон, например, когда необходимо сделать гибкий вывод полей в таблице, но в нашей практике мы сталкиваемся как правило с фиксированными отчетами, которые обозначает заказчик.

Взаимодействие клиент-сервер с Jasper reports

Мы полагаем, что может быть интересным то, как именно мы встраиваем jasper отчеты непосредственно в платформу без лишних запросов к Jasper Server. JasperReports Server это основной компонент системы. Его задача - хранить отчеты, которые будут встраиваться в платформу, а так же предоставлять возможность просмотра отчетов напрямую через специальный интерфейс. Вот пример как это выглядит в платформе

При построении отчетов наша задача состоит в том, чтобы получить от пользователя параметры отчета, собрать на основе переданных параметров данные из источников, построить визуализацию данных, и готовую визуализацию данных интегрировать в виде iframe на интерфейс или выгрузить в файл. Описание данного механизма представлена ниже на схеме.

Для того, чтобы получить отчет необходима авторизация в Jasper Server. Авторизация происходит путем передачи пары логин/пароль, а в ответ Jasper создает сессию и сохраняет session_id в куках. В обычном случае для того, чтобы напрямую взаимодействовать с JasperServer из JavaScript, нам необходимо авторизоваться, получить session_id из куки и запросить сам отчет. Однако на практике мы столкнулись с проблемой, что в случае использования кластера серверов с дублированием Jasper на всех инстансах, jasper отчеты то доступны, то недоступны для пользователя. Проблема заключается в том, что балансировщик, получив запрос от клиента, запрашивает ответ с разных JasperServer, но использует session_id только одного инстанса . То есть мы авторизовались в JasperServer на первом инстансе, получили от него session_id, затем c этим же session_id мы идем на другой инстанс и получаем ошибку доступа с сообщением Авторизуйтесь на JasperServer. Для решения этой задачи мы используем специальный проксировщик, который по сути является расширением бэкэнда платформы и устанавливается на все ноды кластера.Так как проксировщик установлен на том же сервере, что и Jasper server, ему нет необходимости обращаться по IP к ноде, а достаточно обратиться по localhost. Таким образом, балансировщик, передавая запрос от клиента на ту или иную ноду, запрашивает у проксировщика авторизацию уже на месте и гарантировано Jasper Server вернет ответ. Ниже представлен код проксировщика.

public Response getJasperReport(@QueryParam("url") String url) throws UnsupportedEncodingException {    url = url.replaceAll(";;", "&").replaceAll(" ","%20").replaceAll("\"","%22");     Client client = ClientBuilder.newClient();    Response authResponse = client            .target(jasperUrlLogin)            .queryParam("j_username", jasperLogin)            .queryParam("j_password", jasperPassword)            .request()            .header("Content-Type", "application/x-www-form-urlencoded")            .header("charset", "utf-8")            .post(Entity.json(""));    NewCookie sessionIdCookie = null;    if (authResponse.getStatus() == 200) {        Map<String, NewCookie> cookies = authResponse.getCookies();        sessionIdCookie = cookies.get("JSESSIONID");    } else {        LOGGER.warn("Cant auth JasperServer");        return null;    }     String requestUrl = jasperReportUrl + url;     Response response = client            .target(requestUrl)            .request()            .cookie(sessionIdCookie)            .header("Content-Type", "text/html")            .get();    return response;}

Проксировщик получает на вход некий URL отчета, который собирается из параметров на клиенте. По этому URL происходит авторизация в jasperServer, далее проксировщик достает из куки session_id и уже по нему запрашивает ответ непосредственно самого отчета. Ответ от jasper приходит виде html-страницы. Именно эту html-страницу мы передаем в iframe для отрисовки на клиенте, а не url, как это обычно бывает. Таким образом мы один раз запрашиваем отчет, далее вся работа с ним идет уже непосредственно на клиенте платформы.

Создаем Iframe

{    xtype: 'component',    margin: '20 0 0 0',    reference: 'report',    maxWidth: 1200,    height:485,    autoEl: {        tag: 'iframe',        src: '',        frameBorder: 0,        marginWidth: 0,    },    listeners: {        load: {            element: 'el',            fn: function () {                var panel = this.getParent().component;                panel.setLoading(false, panel.body);            }        }    }}

Подкладываем html страницу от Jasper Server

generateReport: function () {        var report_url = this.generateReportUrl('html');        if (report_url) {            var panel = this.view;            panel.setLoading(true, panel.body);            this.getHtmlAndUpdateReport(report_url);        }    }

generateReportUrl - метод, который генерирует URL с нужными параметрами для отчета и session_id.

Cоздание отчета в JasperReports

Далее поговорим про непосредственно создание отчетов и дашбордов в Jasper. Создание jasper отчета состоит из набора визуализаций, скомпонованных на едином макете:Для создания макета отчета мы используем визуальный редактор JasperSoft Studio, который может быть отдельным приложением или плагином для eclipse. Подробнее об этом инструменте можно легко найти информацию в документации и открытых источниках, Нам же важно выделить то, что в данном редакторе достаточно легко можно построить дашборд, а сам редактор достаточно удобен и понятен. Достаточно выбрать нужные визуализации, перетащить их на макет, заполнить параметры и функциональные элементы. Построение дашбордов не требует навыков программирования и каждый может разобраться с ними в достаточно короткое время. Ниже пример простого отчета в JasperStudio.

После того, как создали макет отчета, переходим к построению логики самого отчета. Jasper отчет представляет xml-файл в специальном формате jrxml. Структура jrxml файла условно можно поделить на три части: в первой части определяются параметры отчета, во второй части пишется запрос к данным, в третьей части описываются функциональные блоки макета, в которых происходит обработка результатов запроса и отображение данных в макете.

Начало структуры файла: пример параметров отчета

<?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.9.0.final using JasperReports Library version 6.9.0-cb8f9004be492ccc537180b49c026951f4220bf3  --><jasperReport xmlns:xsi="http://personeltest.ru/away/www.w3.org/2001/XMLSchema-instance" xmlns="http://personeltest.ru/away/jasperreports.sourceforge.net/jasperreports" xsi:schemaLocation="http://personeltest.ru/away/jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="pubsub_diagram" pageWidth="1150" pageHeight="550" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="e8ef4a20-ab26-44c0-8b4d-316411f7d350">    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="postgres_local.xml"/>    <property name="net.sf.jasperreports.export.xls.ignore.graphics" value="false"/>    <parameter name="date_from_param" class="java.lang.String"/>    <parameter name="date_to_param" class="java.lang.String"/>    <parameter name="systems_param" class="java.util.Collection"/>    <parameter name="status_param" class="java.util.Collection"/>    <parameter name="entities_param" class="java.util.Collection"/>    <parameter name="count_details_param" class="java.lang.Integer"/>    <parameter name="group_param" class="java.lang.String"/>

Далее предположим, что источником данных является во второй части после параметров пишем SQL-запрос

 <queryString>        <![CDATA[SELECT * FROM (Cnjbn with main_table AS(SELECT T3.status as status, count(T3.id) as count_status, (count(T3.id) / (to_date($P{date_to_param}, 'DD_MM_YYYY') - to_date($P{date_from_param}, 'DD_MM_YYYY') + 1)) as avg_count_status  FROM(SELECT T1.id,T2.status    FROM public.history     AS T1LEFT JOIN(SELECT DISTINCT ON (history_id) history_id, status FROM public.trackWHERE createdate >= to_date($P{date_from_param}, 'DD_MM_YYYY')    AND DATE(createdate) <= to_date($P{date_to_param}, 'DD_MM_YYYY')ORDER BY history_id, createdate DESC NULLS LAST) AS T2ON T1.id = T2.history_idWHERE T2.status IS NOT NULLAND $X{IN,T1.unidatasourcesystem, systems_param} AND $X{IN,T1.entity, entities_param}AND T1.createdate >= to_date($P{date_from_param}, 'DD_MM_YYYY')AND DATE(T1.createdate) <= to_date($P{date_to_param}, 'DD_MM_YYYY')AND $X{IN,T2.status, status_param}) AS T3GROUP BY T3.status)SELECT main_table.*, round((count_status * 100) / (SELECT SUM(count_status) FROM main_table), 2) AS percent_status FROM main_table) AS t_result order by status]]>    </queryString>

Стоит обратить внимание, что в запросе мы используем параметры $P{date_to_param}, которые динамически приходят от клиента, что так же является фишкой Jasper.

Далее описывается тело всего отчета по функциональным разделам. Подробнее о описании всех разделов можно найти в документации. Ниже пример как это может выглядеть

<columnHeader>    <band height="35">        <staticText>            <reportElement x="0" y="0" width="150" height="30" uuid="1972f653-13ec-41b8-987a-a1f25940e053"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12" isBold="true"/>            </textElement>            <text><![CDATA[Статус]]></text>        </staticText>        <staticText>            <reportElement x="150" y="0" width="150" height="30" uuid="bde4e86c-d3d8-4538-a278-44eae4cda528"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12" isBold="true"/>            </textElement>            <text><![CDATA[Количество сообщений]]></text>        </staticText>        <staticText>            <reportElement x="300" y="0" width="160" height="30" uuid="ab26081d-2c0b-45b3-8c43-5707e2b555e7"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12" isBold="true"/>            </textElement>            <text><![CDATA[Среднее в день]]></text>        </staticText>    </band></columnHeader><detail>    <band height="35" splitType="Stretch">        <textField>            <reportElement x="0" y="0" width="150" height="30" uuid="ea66974c-f627-4096-86c3-fc0f921a88d2"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12"/>            </textElement>            <textFieldExpression><![CDATA[$F{status}]]></textFieldExpression>        </textField>        <textField>            <reportElement x="150" y="0" width="150" height="30" uuid="a820021d-95d6-4ee5-a5a4-887aca484efb"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12"/>            </textElement>            <textFieldExpression><![CDATA[$F{count_status}]]></textFieldExpression>        </textField>        <textField>            <reportElement x="300" y="0" width="160" height="30" uuid="e7927fa9-5b8f-43ff-bea7-1d74d8a3ce27"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12"/>            </textElement>            <textFieldExpression><![CDATA[$F{avg_count_status}]]></textFieldExpression>        </textField>    </band></detail><summary>    <band height="370">        <staticText>            <reportElement x="0" y="0" width="150" height="30" uuid="d93b83c8-b168-4766-91d8-b9545e3239a7"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12" isBold="true"/>            </textElement>            <text><![CDATA[ИТОГО]]></text>        </staticText>        <textField>            <reportElement x="150" y="0" width="150" height="30" uuid="6e306a81-3522-437d-a973-0dcf8646aa5f"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12"/>            </textElement>            <textFieldExpression><![CDATA[$V{sum_status}]]></textFieldExpression>        </textField>        <textField>            <reportElement x="300" y="0" width="160" height="30" uuid="67d24b52-4d3e-47ae-a35d-dc98a9b230f5"/>            <textElement textAlignment="Center" verticalAlignment="Middle">                <font fontName="Arial" size="12"/>            </textElement>            <textFieldExpression><![CDATA[$V{sum_avg_count_status}]]></textFieldExpression>        </textField>        <pieChart>            <chart evaluationTime="Report">                <reportElement x="0" y="40" width="400" height="320" uuid="bf9f29b3-51c1-472d-822b-e7e4b20fa160"/>                <chartTitle/>                <chartSubtitle/>                <chartLegend/>            </chart>            <pieDataset>                <keyExpression><![CDATA[$F{status}]]></keyExpression>                <valueExpression><![CDATA[$F{count_status}]]></valueExpression>                <labelExpression><![CDATA["" + $F{percent_status} + "% " + $F{status}]]></labelExpression>            </pieDataset>            <piePlot>                <plot>                    <seriesColor seriesOrder="0" color="#33F54A"/>                    <seriesColor seriesOrder="1" color="#EB73C1"/>                    <seriesColor seriesOrder="2" color="#433DF2"/>                    <seriesColor seriesOrder="3" color="#FAEC52"/>                    <seriesColor seriesOrder="4" color="#FFC342"/>                    <seriesColor seriesOrder="5" color="#D9D2D8"/>                    <seriesColor seriesOrder="6" color="#DE522F"/>                </plot>                <itemLabel/>            </piePlot>        </pieChart>    </band></summary>

Отдельно стоит отметить еще одну полезную функцию Jasper отчетов - это наличие подотчетов. В случае, когда мы хотим переиспользовать какой-либо отчет в другом отчете с тем же параметрами, нам не нужно писать с нуля, а достаточно обраться к готовому отчету по его идентификатору, передав новые значения параметров

<subreport>    <reportElement x="460" y="40" width="650" height="320" uuid="e0d58e35-b1da-4bcc-9978-fbda3028ff5a"/>    <subreportParameter name="date_from_param">        <subreportParameterExpression><![CDATA[$P{date_from_param}]]></subreportParameterExpression>    </subreportParameter>    <subreportParameter name="date_to_param">        <subreportParameterExpression><![CDATA[$P{date_to_param}]]></subreportParameterExpression>    </subreportParameter>    <subreportParameter name="systems_param">        <subreportParameterExpression><![CDATA[$P{systems_param}]]></subreportParameterExpression>    </subreportParameter>    <subreportParameter name="status_param">        <subreportParameterExpression><![CDATA[$P{status_param}]]></subreportParameterExpression>    </subreportParameter>    <subreportParameter name="entities_param">        <subreportParameterExpression><![CDATA[$P{entities_param}]]></subreportParameterExpression>    </subreportParameter>    <subreportParameter name="group_param">        <subreportParameterExpression><![CDATA[$P{group_param}]]></subreportParameterExpression>    </subreportParameter>    <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>    <subreportExpression><![CDATA["repo:pubsub_grapf.jrxml"]]></subreportExpression></subreport>

Ключевым вопросом в построении отчета является передача параметров (фильтров) отчета от клиента на сервер. Для того, чтобы не отправлять пользователя на JasperServer и все параметры отчета заполнять в платформе удобным способом, Jasper предлагает использовать собственный REST API. Наличие такого мощного API было решающим аргументом в сторону выбора JasperSoftдля автоматизации отчетности. Вместо того, чтобы создавать ресурсы и заполнять параметры в среде Jasper Server мы просто воспользуемся методами, которое предоставляет нам API и передадим параметры GET-запросом от клиента. API jasper позволяет не только параметризировать данные, используемые в отчетах, но и сами отчеты, что позволяет очень гибко отображать нужные дашборды

Итого

Резюмируя все выше описанное мы рекомендуем к использованию JasperSoft когда есть потребность в создании гибких отчетов согласно шаблонам заказчика. Для этого Jasper предоставляет весь необходимый инструментарий, а работать в ним достаточно просто и удобно.

Подробнее..

Из песочницы Опять отчет? Ну сколько можно?

25.07.2020 18:20:04 | Автор: admin
Привет, Хабр!

Очень многим работникам крупных компаниям, думаю, что почти всем, приходиться делать и сдавать отчеты. У подавляющего большинства данный вид деятельности вызывает негативную реакцию. Разберем чем по сути являются отчеты, зачем они нужны, и главное сколько стоит такое удовольствие.

image

Зачем вообще нужны отчеты?


Чтобы принимать любые осмысленные решения Вам нужна информация. В простейшем случае, когда Вы лично непосредственно участвуете в процессе или находитесь физически в том же помещении, вся необходимая информация поступает к вам автоматом по аудиовизуальным каналам даже если Вы этого не особо желаете. Вы знаете, чем занимается джуниор, как часто и по каким вопросам дергают эникея, сколько раз в день и насколько качественно моет пол уборщица, можете прямо на своей машине в профилировщике посмотреть почему тормозит код и знаете сколько запасных мышек лежит в шкафу. Необходимость в формальных отчетах в этих ситуациях практически отсутствует. Вы сразу увидите проблему и сможете ее решить. Это прекрасно работает в компаниях где несколько сотрудников и все физически в одном помещении. Все резко меняется при наличии физического барьера или, когда компания растет, и вы не можете лично принимать участие во всех процессах. Но ответственность при этом никуда не исчезает. Находясь в другом помещении вы уже непосредственно не видите, что происходит, но обязаны своевременно принимать правильные решения. Исходя из приведенных выше примеров, Вам вероятно захочется регулярно получать информацию примерно такого вида:

  • Сколько у нас задач в очереди, что в разработке, сколько закрыто за период?
  • Сколько было обращений в хелпдеск, какого типа, сколько успешно закрыто?
  • График уборки.
  • Логи вашего приложения с пользовательского устройства.

Часть этой информации будет формироваться вручную (городить систему учета уборки есть смысл только для крупной клининговой компании). Часть в виде сырых неструктурированных данных (логи с устройства). Но основная информация потребуется в виде удобных и максимально наглядно и достоверно отражающих реальность отчетов в виде таблиц или графиков. (Примеры графиков ненаглядно и недостоверно отражающих реальность приведены в этой замечательной статье). Только своевременно узнав, что сотрудник хелпдеск валяет дурака сильно перегружен, можно принять адекватные меры (расширяем штат, платим премию за ударный труд, пытаемся устранить причину массовых обращений). Не зная об этом невозможно нормально организовать процесс. Это касается не только руководителей. Разработчикам, девопсам тоже требуется знать, что происходит локально у пользователей, как загружена сеть, сервера, количество запросов к микросервису в единицу времени и т. п. По сути это те же отчеты и без них решать свои задачи невозможно.

Основные требования к отчетам


Сформулируем основные требования к отчетам:

  1. Наглядность и удобство восприятия.

    Мало толку непосредственно от 5 Гб сырых логов, их потребуется как минимум обработать и агрегировать прежде чем мы узнаем, что-то полезное.
  2. Достоверность, адекватное отражение реальности.

    Выполнены и успешно протестированы 19/20 тасков. Все хорошо прекрасная маркиза! Но мы не видим, что эти 19 были уровня пофиксить опечатку в Здраствуйте уважаемый пользователь, а в 20 речь о смене версии БД не полностью совместимой с текущей. Сюда же относятся манипуляционные графики, ссылка на примеры была выше.
  3. Полнота.

    Вся важная информация должна быть доступна. Если мы пользуемся IP телефонией, нужно контролировать не только скорость и % загрузки канала, но и время задержки пакетов. В данном случае это критичные данные.
  4. Своевременность.

    Неприятно будет узнать, что канал начал тормозить неделю назад и половина пользователей уже свалила, оставив гневные отзывы. А решить проблему можно было за 30 секунд переткнув патч-корд. Да и мышки на складе кончились, вовремя не закупили. Мелочь, но тоже неприятно.
  5. Приемлемая стоимость создания и использования.

Остановимся на последнем пункте подробно. Если за предыдущие меня могут отчасти справедливо обозвать Капитан Очевидность, то в отношении него почему-то часто наблюдается полное игнорирование реальности. Сорвем же покровы!

Все стоит денег


Опять же немного покапитанствую. В нашем мире практически нет ничего бесплатного. Булки не растут на деревьях, Деда Мороза не существует. Любая работа требует денег, времени, еще каких-то ресурсов. Если Вам требуется отчет о количестве дождевых червей на кв. метр, то мы можем оценить его стоимость. Прикинем затраты:

  1. Создание. Стоит С денег. Сюда же отнесем различные доработки, модернизации обозначим См

    Это может быть написание кода, который генерирует, отчет из базы. Придумывание формы в Excel для ручного заполнения. Обучение тупого альтернативно одаренного сотрудника как правильно вбивать цифры в ячейку и сохранять файл.
  2. Регулярная подготовка. Стоит П денег/день (ну или другой период, не суть).

    Сотрудник должен взять лопату, вскопать несколько квадратных метров земли. Посчитать обнаруженных червяков и вбить данные в табличку
  3. Срок использования (амортизации). T дней. Сюда же отнесем сколько будет использоваться доработка, модернизация Tм.

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

Итого в день этот отчет обходиться в

$$display$$С/T+ См/ Tм+П$$display$$

Разберем на примере. Пусть разработка отчета стоит 10 000 галактических кредитов. Пользоваться им будут примерно полтора Земного года (примем для простоты 500 дней), потом придумают что-то принципиально новое. Также в течении этого периода потребуется небольшая доработка на 1000 кредитов. Ежедневное ручное вбивание данных (не все можно получить автоматом из БД) стоит 100 кредитов. Итого имеем:
10000/500+1000/500+100=122. Если в году 243 рабочих дня т. е. в год он нам обходится примерно в 30 тыс. Формула в общем-то простая. Желающие могут вбить данные в электронную таблицу и поиграться параметрами. Если придумывать новые колонки, требовать менять цвет графика еженедельно или сам отчет делается вручную полдня, легко получить затраты в сотни тысяч. В этот момент стоит серьезно задуматься: действительно ли настолько важна данная информация и стоит ли она этих денег?

Про стоимость рабочего часа.
Расчет стоимости штука очень непростая. В двух словах не объяснишь. Могу только предостеречь от детской ошибки считать стоимость часа от з/п на руки. Как минимум сверху будут разные налоги и выплаты в разные фонды 43%. Плюс стоимость аренды, оргтехники, з/п вспомогательного персонала (уборщица, бухгалтер и т. д.). Т. е. з/п на руки нужно как минимум смело умножать на 2-3

Пример очень неэффективного отчета из давнего личного опыта


Ситуация. Компания в одном офисе имеет два основных непересекающихся направления: оптовая торговля зерном (скупаем у фермеров по области) и продажа дизельных электрогенераторов (основные клиенты нефтяники в очень дальних краях). Мобильных телефонов тогда особо ни у кого не было. Все созванивались по обычным проводным телефонам. Звонки по области (тарифная зона <100 км) стоили очень дешево. А в Красноярский край, на Дальний Восток и т. п. достаточно дорого. Компания работала с хорошей прибылью, но и расходы на связь были в сумме достаточно серьезные. Хотя основной источник затрат был всем очевиден, генеральный директор потребовал предоставить разбивку по отделам. Логов АТС у нас не было. Электросвязь (сейчас это Ростелеком) умели присылать информацию в виде бумажного рулона. Итого у моего коллеги ушло больше недели рабочего времени, чтобы все это проанализировать и сформировать требуемый отчет. Совещание где должны были посмотреть данный отчет и сделать выводы выглядело примерно так:

Генеральный: Юра (рук. продавцов генераторов), а что это твои так много наговорили?
Юра: Ну дык работаем!
Генеральный: А, ну ладно, молодцы!

Т. е. по факту задорого ничего нового и полезного не узнали. Ситуация напоминает

анекдот про консультантов.
К пастуху, пасущему стадо овец, подъезжает на машине какой-то тип, высовывается из окна и говорит:
Если я тебе скажу, сколько у тебя овец в стаде, ты мне подаришь одну?
Немного удивленный пастух отвечает:
Конечно, почему бы и нет.
Тогда этот мужик достает ноутбук, подсоединяет его к мобильному телефону, устанавливает связь с Интернетом, заходит на сайт НАСА, выбирает спутниковую связь GPS, выясняет точные координаты места, где он находится, и отправляет их на другой спутник НАСА, который сканирует эту местность и выдает фото со сверхвысоким разрешением. Затем этот тип передает снимок в одну из лабораторий Гамбурга, которая через несколько секунд отправляет ему мыло с подтверждением того, что снимок был обработан и полученные данные сохранены в базе данных. Через ODBC он подключается к базе данных MS-SQL, копирует данные в таблицу EXCEL и начинает производить расчет. Через несколько минут он получает результат и распечатывает в цвете 150 страниц на своем миниатюрном принтере.

Наконец он говорит пастуху:

У тебя в стаде 1586 овец.
Точно! Именно столько овец у меня в стаде. Что ж, выбирай.
Мужик выбирает одну и грузит ее в багажник. И тут пастух ему говорит:
Послушай, а если я угадаю, кем ты работаешь, ты мне ее вернешь?

Немного подумав, мужик говорит:

Ну давай.
Ты работаешь консультантом, неожиданно выдает пастух.
Это правда, черт возьми! И как же ты догадался?
Это было легко сделать, говорит пастух, ты появился, когда никто тебя не звал, хочешь получить плату за ответ, который я уже знаю, на вопрос, который тебе никто не задавал, и к тому же ты ни хрена не смыслишь в моей работе. ТАК ЧТО ОТДАВАЙ ОБРАТНО МОЮ СОБАКУ.

Для адекватного руководства нужно иметь информацию в виде отчетов. Если отчет неудобен, нужно подумать, как его улучшить, возможно добавить недостающую информацию. Но при этом надо четко понимать, что это будет стоить денег. Возможно больших денег. Правильный вопрос должен звучать так: Стоит ли получение информации X суммы Y?

Примеры:

Стоит ли знание цвета мышек на складе (колонка в отчете) 5000 руб.? (ответ скорее отрицательный, т. к. данная информация требуется настолько редко и малополезна, что ее стоимость близка к нулю)

Стоит ли знание трудоемкости задач, выполненных в прошлом релизе и запланированных в текущем 50000 руб.? (ответ скорее положительный т. к. мы должны как можно раньше понять, что есть риск не успеть к сроку. В этом случае мы сможем найти решение, обсудив проблему с тим-лидом и Заказчиком или наняв фрилансера на какие-то задачи).


Есть еще важный момент: информация может терять актуальность. Т. е. получателю она уже полностью или частично не интересна, а формировать отчеты мы продолжаем. При этом у получателя нет особой мотивации их отменить.

Если здравого смысла недостаточно, на корпоративном уровне эффективно процесс можно построить следующим образом. Получатель каждого отчета должен их финансировать в рамках бюджета подразделения. Т. е. если тебе нужны отчеты 1, 2, 3, 4, 5 общей стоимостью X рублей затраты в управленческом учете распределяются соответственно. В этом случаи волей-неволей придется держать себя в рамках и действительно требовать только реально актуальную информацию без сомнения выкидывая ненужную.
Подробнее..

Чем заняты сотрудники? Анализируем Jira Software

17.11.2020 18:17:45 | Автор: admin
Таск-треккер как исправный источник данных для стратегического управления. Звучит красиво. А в нашей компании это даже работает и приносит пользу.

Данная статья является углублением к предыдущей: Автоматизация аналитики Jira средствами Apache NiFi. Теперь хочу подробнее раскрыть наш взгляд на отчетность по Jira Software и опыт ее реализации при помощи R. Язык тут, конечно же, не догма. Сегодня наше все это концепция.

image

Картинка позаимствована тут.



Давайте представим себе таск-треккер. Какие данные я, как аналитик, могу из него добыть? Или любая готовая аналитическая платформа? Количество задач за период, статистику логирования, базовую разбивку на проекты, картинки какие-нить о продуктивности сотрудников да и все, навскидку.

А ведь все, что ни делается заносится в жиру. Следовательно, наверняка можно вычленить нечто более глобальное: чем занимается команда и в каком направлении она двигается.

Таки да, нам это удалось. Правда, не обошлось без помощи PM-a попервой.

Реорганизация таск-треккера


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

Прошу расценивать это лишь как идею организации таск-треккера, на примере нашей аутсорсинговой компании.

Мы сделали всего два движения.

Первое и самое простое. Приняли, что все задачи в рамках одного направления должны быть привязаны к эпику, обязательно. Эпики это наиболее крупные объекты в Jira, представляющие собой множества задач. Они помогают создавать иерархию и структуру, а также могут охватывать несколько спринтов и версий.

О втором чуть подробнее. Нам удасться увидеть общую картину и ответить на стратегические вопросы, если рабочий процесс будет представлен в виде некого потока, в который каждый сотрудник делает свой вклад. Для этого, в нашем случае, идеально подходит концепция IT4IT, со своей операционной моделью, базирующейся на четырехпотоковой цепочке создания ценности:
image
Собственно, что мы сделали. Воспользовавшись IT4IT, добавили такое понятие как компонента задачи в Jira. У нас они следующие:

  • Service to Portfolio (Demand and Selection) стадия раскурки, поиска, выбора сервиса, технологии.
  • Request to Deploy (Plan and Design) обсуждение, планирование разработки, развития услуг, сервисов.
  • Request to Deploy (Develop) разработка услуги, сервиса чего либо.
  • Request to Deploy (Deploy) развертывание чего либо.
  • Request to Deploy (Test) тестирование сервиса, услуги.
  • Request to Fulfill этап эксплуатации разработанных сервисов, предоставление услуг.
  • Detect to Correct (Correct) исправление, доработка внутренних сервисов и услуг.
  • Detect to Correct (Monitor&Feedback) тоже самое, только + общение с клиентом.

На данном этапе, наверное самое сложное убедить сотрудников, что лишний пункт в треккере не просто так и он обязателен к корректному заполнению.

Аналитика данных в R


Теперь препятствий для реализации отчетности быть не должно. Сформулирую подобие ТЗ.

Поскольку в начале каждой недели команда собирается на мит для планирования отчет должен быть еженедельным. Нам важно видеть статистику появления и продвижения задач, логирование сотрудников и вклад каждого из них в общую картину. Ответить на вопрос: чем занимается команда в разрезе эпиков и компонент.

Зная что нам нужно добыть идем выгружать данные. Через Jira API запрашиваем все таски (issue), обновленные на прошедшей неделе. Добываем из них ключи и к каждой таске догружаем историю логирования (worklog) и историю изменений (changelog). Извращения с догрузкой необходимы, чтобы обойти ограничения апишки.

Далее начинается зона ответственности R, т.к предобработка полученых данных это составляющая скрипта генерации отчета.

В ней нету чего-то заумного, необходимо просто распарсить JSON-ы, пришедшие от апи и оставить только необходимые свойства (пункты в Jira). Единственный момент, при обработке changelog-а нам интересны только изменения статуса задачи, остальное можно смело удалять.

Ну и, наконец-то мы подобрались к аналитике.

Узнаем сколько задач открыто, было в работе, закрыто и отложено за прошедшую неделю. Взгляните-ка на R код:

# Открыто тасокthis_week_opened <- jira_changelog_data %>%         filter(issue_type != "Epic") %>%         filter(as.Date(issue_created) >= start_date) %>%         filter(as.Date(issue_created) <= end_date) %>%   select(key, issue_created) %>% unique() %>% nrow()# В работеthis_week_processed <- jira_worklog_data %>% filter(as.Date(started) >= start_date) %>%         filter(as.Date(started) <= end_date) %>%   select(key) %>% unique() %>% nrow()# Закрытоthis_week_closed <- jira_changelog_data %>%         filter(issue_type != "Epic") %>%         filter(as.Date(issue_resolutiondate) >= start_date) %>%         filter(as.Date(issue_resolutiondate) <= end_date) %>%  select(key, issue_created) %>% unique() %>% nrow()# Отправлено в холд / бэклог this_week_holded <- issue_history %>% filter(change_date >= start_date) %>%         filter(change_date <= end_date) %>%filter(toString == "Hold" | toString == "Backlog") %>%   select(key) %>% unique() %>% nrow()


Не напоминает ли вам это псевдокод? А если я скажу что оператор '%>%' передает данные от предыдущей функции к следующей. А последняя модификация во всей цепочке будет сохранена в переменную. Представьте себе, мы только что поднялись на порог вхождения в R!

Вы еще не влюбились в него? Тогда, если позволите, я насыплю еще немного инфы.

Словеса из Википедии:
В целом, как язык программирования, R довольно прост и даже примитивен. Его наиболее сильная сторона возможность неограниченного расширения с помощью пакетов.

В базовую поставку R включен основной набор пакетов, а всего по состоянию на 2019 год доступно более 15 316 пакетов.

И последнее на сегодня. В этом году R ворвался в десятку самых популярных языков в мире (пруф). Горжусь им.

Прошу простить мне сие отступление. Об R я могу говорить часами. Просто он насквозь окутан мифами, а я люблю их разрушать хобби, знаете ли.

Вернемся к отчету. Имея искомые цифры, визуализируем их. После этого оформляем логирование сотрудников. Вот как выглядит данная часть у нас:

image

Продолжу показывать вам итоговые картинки из этого же реального отчета.

Направление нашей деятельности отражает следующий график. Он также позволяет оценить загруженость сотрудников операционной деятельностью.

image

А вот и разрез всех задач по компонентам. Он и дает ответ на вопрос чем мы занимаемся. Картину дополняю цифрами.

image

Ну и обещанный вклад каждого сотрудника в общую картину, приведенную выше.

Вы, уверена, сразу же заметите где у нас разработчик, а где админ. К этой наглядности мы и стремились.

image

Реальный отчет так же дополнен сводкой движения задач. Это дополнение к общей статистике, размещенной в самом начале, с названиями задач и именами ответственных людей.

Генерация отчета


Настроить автоматическую генерацию отчета, например, по понедельникам из R скрипта можно с помощью пакета cronR, это исключительно просто.

У нас же все сложнее и изящнее. Еженедельную выгрузку данных из Jira API, запуск скрипта генерации отчета и отправку отчета всем сотрудникам по Email мы реализовали с помощью Apache NiFi. Эта тема насколько обширная, что вполне себе заслужила отдельную статью.

Заключение


Количество реализаций Jira Software, как и количество компаний где она используется уйма. Каждый босс, при этом, нуждается в своей уникальньной базе метрик для тактически верного управления. Да, существует eazyBI и другие плагины для Jira аналитики, но в результате это как покупка костюма в магазине, вместо пошитого на заказ Bespoke.

Рассмотренный отчет пошит по лекалам. По словам босса он дает стратегическое представление о том чем занимается подразделение или команда. Надеюсь данная статья поможет вам реализовать нечто подобное и у себя дома.

Спасибо.
Подробнее..

Учет спецодежды и спецоснастки в 1СERP как обойти ограничения типового функционала

13.05.2021 18:23:09 | Автор: admin

Сегментом особого внимания особенно в крупных производственных и промышленных организациях является учет спецодежды и спецоснастки с необходимостью оперативного получения информации об их наличии и состоянии, не только в суммовом, но и в количественном выражении.

Беря во внимание количество подразделений и входящих в них сотрудников, производство или закупка спецодежды составляют немалую статью расходов. Соответственно, некорректный учет негативно сказывается на финансовом состоянии компании.

В типовом функционале ERP существует ряд ограничений:

  • Отсутствуют инструменты по инвентаризации ТМЦ в эксплуатации, что для крупных компаний является обязательной процедурой.

В системе в принципе нет возможности сформировать документы для проведения инвентаризации ТМЦ в эксплуатации. Из-за этого бухгалтеру приходится формировать ведомости в xls, из-за чего растет вероятность ошибок, а также увеличивается время на подготовку необходимой информации.

  • Нет единого отчета, который бы аккумулировал в себе все сводные данные по учету спецодежды.

Количественные и суммовые данные разбросаны по нескольким отчетам. Например, чтобы получить информацию о количестве и стоимости ТМЦ в эксплуатации, нужно сформировать ОСВ (оборотно-сальдовую ведомость) по счету и типовой отчет "ТМЦ в эксплуатации", а затем сопоставить данные отчета в единый. При больших объемах данных такой процесс, естественно, усложняет работу пользователям и влияет на рост количества ошибок.

Кроме того, в типовом отчете "ТМЦ в эксплуатации" не отражаются те ТМЦ, по которым срок службы закончился, но сам ТМЦ еще не списан, что в свою очередь влияет на полноту отражения данных по учету.

  • Не отражается движение спецодежды по счетам МЦ и 10.11 в рамках одного месяца, если она была передана в эксплуатацию в этом же месяце.

В ведении учета есть своя специфика. Представим, что в апреле была передана в эксплуатацию спецодежда. Работник несколько дней ей попользовался и передал другому. Либо другая часто встречающаяся ситуация - в одежде обнаружился брак и ее нужно было списать. И все это произошло в рамках одного месяца.

Ограничение типового функционала 1С:ERP заключается в данном случае в том, что по счетам МЦ и 10.11 не будет отображаться движение спецодежды в том же месяце, в котором произошла передача и было сделано списание или перемещение. Пользователи не смогут получить полные сведения по эксплуатации одежды в апреле, в котором она и была передана, данные будут отображены только в мае. Такой формат противоречит полноте отображения данных.

  • Расчет остаточной стоимости ТМЦ, стоимость которых была погашена при передаче в эксплуатацию.

Помимо недостающей информации для корректного учета многие компании сталкиваются с необходимостью определения остаточной стоимости, которая возникает при списании ТМЦ из эксплуатации при реализации или другим причинам.

Сейчас в типовой системе 1С:ERP вся спецодежда и спецоснастка (согласно ФСБУ 5), которая передается в эксплуатацию, списывается на расходы сразу, независимо от срока службы. Проблема заключается в том, что при полном списании, когда не учитывается реальный срок службы спецодежды (в учете 2021 в системе не заложены такие документы), нельзя автоматически рассчитать остаточную стоимость, которая важна для формирования возврата средств за спецодежду и финансового результата при реализации.

Может ли автоматизация процессов в 1С решить насущные проблемы учета?

В нашей работе мы сталкиваемся с абсолютно разными отраслями, масштабами организаций, отношением сотрудников к внедрению новых механизмов и правил. Но 90% компаний схожи в двух моментах: бухгалтерии нужны максимальное удобство и экономия времени при аврале задач, а руководству - полная и прозрачная финансовая картина по процессам производства и контроль состояния активов.

Рассматривая данные цели в разрезе учета спецодежды в 1С:ERP, для их достижения необходима автоматизация учета ТМЦ. Для решения вопроса оперативности, полноты и достоверности данных о ТМЦ в эксплуатации был разработан отчет "ТМЦ в эксплуатации" на базе типового отчета 1С:ERP.

Данный отчет позволяет:

  • увидеть суммовые и количественные показатели в одном отчете, в разрезе всей необходимой аналитики;

  • работать без ограничений по отражению ТМЦ, срок службы у которых закончился. В отчете отражаются все ТМЦ, числящиеся в учете, но с помощью настроек пользователь может сам установить отбор, показывать ему такие ТМЦ или нет;

  • увидеть суммовые показатели по перемещениям и списаниям ТМЦ в том периоде, в котором они отражены по документам, независимо от даты передачи их в эксплуатацию;

  • работать с полной детализацией до первичного документа, что позволяет открывать документы сразу из отчёта и вносить в него при необходимости корректировки.

Важный момент: отчет подключается к 1С как внешний инструмент и не рушит текущие процессы системы, в которой работает компания.

Разбираемся с инвентаризацией

Чуть выше мы говорили о том, что 1С:ERP в принципе нет документов по инвентаризации. Но данный процесс нельзя обходить стороной. Удачной альтернативой ручному труду будет является проведение доработки самой системы 1С, учитывая нюансы самой компании, так как тут все индивидуально.

В нашей практики в рамках процесса автоматизации учета была доработана система, где мы создали документы, которые отражают инвентаризацию, что облегчило ввод данных и исключило ошибки, которые появляются при ручном вмешательстве.

Документ "Инвентаризационная ведомость для ТМЦ в эксплуатации" заполняется автоматически по данным забалансового счета МЦ по сумме и количеству с учетом данных оперативного контура, что позволяет получать актуальные данные после проведения документов перемещения и списания, независимо от формирования проводок в БУ. При этом в документе есть возможность формирования печатных форм ИНВ-3 и ИНВЕ-19.

Автоматическое заполнение реквизитов в документах по учету ТМЦ в эксплуатации

В рамках разработки отчета были доработаны механизмы, позволяющие автоматизировать:

  • заполнение стоимости ТМЦ при возврате из эксплуатации, если на момент возврата не вышел срок службы или в принципе есть остаточная стоимость на счете 10.11;

  • заполнение реквизитов Физическое лицо получатель при перемещении.

Разумеется, можно рассматривать альтернативные решения автоматизации. Например, если компания будет формировать оборотку, а затем загружать заполненный excel-файл в свою систему. Но учитывая объемы работ, с уверенностью можно сказать, что такой способ повлияет на рост количества ошибок.

В данном случае автоматизация учета ТМЦ станет действенным методом, который убережет компанию от ошибок, влияющих на финансовое состояние организации, а также поможет оперативно принимать взвешенные управленческие решения, основанные на корректной и актуальной информации по учету спецодежды и спецоснастки.

Если у вас появятся вопросы - оставляйте заявку, мы подробно проконсультируем по функционалу!

Подробнее..

Как мы управляем проектами развития аналитической отчётности

22.05.2021 12:06:36 | Автор: admin

Привет, Хабр! Меня зовут Владимир, я бизнес-аналитик в офисе данных Ростелекома и занимаюсь развитием отчётности. Компания делает ставку на развитие data-driven культуры. Спрос на данные и аналитику со стороны бизнеса растёт, и соответственно развивается экосистема управления данными, в том числе организационная структура и бизнес-процессы.

К концу 2019 года объём задач отчётности очень сильно вырос и это стало своеобразным нагрузочным тестированием для наших процессов. Стало понятно, что работать по-старому и соблюдать SLA нам становится все сложнее. Были нужны новые правила игры, соблюдение которых сделает управление типовыми задачами проще, планирование более предсказуемым, а выполнение обязательств реалистичным даже в условиях, когда рост команды сильно ограничен, а рост количества заявок безграничен.

С начала 2020 года мы начали выстраивать проектный подход, рассматривая поступающие от бизнеса запросы как проекты. Спорным вопросом оказался выбор ответственного за задачу в целом, т.е. кто в этих проектах должен исполнять роль руководителя проекта. Здесь мы рассказываем, как решали этот вопрос и какие результаты получили.

Введение

Нужно бежать со всех ног, чтобы только оставаться на месте, а, чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!, писал Льюис Кэрролл ещё во времена викторианской Англии. А сто лет спустя принципом Черной королевы назвали эволюционную гипотезу, сравнивающую борьбу за выживание с гонкой вооружений. Чем быстрее перемены окружающей среды, тем важнее скорость адаптации. Для организаций это правило работает так же: чтобы оставаться на плаву, нужно быстрее приспосабливаться к изменениям конкурентов, учиться и эффективнее перестраивать процессы.

Индустрия телекома и особенно управление данными бурно растут вместе со спросом на услуги, но этот же рост, вместе с возможностями, создает и множество проблем. Это особенно важно, когда деятельность организации разнообразна и содержит много специфики, из-за которой сложнее применять чужой опыт. Из-за этого приходится чаще импровизировать и вместо общепринятых хороших практик (почему в этом случае best practices скорее хорошие, а не лучшие рекомендую почитать у Романа Журавлева) искать альтернативы, оптимальные для конкретной ситуации.

Ситуация

Чтобы выбрать оптимальное решение, нужно знать условия, для которых оно предназначено, так что начну с обзора.

В корпоративном центре Ростелекома все профильные направления, работающие с отчётностью, объединены в Офис Данных. Это более двух сотен сотрудников в Москве и регионах, которые занимаются развитием платформы управления данными, работают в направлении глубокого анализа и развитии аналитической отчётности.

Направление обширно: отчёты используют данные нескольких сотен систем-источников, запросы поступают от всех подразделений компании, в которых свои особенности, бизнес-процессы и действующие регламенты. География бизнеса вся страна, разделенная на семь макрорегиональных филиалов, каждый из которых не так давно был отдельной компанией. Значение отчётности и требования к качеству аналитики растут, так как бизнес использует данные для принятия ежедневных управленческих решений и данные становятся важной частью операционных процессов компании.

Развитие отчётности организовано так: за сегментами бизнеса закреплены постоянные команды из 10-30 аналитиков и разработчиков, из которых формируют рабочие группы для отдельных задач. Различий в бизнес-процессах сегментов много и каждый раз в них разбираться непродуктивно. У разработчиков с этим проще, но всё равно хочется сохранять сработавшиеся команды. Командой сегмента руководит фронт-менеджер, который объединяет роль ресурсного менеджера для команды и аккаунт-менеджера для заказчика.

Обычно в работе у фронт-менеджера есть 10-12 задач, с каждой задачей на различных этапах может работать от 2 до 5 человек. Длительность таких задач от нескольких недель до полугода (это очень грубая оценка, чтобы показать масштабы). По каждой доработке требуется создать артефакты: комплект документов, которые будут использоваться сопровождением для работы над инцидентами, и отчётность в JIRA по объёмам трудозатрат, срокам работ и загруженности ресурсов, которая позволяет анализировать эффективность процессов.

Чтобы задача проходила маршрут и не буксовала, ей нужен владелец, погруженный в предмет и заинтересованный в её своевременном выполнении. Раньше этим занимались фронт-менеджеры, но к концу 2019 года объём задач вырос настолько, что на управление отдельными задачами у них уже не оставалось времени. У фронтов основные обязанности взаимодействие с бизнес-заказчиками, маршрутизация поступающих запросов и управление командой, а управление отдельными задачами можно делегировать, иначе будет как на картинке.

Поиск решения

По сути, мы выбирали между двумя вариантами: набрать выделенных исполнителей на роль РП или организовать совмещение этой роли кем-то из команды. Для этого нужно было разобраться, каким задачами РП будет управлять, в чём это управление будет заключаться и какие активности нужно координировать. Это позволило определить необходимые для наших РП навыки и оценить, с каким объемом задач один РП сможет работать параллельно. Отдельный важный вопрос как появление нового руководителя скажется на остальных членах команды.

Мы поняли, что в нашем случае многие классические компетенции руководителя проектов окажутся невостребованными: например, не требуется управлять бюджетом или поставщиками, проекты будут выполняться по одному и тому же регламенту, а предметная область всегда будет ограничена отчётностью для конкретного бизнес-сегмента. Задачи чаще всего типовые, но требуют погружения в предметную область, понимания процесса разработки и содержания работ на всех этапах.

Мы сделали вывод, что РП с небольшим количеством задач обойдется неоправданно дорого и будет недогружен, а в большем объёме задач не будет успевать разобраться, и его руководство будет ограничено чисто административными функциями. С другой стороны, добавление к небольшой команде выделенного РП заметно усложнит коммуникации придётся ещё одного начальника держать в курсе вопросов, которыми он непосредственно не занимается.

Расходы на команду увеличатся, но проблему это не решит. Исходя из этого, от выделенных исполнителей в роли РП мы отказались. С другой стороны, аналитики уже:

  • погружены в предметную область, как никто другой;

  • участвуют в выполнении задачи на всех этапах;

  • выполняют интегрирующую роль для команды.

С этой перспективы идея совместить руководство проектом с ролью аналитика (бизнес или системного) стала выглядеть логичной.

Реализация

Дальше мы проектировали и документально оформляли процесс, совмещали с уже существующими операционными процессами, о некоторых из которых уже рассказывали мои коллеги (статьи на Хабре: раз, два). В общем процесс разработки приобрел вид:

Документацию составили в формате методики управления, скорее даже инструкции. Где-то брали собственные наработки, где-то транслировали рекомендации PMBoK на наше организационное окружение. Писали так, чтобы документа было достаточно для выполнения роли РП, и чтобы его мог использовать человек без опыта проектного управления.

Затем, дополнив документ всей сопутствующей мишурой вроде шаблонов, провели обучение и в начале 2020 года запустили процесс в пилотном режиме. Работа ещё не завершена, по части согласованности процессов ещё многое нужно сделать, но определенные выводы уже можно сделать.

Положительная динамика хорошо заметна на примере задач по подключению новых источников, длительность которых очень существенно сократилась.

К плюсам принятого решения можно отнести:

  1. В первую очередь сам подход к вопросу, когда команда аналитиков разрабатывает процесс с учетом имеющейся практики и наработок;

  2. На коммуникации внутри команды времени тратим не больше, чем тратили раньше;

  3. Материалы задач легче использовать повторно, сроки в целом стали более прогнозируемыми.

Трудности:

  1. Есть нестыковки с операционными процессами, особенно в нетиповых ситуациях, но это ожидаемо продолжаем шлифовать;

  2. Аналитики заполняют больше бумажек, поддерживают актуальность проектных карточек и ведут протоколы совещаний. Ожидаемо, но иногда утомляет:

Предварительные выводы оптимистичные: для небольших, но требующих погружения, задач совмещение ролей РП и бизнес-

аналитика даёт больше плюсов, чем создает неудобств.

Вместо эпилога

Минуточку, управление работами по задаче Вы там что, открыли для себя дверь роль менеджера проекта и повесили на бизнес-аналитика?. Короткий ответ Да, ответ по существу длиннее Сначала мы оценили все, что нам нужно от роли, упростили её соответственно задачам и подготовили всё необходимое, чтобы даже начинающий РП мог её выполнять.

Важнее не название роли, а наполнение. Называть можно как кому привычнее Руководителем проекта, тех. лидом или как-то ещё это вопрос удобства и выбранного глоссария.

P.S. Только не миниРП, пожалуйста :)

Подробнее..

FI или финансовая аналитика что, где, когда?

17.11.2020 16:15:10 | Автор: admin

Что, Где, Когда?


IT консалтинг в большинстве случаев ассоциируется с построением хранилищ, систем визуализации и анализа данных, но сегодня мы познакомимся с еще одной командой GlowByte GlowByte FI.


Команда FI строит системы финансового учета, бюджетирования, планирования, прогнозирования и аллокации расходов много умных слов, которые мы ниже объясним.
В статье обсудим значение систем финансового учета для бизнеса, типы информационных систем и выгоду их приобретения и использования в компании.



Своя игра


Итак, в мире наступающей цифровизации всем понятно зачем нужно знать такие показатели бизнеса, как: средний чек покупателя, конверсия, ARPU (средний доход с пользователя), LTV (доход с пользователя за все время пользователя сервисом), стоимость привлечения клиента и т.д. Основа этого финансовый план.
Родина начинается с картинки в букваре, а успех и прибыль компании с продуманного бизнес-плана, построения бюджета и его исполнения.
Что такое бюджет? Зачем он необходим компании?



Чтобы понять необходимость бюджетирования и планирования, приведем простой жизненный пример: 30 летний человек живет в России, ходит на работу и получает заработную плату; живет от зарплаты до зарплаты, пока государство, допустим, не примет новый закон, который гласит об отмене пенсионных накоплений. В такой момент приходит осознание, что пенсионный возраст близок, пройдет всего каких-то 30 35 лет, а накоплений никаких. Что же делать? Какие шаги должен совершить наш герой на пути к созданию пенсионного капитала?



Шаг первый: Записывать все доходы и расходы.
Шаг второй: После появления определенной статистики доходов и расходов, выявить обязательные и необязательные траты это и называется (взрослая самостоятельная жизнь) финансовым анализом.
Шаг третий: Сформировать бюджет на год. Процесс бюджетирования основывается на статистике доходов и расходов, закладывая определенный процент на непредвиденные траты, а также учитывая краткосрочные финансовые цели на горизонте до или чуть свыше года.
Шаг четвертый: Чтобы достичь конечной цели пенсионный капитал нашему герою необходимо овладеть такими инструментами как прогнозирование и стратегическое планирование. Отличие этих двух процессов от бюджетирования заключается в горизонте планирования (бюджет обычно строится на год) и определенных допущениях, т.к. не все ситуации в следующие 5-10-15 лет можно предугадать. Только при составлении прогноза с учетом своих стратегических планов (ипотека, дети, путешествия) наш герой может просчитать, какие инструменты накопления он может использовать для того, чтобы жить комфортно.
Этот пример из жизни человека отличается от жизненного цикла компании одним масштабом.
Давайте рассмотрим как поэтапно происходят такие процессы в компании?


Где логика?



На начальном этапе создания бизнеса практически любой бюджет и бизнес-план создается в Excel это самый простой и незатратный путь. Первая ИС (здесь и далее: ИС информационная система) в компании система бухгалтерского учёта. Далее могут появляться системы кадрового, маркетингового и коммерческого учета (например, CRM). По отдельности все эти системы важны и нужны, но для принятия стратегически верного бизнес решения необходимо видеть всю картину целиком, а для этого необходимо собрать все имеющиеся пазлы.
Сбор отчётности исторически начинался c большого количества Excel-файлов и имеет недостатки:
Процесс сбора данных из разных систем-источников трудоемкий и подвержен ошибкам;


  • Отчетность по важным показателям для бизнеса может предоставляться несвоевременно и съедать больше ресурсов, чем необходимо (поиск актуального файла, файл весит о боже мой больше 50МБ, нет возможности вносить исправления в файле одновременно нескольким пользователям);
  • Excel-файлы как вид отчетности не обеспечены хорошим уровнем безопасности. Потеря или несанкционированный доступ к таким незащищенным система грозят бизнесу серьезными последствиями;
  • Согласование и утверждение финансовых показателей осуществляются в основном по почте, что снижает скорость и точность принятия важных решений, а также не позволяет хранить их историю.
    Большинство из этих факторов человеческие. И именно автоматизация позволяет управлять такого рода рисками.

Поле чудес


Следующий важный этап в развитии управления компанией объединение разных систем информации в интегрированную ИС: Систему Управления Эффективностью Организации (CPM Corporate Performance Management), которая является комплексом взаимосвязанных процессов, методологий и подсистем. Решения CPM охватывают все бизнес-задачи в области стратегии и финансов.
Какое же решение CPM выбрать? На что необходимо обратить внимание?
На помощь приходит Магический квадрант Гартнера это отчет, необходимый для оценки и выбора наиболее подходящей для компании автоматизированной системы.
Gartner (Гартнер) это консалтинговая и аналитическая компания, которая специализируется в сфере ИТ: исследует поставщиков, которые представляют инфраструктурные ИТ решения для компаний.



Как читать этот магический квадрант и что все это значит? Давайте разберемся.



По квадранту:
Лидеры (Leaders) лидирующие решения на данном рынке (рынок указан в самом названии таблицы). Хорошо себя зарекомендовавшее законченное решение, которое покрывает нужды подавляющего большинства заказчиков, и имеющее понятное развитие в будущем.
Нишевые игроки (Niche players) не очень широко распространенные на данном рынке решения. Как правило заточены на решение определенных или очень специфических (узких относительно всего этого рынка) задач.
Претенденты (Challengers) законченные целостные решения, достаточно широко распространенные на рынке, но не показывающие четкие тенденции будущего развития. Решения, которые сейчас работают хорошо, но непонятно, как они буду взаимодействовать с новыми постоянно добавляемыми в инфраструктуру компонентами, а производитель ничего конкретного по этому поводу не сообщает.
Визионеры (Visionaries) такие компании не сильно представлены на рынке, но агрессивно рассказывают о перспективах своего развития в будущем. Часто появляются новички с уже готовым и быстроразвивающимся продуктом.


На что нужно обязательно обратить внимание при анализе квадранта и выборе инфраструктуры:


  1. Название квадранта им определяется рынок решений, который рассмотрен в данном квадранте;
  2. Дата выхода. Учитывая, что рынки в сфере высоких технологий быстро развиваются и меняются, квадранты старше 2 лет не имеет смысла. Такие квадранты можно рассмотреть только в качестве представления исторического развития данного сегмента рынка;
  3. Шкала оценки: "Зрелость уже сейчас" (Ability to execute) и "Перспективность в будущем" (Completeness of vision). Любой продукт или решение оценивается исходя из готовности и возможности развития продукта в будущем;
  4. Соотношения оценок и представления на рынке: "Нишевые игроки", "Претенденты", "Провидцы" и "Лидеры".
    Сам факт попадания в квадрант, в любую категорию, уже говорит о том, что решение данного вендора заслуживает внимания. Ориентируйтесь на квадрант, но в конечном выборе закупаемого решения необходимо также учитывать и другие факторы, соответствующие целям и возможностям самой компании.

Супер-приз


Что же мы получаем в итоге? Вывод неутешителен: автоматизация на определенном этапе развитии компании неизбежна, и процесс этот нелегкий, но результат, при котором появятся новые возможности для компании увеличение прибыли, сокращение трудозатрат стоят всего этого. Как к выбору инфраструктуры, так и в целом к автоматизации подходить нужно тщательно и проделав предварительную работу. О том, как начать процесс автоматизации и не бросить, на какие именно факторы необходимо опираться при выборе CPM-решения расскажем в следующей статье. Stay tuned!

Подробнее..

Автоматизация аналитики Jira средствами Apache NiFi

12.11.2020 00:07:35 | Автор: admin
Приветствую, господа. Я Маша, мне 23, и я уже полгода изучаю и внедряю на практике Apache NiFi.

Должна отметить, что спустя месяц после знакомства с этой технологией я начала употреблять антидепрессанты. Был ли NiFi триггером или последней каплей достоверно неизвестно, как и его причастность к данному факту. Но, раз уж, я взялась изложить все, что ждет потенциального новичка на этом пути я должна быть максимально откровеннной.

В тот час, когда технически Apache NiFi мощное связующее звено между различными сервисами (осуществляет обмен данными между ними, по пути позволяя их обогащать и модифицировать), смотрю я на него с точки зрения аналитика. А все потому, что NiFi весьма удобный инструмент для ETL. В часности, в команде мы ориентируемся на построение им SaaS архитектуры.

Опыт автоматизации одного из своих рабочих процессов, а именно формирование и рассылка еженедельной отчетности по Jira Software, я и хочу раскрыть в данной статье. К слову, методику аналитики таск-треккера, которая наглядно отвечает на вопрос а чем же занимаются сотрудники я также опишу и опубликую в ближайшее время.

Несмотря на посвящение данной статьи новичкам, считаю правильным и полезным если более опытные архитекторы (гуру, так скажем) отрецензируют ее в кромментариях или поделятся своими кейсами использования NiFi в различных сферах деятельности. Много ребят, включая меня, скажет вам спасибо.

Концепция Apache NiFi кратко.


Apache NiFi opensource продукт для автоматизации и управления потоками данных между системами. Приступая к нему важно сразу осознать две вещи.

Первое это зона Low Code. Что я имею ввиду? Предполагается, что все манипуляции с данными с момента их попадания в NiFi вплоть до извлечения можно выполнить его стандартными инструментами (процессорами). Для особых случаев существует процессор для запуска скриптов из bash-а.

Это говорит о том, что сделать что-то в NiFi неправильно довольно сложно (но мне удалось! об этом второй пункт). Сложно потому, что любой процессор будет прямо таки пинать тебя А куда отправлять ошибки? А что с ними делать? А сколько ждать? А тут ты выделил мне маловато места! А ты докумментацию точно внимательно читал? и т.д.

image

Второе (ключевое) это концепция потокового программирования, и только. Тут, я лично, не сразу врубилась (прошу, не судите). Имея опыт функционального программирования на R, я неосознанно формировала функции и в NiFi. В конечном счете переделывай сказали мне коллеги, когда увидели мои тщетные попытки эти функции подружить.

Думаю, хватит на сегодня теории, лучше узнаем все из практики. Давайте сформулируем подобие ТЗ для недельной аналитики Jira.

  • Достать из жиры ворклог и историю изменений за неделю.
  • Вывести базовую статистику за этот период и дать ответ на вопрос: чем же занималась команда?
  • Отправить отчет боссу и коллегам.

Дабы принести миру больше пользы, я не остановилась на недельном периоде и разрабатывала процесс с возможностью выгрузки гораздо большего объема данных.

Давайте же разбираться.

Первые шаги. Забор данных из API


В Apache NiFi нету такого понятия как отдельный проект. У нас есть только общее рабочее пространство и возможность формирования в нем групп процессов. Этого вполне достаточно.

Находим в панели инструментов Process Group и создаем группу Jira_report.



Идем в группу и начинаем строить поток (workflow). Большинство процессоров из которых его можно собрать требуют Upstream Connection. Простыми словами это триггер, по которому процессор будет срабатывать. Потому логично, что и весь поток будет начинаться с обычного триггера в NiFi это процессор GenerateFlowFile.

Что он делает. Создает потоковый файл, который состоит из набора атрибутов и контента. Атрибуты это строковые пары ключ / значение, которые ассоциируются с контентом.

Контент обычный файл, набор байтов. Представьте что контент это аттач к FlowFile.

Делаем Add Processor GenerateFlowFile. В настройках, в первую очередь, настоятельно рекомендую задать имя процессора (это хороший тон) вкладка Settings. Еще момент: по умолчанию GenerateFlowFile генерит потоковые файлы непрерывно. Вряд ли это вам когда-нибуть понадобится. Сразу увеличиваем Run Schedule, к примеру до 60 sec вкладка Scheduling.



Также на вкладке Properties укажем дату начала отчетного периода атрибут report_from со значением в формате yyyy/mm/dd.

Согласно документации Jira API, у нас есть ограничение на выгрузку issues не больше 1000. Потому, чтобы получить все таски, мы должны будем сформировать JQL запрос, в котором указываются параметры пагинации: startAt и maxResults.

Зададим их атрибутами с помощью процессора UpdateAttribute. Заодно прикрутим и дату генерации отчета. Она понадобится нам позже.





Вы наверняка обратили внимание на атрибут actual_date. Его значение задано с помощью Expression Language. Ловите крутую шпаргалку по нему.

Все, можем формировать JQL к жире укажем параметры пагинации и нужные поля. В последующем он будет телом HTTP запроса, следовательно, отправим его в контент. Для этого используем процессор ReplaceText и укажем его Replacement Value примерно таким:

{"startAt": ${startAt}, "maxResults": ${maxResults}, "jql": "updated >= '2020/11/02'", "fields":["summary", "project", "issuetype", "timespent", "priority", "created", "resolutiondate",  "status", "customfield_10100", "aggregatetimespent", "timeoriginalestimate", "description", "assignee", "parent", "components"]}


Обратите внимание как прописываются ссылки на атрибуты.

Поздравляю, мы готовы делать HTTP запрос. Тут впору будет процессор InvokeHTTP. Кстати он может по всякому Я имею ввиду методы GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. Модифицируем его свойства следующим образом:

HTTP Method у нас POST.

Remote URL нашей жиры включает IP, порт и приставочку /rest/api/2/search?jql=.

Basic Authentication Username и Basic Authentication Password это креды к жире.

Меняем Content-Type на application/json b ставим true в Send Message Body, что значит переслать JSON, который прийдет из предыдущего процессора в теле запроса.

APPLY.



Ответом апишки будет JSON файл, который попадет в контент. В нем нам интересны две вещи: поле total cодержащее общее количество тасок в системе и массив issues, в котором уже лежит часть из них. Распарсим же ответочку и познакомимся с процессором EvaluateJsonPath.

В случае, когда JsonPath указывает на один обьект, результат парсинга будет записан в атрибут флоу файла. Тут пример поле total и следующий скрин.



В случае же, когда JsonPath указывает на массив обьектов, в результате парсинга флоу файл будет разбит на множество с контентом соответствующим каждому обьекту. Тут пример поле issue. Ставим еще один EvaluateJsonPath и прописываем: Property issue, Value $.issue.

Теперь наш поток будет состоять теперь не из одного файла, а из множества. В контенте каждого из них будет находиться JSON с инфо об одной конкретной таске.

Идем дальше. Помните, мы указали maxResults равным 100? После предыдущего шага у нас будет сто первых тасок. Получим же больше и реализуем пагинацию.

Для этого увеличим номер стартовой таски на maxResults. Снова заюзаем UpdateAttribute: укажем атрибут startAt и пропишем ему новое значение ${startAt:plus(${maxResults})}.

Ну и без проверки на достижение максимума тасок не обойдемся процессор RouteOnAttribute. Настройки следующие:



И зациклим. Итого, цикл будет работать, пока номер стартовой таски меньше чем общее к-во тасок. На выходе из него поток тасок. Вот как процесс выглядит сейчас:



Да, друзья, знаю вы подустали читать мои каменты к каждому квадратику. Вам хочется понять сам принцип. Ничего не имею против.

Данный раздел, должен облегчить абсолютному новичку этап вхождения в NiFi. Дальше же, имея на руках, щедро подаренный мною шаблон вникнуть в детали не составит труда.

Галопом по Европам. Выгрузка ворклога и др.


Ну, что, ускоримся. Как говорится, найдите отличия:



Для более легкого восприятия, процесс выгрузки ворклога и истории изменений я вынесла в отдельную группу. Вот и она:



Чтобы обойти ограничения при автоматической выгрузке ворклога из Jira, целесообразно обращаться к каждой таске отдельно. Потому нам нужны их ключи. Первый столбец как раз и преобразует поток тасок в поток ключей. Далее обращаемся к апишке и сохраняем ответ.

Нам удобно будет оформить worklog и changelog по всем таскам в виде отдельных документов. Поэтому, воспользуемся процессором MergeContent и склеим им содержимое всех флоу файлов.

Также в шаблоне вы заметите группу для выгрузки данных по эпикам. Эпик в Jira это обычная таска, к которой привязывается множество других. Данная группа будет полезна в случае когда добывается лишь часть задач, чтобы не потерять информацию об эпиках некоторых из них.

Заключительный этап. Генерация отчета и отправка по Email


Окей. Тасочки все выгрузились и отправились двумя путями: в группу для выгрузки ворклога и к скрипту для генерации отчета. К последнему у нас STDIN один, поэтому нам необходимо собрать все задачи в одну кучу. Сделаем это в MergeContent, но перед этим чуть подправим контент, чтобы итоговый json получился корректным.



Перед квадратиком генерации скрипта (ExecuteStreamCommand) присутствует интересный процессор Wait. Он ожидает сигнала от процессора Notify, который находиться в группе выгрузки ворклога, о том что там уже все готово и можно идти дальше. Дальше запускаем скрипт из bash-a ExecuteStreamCommand. Ии отправляем отчетик с помощью PutEmail всей комманде.

Подробно о скрипте, а также об опыте реализации аналитики Jira Software в нашей компании я поведаю в отдельной статье, которая уже на днях будет готова.

Кратко скажу, что разработанная нами отчетность дает стратегическое представление о том чем занимается подразделение или команда. А это бесценно для любого босса, согласитесь.

Послесловие


Зачем изнурять себя если можно сразу сделать все это скриптом, спросите вы. Да, согласна, но частично.

Apache NiFi не упрощает процесс разработки, он упрощает процесс эксплуатации. Мы можем в любой момент остановить любой поток, внести правку и запустить заново.

Кроме того, NiFi дает нам взгляд сверху на процессы, которыми живет компания. В соседней группе у меня будет другой скрипт. В еще одной будет процесс моего коллеги. Улавливаете, да? Архитектура на ладони. Как подшучивает наш босс мы внедряем Apache NiFi, чтобы потом вас всех уволить, а я один нажимал на кнопки. Но это шутка.

Ну а в данном примере, плюшки в виде задачи расписания для генерации отчетности и рассылка писем также весьма и весьма приятны.

Признаюсь, планировала еще поизливать вам душу и рассказать о граблях на которые я наступила в процессе изучения технологии их ого сколько. Но тут и так уже лонгрид. Если тема интересна, прошу, дайте знать. А пока, друзья, спасибо и жду вас в комментариях.



Полезные ссылки


Гениальная статья, которая прямо на пальчиках и по буковкам освещает что такое Apache NiFi.

Краткое руководство на русском языке.

Крутая шпаргалка по Expression Language.

Англоязычное комьюнити Apache NiFi открыто к вопросам.

Русскоязычное сообщество Apache NiFi в Telegram живее всех живых, заходите.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru