День 4.
Расширяем анализ.
Догружаем справочники из Excel

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

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

Параметризация выражений в конструкторе дашбордов

✅Запустите дизайнер дашбордов, и откройте дашборд, который вы создавали вчера.

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


Эту ситуацию можно разрешить несколькими способами:

Первый способ - встроить фильтры в запрос к группе показателей.

✅Для этого выберите соответствующую опцию в настройке группы показателей, предварительно выделив график продаж.

✅Выберите в качестве фильтра измерение Статус

В секции фильтра появится поле Статус.

✅Щелкните по значку воронки, чтобы установить желаемое значение фильтра

✅Выберите значение Win.

✅Форма линии почти не изменится, но вы заметите, что шкала показателя будет заполнена другими значениями.

✅По аналогии со Статусом, установите фильтр со значением Date_close по измерению Тип события.

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


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

Еще один способ создания пользовательских выражений - добавление расчетных показателей. Измените заголовок графика с помощью раздела Настройки > Заголовок > Текст, на “Сумма продаж”.

✅Скопируйте график с помощью кнопок Копировать/Вставить. Измените заголовок у нового графика на “Продано продукции"

✅В запросе удалите показатель Сумма продаж, а также фильтры. Кликните по кнопке “Добавить расчетный показатель”

✅Используя доступный список измерений и показателей, сформулируйте формулу с условием, что если статус сделки равен Win и Тип события равен Close date, тогда нужно брать значение поля Количество, а иначе - 0.
У меня эта формула выглядит так (ссылка на справку по синтаксису выражений):



if([Sdelki].[Status]=='Win' and [Sdelki].[Date_type]=='Close_date',[Amount],0)
✅Назовем показатель “Продано продукции”
Теперь у нас есть 2 графика с разными показателями. Давайте их еще немного поднастроим.

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

✅В настройках диаграммы задайте цвет для первого показателя - оранжевый.

✅Также, в разделе Подписи вы можете вывести подписи значений на графике. Главное, отключите перекрывающиеся подписи, чтобы не замусоривать график.

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

Вычисляемые поля в базе данных ViQube

Способ создания расчетных показателей имеет тот же недостаток, что и вариант с фильтрацией - такие показатели сложно переиспользовать в других визуализациях. Этот момент можно обойти с помощью следующего подхода. Зайдите в административную часть на сервере Visiology через браузер.
Зайдите в административную часть на сервере Visiology через браузер.
✅Раскройте вашу учебную базу данных. Как видите, помимо настройки загрузки данных, там присутствуют раздела измерений и групп показателей. Откройте группу показателей Сделки.

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

Но нас сейчас интересует раздел “Расчетные показатели”. Здесь можно добавить вычисляемые показатели по аналогии с тем, как мы делали в дашборде. С одной лишь разницей - в конструкторе дашбордов они будут доступны как готовые элементы в группе показателей.

✅Создайте 4 показателя с формулами:
  • Сумма продаж (сумма успешных сделок на дату закрытия): if([Sdelki].[Status]=='Win' and [Sdelki].[Date_type]=='Close_date', [Summa_sdelki],0)
  • Упущенная выручка (сумма проигранных сделок на дату закрытия): if([Sdelki].[Status]=='Lose' and [Sdelki].[Date_type]=='Close_date', [Summa_sdelki],0)
  • Потенциал продаж (сумма любых сделок на дату создания): if([Sdelki].[Date_type]=='Create_date',[Summa_sdelki],0)
  • Продано продукции (сумма количества в успешных сделках на дату закрытия): if([Sdelki].[Status]=='Win' and [Sdelki].[Date_type]=='Close_date', [Amount],0)
Всем показателям ставим SUM как функцию агрегации.

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

Расширяем модель данных

Давайте добавим в нашу модель несколько таблиц, которые расширят кол-во доступных измерений. Скачайте архив с Excel-файлами:
Нас интересует файл Users, как справочник пользователей.
✅Создайте в учебной базе новый загрузчик, добавьте в него файл Users, и зайдите в настройки структуры данных.

✅Добавьте все поля этой таблицы в измерение “Менеджеры”. Переименуйте поля с именем и подразделением в ФИО и Филиал. Сохраните изменения и загрузите данные.

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


✅Выведите на дашборде линейчатую диаграмму, с графиком продаж по филиалам.

✅В настройках фильтра установите влияние на все виджеты, и проверьте, как он работает.

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

Зайдите на сервере в группы показателей Сделки, а в ней - в связи календарных измерений.

✅Добавьте связь для поля Date, указав ей гранулярность “День”

✅Сохраните изменения. Вернемся в конструктор дашбордов.

✅Добавьте на дашборд элемент Текст.

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

Потому что для вывода данных в текстовой области нужно прибегнуть к подстановке JavaScript кода.

✅Вставьте в поле Текст данную конструкцию. Она выводит значение первого показателя, делит его на тысячу, и добавляет подпись “тыс. руб”.

@value==null?'':(Math.round(@value/1000)).toString().replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' ')+' тыс. руб'

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

Однако, в данный момент визуализация показывает сумму продаж за все время. Нужно добавить фильтр по текущему году. Конечно, можно было бы выбрать фильтр “2023” из справочника в базе ViQube. Но кто потом будет менять все эти фильтры каждый новый год?

✅Поэтому, в запросе установим галочку “Диапазон по датам”, и выберем Календарь, как источник диапазонов. Кстати, это системный календарь, а не наше измерение Календарь.

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


Теперь вы можете изменить цвет значения на соответствующий графику, и повторить аналогичную операцию для кол-ва проданной продукции.
✅В виджете для кол-ва продукции также оставьте деление на тысячу, просто измените подпись на “тонн”.

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


СОЗДАНИЕ СЛОЖНЫХ ПОКАЗАТЕЛЕЙ С НЕСКОЛЬКИМИ АГРЕГАЦИЯМИ
Иногда требуется создавать показатели, основанные на вычислениях между агрегациями. Например, средний чек, как Сумма продаж, деленная на кол-во уникальных чеков.
Во второй версии Visiology эта задача решается добавлением специальных расчетных столбцов на уровне визуализации. Ниже ссылка на инструкцию

ЗАКЛЮЧЕНИЕ

В Visiology можно создавать параметризованные выражения тремя способами:
  • 1
    Используя фильтры в запросах
    Этот метод лучше применять как один из вариантов отображения показателя, а не как бизнес-логику. Т.е. изначальное выражение должно быть правильным и без применения фильтров. Хороший пример - фильтровать сумму продаж по периодам вроде “прошлый год, текущий год” и т.д.
  • 2
    Использовать вычисляемые показатели.
    В них можно реализовывать бизнес-логику, т.к. в выражениях можно использовать все показатели и измерения текущей модели данных, в т.ч. находящиеся в разных таблицах. Хороший пример - создание показателей по разным видам сумм сделок. Реализовывать такое через фильтр было бы неправильно. Однако на больших объемах данных и сложных выражениях это может плохо сказаться на производительности. В этом случае подготовку данных нужно осуществлять на стороне источника. Также, если вы хотите создавать переиспользуемую формулу, лучше прописывать ее в настройке группы показателей на стороне ViQube.
  • 3
    Отбор по календарю
    Для условий отбора по календарю нужно связать календарное поле таблицы показателей с системным календарем. Тогда можно будет использовать фильтрацию по относительным периодам (прошлый/текущий год/квартал/месяц и т.д.).

Домашнее задание

  • Загрузите в ViQube справочники клиентов и продукции, создав для них измерения, и соединив с таблицей продаж. По аналогии, как мы делали для таблицы Users.
  • Добавьте на дашборд диаграмму кол-ва продаж с по категориям товаров по аналогии с суммой продаж по филиалам.

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

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

Помните, что для самых активных участников чата заготовлены призы от Visiology! ;)