Обсудить
бизнес-задачи

Умножение двух чисел посредством разработки пользовательской функции Jinja в Apache SuperSet

блог о bi, №1 в рунете
Умение пользоваться шаблонами Jinja в Apache Superset позволит расширить функционал ваших дашбордов, а в некоторых случаях оптимизировать датасет. О таких свойствах мы писали в нескольких статьях: «Предварительная фильтрация данных во вложенном запросе по значениям фильтров в Apache Superset», «Создание юзеров с ограниченными правами в Apache Superset» и «Вывод разных полей датасета в одной колонке таблицы в зависимости от значения фильтра». Не многие знают, что есть возможность разработать свой шаблон, такой пример мы рассмотрим в этой статье.

Нельзя забывать включить шаблоны Jinja: установите ENABLE_TEMPLATE_PROCESSING значение True в файле \superset\docker\pythonpath_dev\superset_config.py.
Исходный код стандартных шаблонов Jinja можно посмотреть в файле \superset\superset\jinja_context.py.
Чтобы добавить пользовательскую функцию и расширить контекст Jinja, не делая новую сборку docker контейнера, необходимо определить JINJA_CONTEXT_ADDONS в файле \superset\docker\pythonpath_dev\superset_config.py следующим образом:

ㅤJINJA_CONTEXT_ADDONS = {
ㅤㅤ'<Название_шаблона>': <тело_функции>,
ㅤ}

В качестве примера создадим функцию tst, которая рассчитывает произведение двух чисел:

ㅤJINJA_CONTEXT_ADDONS = {
ㅤㅤ'tst': lambda x=0, y=0: x * y,
ㅤ}
Останавливаем контейнер и запускаем его снова:
docker-compose stop
docker-compose -f docker-compose-non-dev.yml up –d
Переходим по ссылке http://localhost:8088/login/, авторизуемся и заходим в SQLLab для проверки работоспособности нашего пользовательского шаблона:
На рисунке видно, что функция работает на входе у нас два числа 2 и 3, на выходе одно число 6.