
При автоматизации бизнес-процессов предприятия часть задач всё равно должен выполнять человек: это согласование различной информации, обогащение данных из аналоговых источников и многое другое. В интеграционной шине InterSystems Ensemble для решения данного класса задач есть подсистема Ensemble Workflow, позволяющая людям участвовать в автоматизированных бизнес-процессах. В результате работы подсистемы Ensemble Workflow накапливается большой объём информации о том кто и сколько выполнял поставленные задачи. В этой статье с использованием BI-технологии InterSystems DeepSee, про которую я недавно уже писал на Хабре мы проанализируем и визуализируем эту информацию.
Аналитика
По умолчанию Ensemble предоставляет бизнес-метрики и страницу Workflow-портала «Задания потока работ» (Management Portal → Ensemble → Manage → Workflow → Workflow Tasks или SMP → Ensemble → Управление → Поток работ → Задания потока работ) для высокоуровневого управления задачами:

Разве это не выглядит как таблица фактов для куба DeepSee? Это действительно так, поэтому я решил построить куб DeepSee на основе класса EnsLib.Workflow.TaskResponse:

В этом кубе я храню информацию о каждой задаче, а именно:
- Пользователь, который выполнил задачу
- Роль задачи
- Когда она была создан и завершена
- Приоритет
- Текущий статус
- Завершена ли задача
- Время, затраченное на выполнение задачи
Большая часть элементов куба создана простым перетягиванием свойства класса на область куба, но вот наиболее интересные из них:
CompletionTime — время выполнения задачи в минутах. Вычисляется следующим образом: $System.SQL.DATEDIFF("minute",%source.%TaskStatus.TimeCreated,%source.%TaskStatus.TimeCompleted)
SQL-листинг определяется так ($$$SOURCE — это таблица фактов, а $$$RESTRICT — это фильтр применяемый DeepSee):
SELECT TaskStatus_RoleName AS "Role", TaskStatus_IsComplete AS IsCompleted, %Status AS "Status", TaskStatus_Source AS BusinessProcess, TaskStatus_AssignedTo AS "User", %Subject AS "Subject", %Message AS "Message", TaskStatus_TimeCreated AS "TimeCreated", TaskStatus_TimeCompleted AS "TimeCompleted", DATEDIFF('minute', TaskStatus_TimeCreated, TaskStatus_TimeCompleted) AS "CompletionTime" FROM $$$SOURCE WHERE $$$RESTRICT
Теперь давайте построим куб и несколько виджетов. Я решил построить одну инструментальную панель, демонстрирующую основные показатели:
- Среднее время, затрачиваемое пользователем и ролью для выполнения задачи
- Количество задач, которые в настоящее время не работают или не завершены
- Количество задач, выполненных за период
Вот демо дашборда (Логин: dev / Пароль: 123). Он отображается с помощью DeepSeeWeb (веб-приложение на AngularJS и Highcharts для визуализации дашбордов DeepSee в браузере.

Также доступны детализация данных и сквозная детализация:

Вы можете выполнять задачи потока работ на тестовом сервере с помощью приложения HelpDesk и видеть изменения на дашборде (куб строится один раз в час).
Логин: dev / Пароль: 123
Вот как выглядит Ensemble Workflow при использовании EnsembleWorkflowUI:


Заключение
Данные Ensemble Workflow можно визуализировать и анализировать с помощью BI-технологии InterSystems DeepSee. Это базовый проект OLAP решения, и его можно легко расширить по мере необходимости.

