Честно говоря, когда мы затевали этот эксперимент, у меня были сомнения.

Не из серии «получится или нет», а скорее - насколько будет больно.

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

Но задача была понятная: проверить на практике, можно ли переехать на Visiology и не потерять ключевую аналитику. Не в теории, а вот прямо руками.

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

пример страницы отчета в Power BI
пример страницы отчета в 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 зрелое решение, которое реально способно тянуть сложную аналитику. Инструмент однозначно рабочий.