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

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

Обсудить статью или задать вопрос — в Telegram.

Новые статьи — на почту

Без спама, раз в 1-2 недели.

Читайте также

Макро-повествование: этап мышления, о котором не говорят

Макро-повествование: этап мышления, о котором не говорят

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

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

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

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

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

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

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