Цель бизнес-аналитики — найти данные из информационных систем компании, которые можно использовать для поддержки принятия решений. Какие клиенты покупают больше всего? Что они делают перед решением о покупке? Каковы признаки того, что клиент может уйти?
В течение последнего месяца мы работали в Зальцбурге над созданием такой системы, интеллектуального инструмента управления проектами, необходимого для запуска крупных совместных исследовательских проектов, таких как IKS . Поскольку дизайн, который мы использовали, может быть использован для других нужд бизнес-аналитики, я хотел бы немного рассказать об этом.
Но сначала вот как выглядит наша система:
Откуда поступают данные?
Существует много способов сбора бизнес-данных. Часто информационные системы уже содержат необходимые данные. Но это также может быть скрыто в джунглях электронных таблиц. Или, возможно, некоторые данные просто недоступны и должны быть заполнены вручную.
Обработка всех этих случаев в одной системе является сложным вопросом. Чтобы решить ее, мы пошли с двухслойной стратегией:
- Все данные, используемые для аналитики, хранятся в виде связанных данных в системе CouchDB
- Рабочие процессы NoFlo используются для сбора данных из различных источников и преобразования их в необходимый формат.
В случае IKS, большая часть данных была доступна в виде ряда электронных таблиц. С их помощью мы создали необходимые рабочие процессы для того, чтобы сначала преобразовать электронные таблицы в XML с помощью Apache Tika , а затем извлечь из них информацию в разумном подмножестве JSON-LD.
Поскольку IKS является совместным проектом, информация должна собираться из разнообразной группы партнерских организаций. Некоторые из них имеют системы, которые предоставляют необходимые API (например, Basecamp , который мы используем), и мы можем просто периодически импортировать данные. Но со многими мы выбрали простой подход к обмену данными: электронные таблицы обрабатываются по электронной почте.
При таком подходе пользователь подает запрос данных в систему. Это получает NoFlo, который отправляет партнеру электронное письмо с соответствующим шаблоном электронной таблицы. Затем начинается ожидание ответа. Когда приходит ответ, он извлекает данные из прилагаемой электронной таблицы и импортирует их в систему.
Наши процессы NoFlo в основном инициируются API уведомлений об изменениях CouchDB . Мы поддерживаем их постоянную работу с помощью Node , поэтому всякий раз, когда необходимо выполнить какую-либо операцию, это происходит почти сразу.
Обеспечение согласованности данных
При любой автоматизации, особенно при обмене данными по электронной почте, все может пойти не так. Из-за этого мы помечаем все данные, которые мы получаем, с их источником, будь то какая-то автоматическая операция или импортированная электронная таблица. Эти источники называются исполнительными документами . Пользователи могут просматривать все выполненные рабочие процессы и видеть, какие данные поступили от них. Затем они могут быть либо приняты, либо отклонены.
Таким образом, если какой-либо партнер случайно отправил неверные данные или что-то еще сломалось, полученная неверная информация может быть легко удалена. Здесь можно использовать возможности управления версиями CouchDB.
Анализ данных
CouchDB построен на основе концепции карты / уменьшения. Здесь вы можете изменять и комбинировать данные различными способами, используя простые функции JavaScript . В нашем случае мы решили написать весь наш код CouchDB на CoffeeScript для простоты. Например, вот функция сокращения в CoffeeScript, которая подсчитывает общее время, запланированное, использованное время и оставшееся время для задачи или партнера в проекте:
(keys, values, rereduce) -> roundNumber = (rnum, rlength) -> Math.round(parseFloat(rnum) * Math.pow(10, rlength)) / Math.pow(10, rlength) data = planned: 0.0 spent: 0.0 left: 0.0 if rereduce for reducedData in values data.planned += reducedData.planned data.spent += reducedData.spent data.left = data.planned - data.spent return data for doc in values if doc['@type'] is 'effortallocation' data.planned += roundNumber doc.value, 1 if doc['@type'] is 'effort' data.spent += roundNumber doc.value, 1 data.left = roundNumber data.planned - data.spent, 1 return data
Если вы придумали новый способ просмотра имеющихся у вас данных, просто напишите нужную карту, уменьшите функции и сохраните их в базе данных. Затем CouchDB запустит их на основе существующих данных и выдаст числа.
Визуализация данных
Числа хороши, но чтобы по-настоящему увидеть информацию, скрытую в них, вам нужны некоторые визуализации. Для этого мы решили следовать идее CouchApp, где код пользовательского интерфейса хранится в базе данных вместе с самими данными. Таким образом, серверы приложений не нужны, и вы можете взять всю систему с собой, просто реплицировав базу данных . Подумайте о возможности анализа вашей компании во время полета на встречу!
Визуальные средства в нашем случае предоставляются JavaScript InfoVis Toolkit , симпатичной MIT-лицензированной интерактивной библиотекой графов.
Представления CouchDB обрабатывают сжатие чисел, затем функции списка CouchDB обрабатывают числа в формат, необходимый для визуализации. Это оставляет только минимальный объем работы для клиентской стороны.
Для обеспечения согласованности наше приложение было построено с CoffeeApp , поэтому вся база данных и код пользовательского интерфейса представлены в CoffeeScript .
В двух словах
Любая система бизнес-аналитики, работающая с умеренными объемами данных, может быть построена с использованием этого подхода.
- Apache CouchDB — центральное хранилище данных
- Все данные хранятся в виде сущностей JSON-LD
- NoFlo обрабатывает все импорт данных
- Аналитика на основе данных выполняется с помощью карты CouchDB / уменьшить
- Визуализация происходит с CouchApp с использованием JavaScript InfoVis Toolkit
Таким образом, вы получаете среду бизнес-аналитики, которую можно легко расширять, добавляя больше данных, когда они становятся доступными. Новый анализ можно выполнить, написав достаточно простые функции преобразования / сокращения, а возможности репликации CouchDB позволят вам взять систему и данные с собой.
Использование JSON-LD для хранения данных имеет большой смысл, так как таким образом легко обрабатывать отношения между различными частями информации. А использование URI для идентификаторов данных означает, что вы можете легко объединять информацию, поступающую из разных источников вместе.
Двухуровневый подход с использованием NoFlo для импорта данных и CouchDB для анализа также позволяет четко разделить проблемы. В нашем случае я выполнял часть рабочего процесса, а Сзаби создавал визуализации.