Наш сайт использует файлы cookie, чтобы улучшить работу сайта, повысить его эффективность и удобство
Настройки сookie
Файлы cookie, необходимые для правильной работы сайта, всегда разрешены.
Основные файлы cookie
Всегда Включено. Эти файлы cookie необходимы для использования веб-сайта и его функций. Их нельзя отключить. Они устанавливаются в ответ на ваши запросы, такие как настройка параметров конфиденциальности, вход в систему или заполнение форм.
Аналитические файлы cookie
Disabled
Эти файлы cookie нужны чтобы помочь нам понять, на сколько вам удобен наш веб-сайт и насколько эффективны наши маркетологи:) Смотрите список аналитических файлов cookie, которые мы используем.
Рекламные файлы cookie
Disabled
Эти файлы cookie предоставляют информацию рекламным компаниям с целью предоставления или ограничения персонализированной рекламы. Эта информация может быть передана другим рекламным компаниям. Смотрите список рекламных файлов cookie, которые мы используем.
блог о bi, №1 в рунете

Вывод разных полей датасета в одной колонке таблицы в зависимости от значения фильтра

в Apache Superset

Не редко аналитики в своей работе используют однотипные таблицы для вывода показателей сгруппированных по разным признакам. Вывод плоских таблиц с набором метрик не является проблематичным в Apache Superset. Однако, если таких таблиц много, то может не хватить места в информационной части дашборда. Существует решение с использованием вкладок, но для каждой вкладки необходимо создать собственный чарт, что увеличивает также количество запросов.

Мы нашли решение, позволяющее использовать только один чарт для отображения однотипных таблиц с группировкой по разным колонкам используя внутренний фильтр и Jinja Templates.
1. Создадим тестовый запрос:
select 'col1_param1' as column_1, 'col2_param1' as column_2, 1 as value
union all select 'col1_param1' as column_1, 'col2_param2' as column_2, 2 as value
union all select 'col1_param2' as column_1, 'col2_param3' as column_2, 3 as value
union all select 'col1_param1' as column_1, 'col2_param1' as column_2, 1 as value
union all select 'col1_param1' as column_1, 'col2_param2' as column_2, 2 as value
union all select 'col1_param2' as column_1, 'col2_param3' as column_2, 3 as value
Выводить в таблице необходимо column_1 или column_2 и соответствующее значение value. В итоговом датасете будем использовать его в качестве вложенного запроса. Для начала запросим column_1 как column и value и создадим для него чарт с таблицей.
select column_1 as column, value
from (
select 'col1_param1' as column_1, 'col2_param1' as column_2, 1 as value
union all select 'col1_param1' as column_1, 'col2_param2' as column_2, 2 as value
union all select 'col1_param2' as column_1, 'col2_param3' as column_2, 3 as value
union all select 'col1_param1' as column_1, 'col2_param1' as column_2, 1 as value
union all select 'col1_param1' as column_1, 'col2_param2' as column_2, 2 as value
union all select 'col1_param2' as column_1, 'col2_param3' as column_2, 3 as value
)
2. Создадим датасет для фильтра с названиями колонок и сам фильтр:
Запрос справочника колонок для фильтра
select 'column_1' as column_by
union all select 'column_2' as column_by
3. Теперь необходимо добавить в датасет таблицы выбранное значение фильтра:
Затянуть значение фильтра в запрос можно использовать шаблон Jinja. Чтобы заработали шаблоны, необходимо включить ENABLE_TEMPLATE_PROCESSING флаг функции в superset_config.py. После этого код Python можно встраивать в виртуальные наборы данных.
Для запроса значения фильтра необходимо использовать следующую конструкцию {{ filter_values('column_by', )[0] }}.
Из дашборда переходим в область редактирования чарта:
В настройках чарта переходим в редактирование датасета
Откроется окно редактирования датасета. В ней необходимо нажать на замочек, чтобы открылась возможность редактирования, заменить «column_1» на шаблон jinja и нажать «Save».
Итоговый запрос:
select {{ filter_values('column_by', )[0] }} as column,
value
from (
select 'col1_param1' as column_1, 'col2_param1' as column_2, 1 as value
union all select 'col1_param1' as column_1, 'col2_param2' as column_2, 2 as value
union all select 'col1_param2' as column_1, 'col2_param3' as column_2, 3 as value
union all select 'col1_param1' as column_1, 'col2_param1' as column_2, 1 as value
union all select 'col1_param1' as column_1, 'col2_param2' as column_2, 2 as value
union all select 'col1_param2' as column_1, 'col2_param3' as column_2, 3 as value
)
Вернемся на дашборд и обновим его. Получаемый результат:
Примечания:
  1. Шаблоны Jinja не работают без контекста, т.е. при редактировании чарта вне дашборда значения фильтров необходимо прописывать вручную в области фильтрации чарта.
  2. Если вы все сделали правильно, но фильтр не работает, проверьте настройки Set filter mapping в дашборде: