Один отчет — два мира Как мы переносили сложную аналитику с Power BI на Visiology
Честно говоря, когда мы затевали этот эксперимент, у меня были сомнения.
Не из серии «получится или нет», а скорее - насколько будет больно.
Ведь идея взять сложный отчет с нетривиальной семантической моделью, различными визуализациями и метриками, и просто «перенести» его в другую систему звучит… ну, слегка наивно.
Но задача была понятная: проверить на практике, можно ли переехать на Visiology и не потерять ключевую аналитику. Не в теории, а вот прямо руками.
Спойлер: точь-в-точь не получится.
Но (и это важно!) все бизнес-задачи мы в итоге закрыли.
Иногда элегантно. Иногда через костыли. Но закрыли.


Что и зачем переносили
Рабочий отчет для отделов трейд маркетинга, продаж и полевой команды.
Отчет где видно, выполняют ли мерчендайзеры план визитов, есть ли товар на полке, как мы выглядим относительно конкурентов, прайс мониторинг, анализ рабочего времени сотрудников - инструмент, на который бизнес реально опирается при принятии решений. Источником выступает postgre база, которую наполняет вендор.
Если коротко - компания ставит цели мерчам, передает вендору, тот загружает в свое приложение, мерчи ходят по маршруту, делают фотки полок, отвечают на вопросы в приложении, вендор обрабатывает фотки и другие различные ответы от мерчей, складывает результаты в postgre.
Архитектура - пришлось думать по-другому
Первое, что выбило из колеи - подход к модели данных.
В Power BI у меня была классическая история: несколько таблиц фактов, несколько таблиц измерений, связи между ними. Схема созвездие.
В Visiology - только «звезда» (хотя на момент написания статьи Visiology умеют уже и в созвездие тоже. Это что я буду тестировать следующим)
И вот тут, честно говоря, я сначала немного завис. Нельзя просто взять и повторить ту же модель. Нужно пересобрать логику с нуля.
Что это значит на практике. Например, в Power BI у меня были Визиты -> Анкеты -> Вопросы в анкетах и ответы на них. В Visiology такое сделать, увы, было нельзя. Пришлось отказаться от привычной нормализованной модели и собрать набор витрин - агрегированных, заранее подготовленных. Да, это менее гибко. Да, где-то появляется дублирование. Да, поддержка становится тяжелее.
Но! После того как модель была правильно собрана, она начала работать стабильно и предсказуемо. И самое главное - позволила получить все нужные показатели.
Стоит также заметить, что Power Query Editor в Power BI имеет существенно более глубокий функционал. С другой стороны, Visiology позволяет делать SQL преобразования, что Power BI делать не дает. Если не углубляться в детали, то пользователю без знания SQL будет крайне проблематично преобразовать таблицу. При решении данной задачи все преобразования, а также все витрины с данными были созданы SQL запросами. Если вы привыкли делать ETL в Power Query, будьте готовы разочароваться.
Визуализация - не всегда «из коробки», но решаемо
С визуализацией ситуация похожая. Если вы привыкли к Power BI, то поначалу будет ощущение, что «чего-то не хватает». Где-то нет привычных настроек, где-то нужно писать код. И да, иногда это раздражает. Например, хочется сделать градиент в bar чарта-ах, и выясняется, что нужно лезть в JavaScript (потратил около часа на поиск решения, что в Power BI делается в пару кликов)
Пример функции в Visiology, которая раскрасит bar chart:
function getColor(value) {
var r, g, b;
if (value < 0.8) {
r = 255;
g = 0;
b = 0;
} else if (value <= 0.9) {
r = 255;
g = Math.round(255 * ((value - 0.8)/0.1)); // 0.8 - предыдущий порог, 0.1 = 0.9 - 0.8 (текущий порог минус предыдущий порог)
b = 0;
} else if (value <= 0.98) {
r = Math.round(255 * (1 -((value - 0.9)/0.08))); // 0.9 - предыдущий порог, 0.08 = 0.98 - 0.9 (текущий порог минус предыдущий порог)
g = 255;
b = 0;
} else {
r = 0;
g = 255;
b = 0;
}
return 'rgb(' + r + ', ' + g + ', ' + b + ')';
}
w.plotOptions.series.dataLabels.align = 'right';
w.plotOptions.series.dataLabels.inside = true;
w.plotOptions.series.dataLabels.color = '#49423d';
w.series.forEach(function(serie) {
for (var i = 0; i < serie.data.length; i++) {
var value = serie.data[i].y;
serie.data[i].color = getColor(value)
}
});
Highcharts.chart({
chart: w.general,
xAxis: w.xAxis,
yAxis: w.yAxis,
plotOptions: w.plotOptions,
series: w.series,
drilldown: w.drilldown,
legend: w.legend,
tooltip: w.tooltip
});
Понятно, что когда решение найдено, то в следующий раз применить его будет легко, но где и как искать не всегда очевидно.
Хочешь добавить подпись на бублик - а это превращается в маленькое исследование, зайди в документацию, найди, что для создание подписей к бублику нужен отдельный синтаксис. В какой-то момент я поймал себя на мысли: «Серьезно? Ради того чтоб добавить % от тотала мне пришлось проделать столько действий?»
Пример реализации подписей у pie chart в Visiology:
@point.name + " " + (@value.y/@total*100).toFixed(2) + "%"
Хочешь зайти в магазин, как Power BI и скачать себе визуал – календарь. Увольте сударь, будьте любезны повторить функционал через сводную таблицу.
Далее, в отчете был инструмент позволяющий посмотреть % выполнения задачи мерчем на визите, и можно было кликнуть на нужный KPI и увидеть рядом фотографию сделанную в торговой точку. Пришлось искать обходной путь решения...
Но в конце концов находится решение - и оно работает. Понятно, что когда делаешь задачу впервые, то всё происходит медленно. Я убил 2 часа, чтобы раскрасить bar chart (я прям совсем не знаком c JS). Неприятно знаете ли
Не могу оставить без внимания поддержку Visiology. Тут вопросов нет, строгие 10 из 10. Помогают быстро и по делу. Накидывают варианты решения задачи, всегда с примерами. Отдельное спасибо ребятам.
В итоге - все нужные визуализации были реализованы. Не всегда самым коротким путем, но без потери функциональности.
DAX от Visiology - ограничения есть, но это не конец
Самый чувствительный момент - язык расчетов. Если вы работали с DAX в Power BI, то знаете, насколько он мощный. В Visiology он есть, но… скажем так, не в полном объеме.
Надо заметить что многие функции у Visiology не реализованы, а некоторые реализованы с неполным функционалом. Но все задачи решили, кроме одной, сейчас расскажу.
Нужно было посчитать модальную цену - самую частую.
Условно за неделю было сделано множество визитов в множество точек популярной торговой сети с зеленым клевером на логотипе. С каждого визита мы получили цену на продукт Х. Но в реальности цена не всегда корректна, то ценник стоял не тот, то рука дернулась и фотка смазана, то ИИ-шка не справилась с распознаванием. Вот и берем за истину ту цену, которая встречалась чаще всего
В Power BI - одна мера, и всё работает при любых фильтрах, в любых разрезах.
Пример меры нахождения модальной цены DAX: Price Moda =
MINX(
TOPN(1,
ADDCOLUMNS(
CALCULATETABLE(VALUES(Prices[price]),not(ISBLANK(Prices[price]))),
"PriceCount",CALCULATE(COUNT(Prices[id]))
),
[PriceCount],DESC)
, Prices[price])
В Visiology - это просто сделать нельзя.
Я долго пытался решить это «красиво». Не получилось. И вот здесь пришлось принять важную мысль: иногда нужно не бороться с инструментом, а поменять подход. Пришлось вынести расчеты на уровень витрин. Это менее гибко, а скорее даже очень костно, для каждого разреза нужна отдельная витрина. Но главное - оно работает, хоть и с ограничениями, и дает корректный результат для бизнеса.
А что с производительностью?
На выбранном датасете Visiology отлично справилась с задачей, наибольшая таблица имеет около 30млн. строк. Просадок по скорости работы замечено не было. Иногда даже получили прирост, так как решения, которые закрывались мерами в Power BI, пришлось закрыть предрассчитанными витринами в Visiology.
Выводы
Было ли сложно? Да. Но стоит заметить, что для теста была специально взята комплексная модель, и отчет с большим количеством различных метрик и визуализаций.
Реализуемо? Определенно да.
Visiology не позволяет просто взять и скопировать Power BI один в один. И если вы заходите с таким ожиданием - будет больно.
Но если смотреть на задачу иначе - не «повторить инструмент», а решить бизнес-задачу - то всё встает на свои места.
Да, где-то нужно пересобрать витрины данных. Да, где-то приходится искать обходные пути. Да, иногда приходится думать там, где просто не ожидаешь подвоха.
Но в итоге:
-все ключевые метрики считаются
-вся аналитика доступна
-все сценарии использования закрыты
И это, на мой взгляд, главное.
Visiology - это не российская версия Power BI, это другой инструмент. Внешне похожи, но дьявол кроется в деталях. Понятное дело, что Power BI это стандарт в аналитике де факто, но в текущих реалиях Visiology - замечательная альтернатива. Visiology зрелое решение, которое реально способно тянуть сложную аналитику. Инструмент однозначно рабочий.