Apache Superset: от данных до дашборда

Apache Superset: от данных до дашборда

Часто для людей Apache Superset (Суперсет) — open-source альтернатива Tableau (Табло). И когда переходишь из Табло в Суперсет и изучаешь информацию по Суперсету, всё кажется очень сложным и не дружелюбным. Схема того, как это всё работает выглядит примерно так:

Архитектура Apache Superset

Много всяких взаимосвязей, какая-то Jinja, для чего-то CSS и какой-то конфиг. В общем, выглядит сложно.

Схему я на самом деле переусложнил и попытался показать это так, как видел в самом начале знакомства с Суперсетом.

До этого я уже рассказывал про наш опыт переезда из Табло в Суперсет. В статье мы выяснили, что для погружения в любой BI инструмент важно научиться отвечать на следующие вопросы:

  1. Как загрузить данные?
  2. Как нарисовать график?
  3. Как задать стиль графику?
  4. Как расположить график на дашборд?
  5. Как настроить взаимодействие пользователя с дашбордом?
  6. Как задать стиль дашборду?

Чтобы понять, как сущности на картинке выше соотносятся с вопросами, ответы на которые нам нужно получить, выстроим всё это в одну линию: от базы до дашборда.

1. Как загрузить данные?

В отличие от Табло в Суперсете нет системы экстрактов. Дашборды всегда работают в Live режиме. Поэтому ответ на вопрос: как загрузить данные в Superset? Никак.

Поэтому почти всегда вопрос: «как что-то сделать в Суперсет?», например, посчитать метрику плавающим окном, превращается в: «как в моей базе данных написать запрос, который считает метрику плавающим окном?».

Но я чуть забегаю тут вперёд, подробнее дальше.

В Суперсете есть сущность датасета. Что это такое и для чего она нужна?

Датасет способ собрать метаданные от базы данных

2.1. Датасет хранит столбцы и логику

Датасет в первую очередь проводник мета-информации о таблице: название, столбцы и их типы данных.

Всю эту мета-информацию можно обогащать:

  1. Пользовательские метрики. Это любые агрегатные выражения, которые потом отрисовываются на графиках.
  2. Вычисляемые поля. Любые преображения данных, в которые зашивается какая-то дополнительная логика.

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

После их добавления появляется возможность добавить их на график
и построить нашу первую визуализацию:

f(x) в dynamic_date и GMV говорят о том, что это поля, добавленные пользователем

Так как наш первый график готов, самое время расположить его на дашборд:

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

С базовым функционалом мы разобрались. Следующий этап — настроить более сложную логику для взаимодействия пользователя с дашбордом. Здесь из-за кустов выходит та самая Jinja.

2.2. Jinja как способ сформировать логику

Лично для меня первое знакомство с Jinja (Джинжа) выглядело отталкивающим. Куча скобок, какие знаки вопроса, какие-то функции, что вообще происходит, зачем так сложно и вообще для чего, помогите?

В примере выше наглядное применение Jinja шаблонов:

  1. Пользователь меняет временной срез. Меняется форматирование оси Х и период, за который выводится график.
  2. Пользователь меняет группировку. Меняется то, в какой разбивке показывается график.

Теперь давайте углубимся и поймём, что это такое.

Джинжа — шаблонизатор, написанный на Python (как и бэкенд Суперсета) и приближенный к его синтаксису. Поэтому если вы знакомы с этим языком программирования, то вам будет легко понимать, что вообще проихсодит
в шаблонах.

Шаблонизатор направлен на работу с текстом. В нашем случае для 99% задач — помощь в генерации SQL.
Cамый простой пример шаблона в Python — форматирование строк:

Подставляем данные из списка в заранее заданную строку

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

Принцип работы шаблонизатора

Условная схема работы шаблонизатора такая:

  1. Есть шаблон
  2. Есть внешние данные
  3. Всё это обрабатывается программой (Джинжа)
  4. Выводится финальный результат

Разберём эту схему на конкретном примере работы в Суперсете:

  1. Шаблон — вычисляемое поле dynamic_date для Оси Х.

2. Внешние данные — фильтр, проброшенный из дашборда.

В нашем случае на дашборде был выбран фильтр "Квартал", он передался в график, мы видим его в разделе Filters. И результатом работы шаблонизатора стал SQL код, содержащий выражение в ветке

{% elif filter_values('dimension')|first == 'Квартал' %} 
  to_char(order_date, 'YYYY "Q"Q')

Это даёт очень широкие возможности для кастомизации запросов и позволяет настроить для пользователя практически любую интерактивность работы дашборда.

3. Откуда данные в графике?

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

Так как мы работаем на Live подключении, каждое обновление графика — запрос в базу данных, а все пилюли, что мы перетаскиваем при формирования графика — куски SQL кода, и то в какую часть запроса наше выражение отправится зависит от раздела (X-Axis, Metrics, Dimensions, Filters, Sort By, Row Limit), в который мы поле кладём.

Для того, чтобы лучше в этом разобраться, рекомендую поэкспериментировать с полями и посмотреть, как это влияет на SQL запрос, который пойдёт в базу. После этого любые вопросы относительно возможностей реализации каких-то расчётов скорее всего отпадут.

4. База отдаёт данные

По итогу сформированный запрос идёт в базу и база отдаёт нам данные, которые Superset уже интерпретирует и отрисовывает.

5. График кастомизирует изображение

Дальше с полученными графиком можно поиграться, настроив всякие мелкие улучшения. На данные это не повлияет, только на визуал. К сожалению, в Superset по умолчанию не так много возможностей для кастомизации.

6. Кастомизация на дашборде

Это последний этап, на котором проявляются конфиги дашборда и CSS.

Благодаря ним можно изменить отображение и стили на самом дашборде. Как правило мы убираем лишнее: отступы, заголовки, линии. Всё для того, чтобы финальный продукт стал чище читался лучше.

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

Также с дашборда можно кастомизировать внешнюю часть графиков.

Отвечаем на вопросы

Мы разобрали практически весь функционал Superset и теперь готовы к ответу на вопросы:

  1. Как загрузить данные?
    • Никак. Данные подгружаются динамически из SQL запроса, который вы задаёте в редакторе графика.
  2. Как нарисовать график?
    • Подключить датасет с нужной таблицей, расположить нужные элементы в редакторе графика.
  3. Как задать стиль графику?
    • Во вкладке кастомизация редактора графика, на дашборде через CSS.
  4. Как расположить график на дашборд?
    • Создать график. Создать дашборд. В редактировании дашборда расположить нужный график.
  5. Как настроить взаимодействие пользователя с дашбордом?
    • С помощью фильтров на дашборде и Jinja в графиках для отработки логики.
  6. Как задать стиль дашборду?
    • Через CSS на дашборде

Итого

Superset — хороший инструмент с очень большим количеством возможностей для кастомизации. Из-за такого количества возможностей, много чего перекладывается на разработчика и даётся ему в виде написания кода.

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

Read more

Почему мой заказчик мудак?

Почему мой заказчик мудак?

Если вы хотя бы раз задавались таким вопросом, потому что проделали работу в стол или в последний момент вам вносят большие правки, то поздравляю, вы скоро поймёте в чём дело! К сожалению или счастью ответ на этот вопрос упирается в скучную на первый взгляд тему: сбор требований. Тема сейчас очень

By Сергей
Как мы переезжали из Tableau в Superset и почему из 130 дашбордов оставили только 36

Как мы переезжали из Tableau в Superset и почему из 130 дашбордов оставили только 36

Зачем переезжать вообще? C 2022 года многие компании из РФ столкнулись с рисками и санкциями, из-за которых нужно было искать обходные локальные решения. Такое случилось и у нас в Т. Cчастливые специалисты, работающие с Tableau встали перед выбором нового сурового биай инструмента. После исследований разных вариантов остановились на Superset. Поэтому

By Сергей
5 принципов создания информационного продукта: от аналитики до UI

5 принципов создания информационного продукта: от аналитики до UI

Часто аналитики и разработчики сталкиваются с разработкой дашбордов. Аналитики также презентуют исследования, делают выгрузки и графики. Всё это — дата-продукт. Как делать всё это стабильно качественно и на что обращать внимание? В этой статье это и затронем. Для меня дата-продукт — превратить данные в ценность. Аналитики это делают в исследованиях, дашбордах, рассылках

By Сергей