В этом уроке мы поговорим о двух важных возможностях Apache Superset: вычисляемых полях (Calculated Fields) и объединении данных (Data Blending). Это можно представить как работу с данными в двух направлениях: *Calculated Fields расширяет данные "вертикально" – добавляет новые колонки *Data Blending расширяет "горизонтально" – добавляет новые данные
Если говорить на языке SQL, то Calculated Fields похож на ADD COLUMN, а Data Blending похож на UNION операции.
Calculated Fields
Начнем с вычисляемых полей. В Superset есть три основных типа вычислений:
- Арифметические действия
- Сложение, вычитание, умножение
- Возведение в степень
- Любые математические операции
- Агрегация
- Базовые функции: MIN, MAX, AVG, SUM, COUNT
- Дополнительные: COUNT DISTINCT и другие
- Можно комбинировать с условиями
- Условные вычисления Используем CASE для создания условной логики:
CASE
WHEN условие THEN результат
ELSE альтернатива
END as новая_колонка
Давайте на практике посмотрим, как это работает. Создадим круговую диаграмму с условным вычислением. Для начала возьмем наш датасет с продажами и применим следующий запрос:
SELECT
c.age,
(p.price * s.quantity) AS purchase_amount,
c.customer_id,
p.name AS product_name
FROM sales s
JOIN customers c ON s.customer_id = c.customer_id
JOIN products p ON s.product_id = p.product_id
ORDER BY c.age;
Добавим в Dimension колонку age. В Metrics добавим условие:
CASE
WHEN age < 30 THEN 0
ELSE SUM(purchase_amount)
END
Мы исключаем из анализа все продажи покупателей младше 30. После применения видим, как изменились пропорции:
Хотя Superset и позволяет делать сложные вычисления, лучше тяжелые расчеты выполнять на уровне ETL или базы данных. BI-инструмент лучше использовать для визуализации и легких трансформаций.
Data Blending
Теперь поговорим об объединении данных (Data Blending). Superset может работать с разными источниками:
- Файлы:
- Excel, CSV, TXT
- XML, JSON
- Access
- Базы данных:
- SQL Azure
- MySQL
- MS SQL Server
- Oracle
- Apache Hadoop
- Внешние сервисы:
- CRM системы
- 1C
- Яндекс.Директ, Метрика
- Google Analytics
- Социальные сети
- Облачные хранилища:
- Google Drive
- Яндекс.Диск
Чтобы объединить данные из разных источников, нужно загрузить их в Superset и создать новый датасет. После этого можно использовать SQL Lab для объединения таблиц через JOIN или UNION.
Перед объединением убедитесь, что структура данных совместима. Лучше стандартизировать названия колонок и типы данных заранее. Также для сложных интеграций лучше использовать ETL-процессы.
И последнее: не пытайтесь делать слишком сложные трансформации в Superset. Этот инструмент отлично подходит для визуализации и анализа, но тяжелую обработку данных лучше делать на уровне базы данных или ETL-процессов.
Выводы
Сегодня мы познакомились с двумя важными возможностями Apache Superset: Calculated Fields и Data Blending. Эти инструменты помогают расширить возможности работы с данными и создать более сложные визуализации. Но помните, что лучше всего использовать Superset для визуализации и анализа, а сложные трансформации делать на уровне базы данных или ETL-процессов.
Самостоятельная работа
В уроке «Подключение к данным» мы подключили базу flightsdb. В ней содержатся данные о авиаперевозках за два месяца — с 16 июля по 14 сентября 2017 года.
Схема базы данных выглядит так:
Задание № 1
Авиакомпаниям интересно узнать, из каких городов пассажиры предпочитают летать бизнес и комфорт классом. Составьте запрос, который сформирует таблицу содержащую записи о классе обслуживания, а также аэропортах вылета и прилета пассажиров. Полученные данные сохраните в виде таблицы.
Нажмите сюда, чтобы увидеть подсказку
Чтобы выполнить это задание, нужно:
- Добавить таблицу в дашборд
- Добавить фильтры по указанным полям
- Отфильтровать класс обслуживания Business и аэропорт вылета ROV
Результат будет выглядеть так:
В предыдущем задании мы получили общую информацию в целом по стране. Теперь нам нужно узнать, из каких городов России чаще всего летают бизнес или комфорт классом в Москву. Воспользуйтесь функциональностью вычисляемых полей и добавьте необходимые вычисления при условии, что:
arrival_airport
: SVO, VKO, DMEfare_conditions
: Business, Comfort
Чтобы выполнить это задание, нужно:
- В пункте QUERY MODE перейти в AGGREGATE
DIMENSIONS
:departure_airport
,arrival_airport
METRICS
:COUNT(fare_conditions)
FILTERS
:arrival_airport IN ('SVO', 'VKO', 'DME')
fare_conditions = 'Business' OR fare_conditions = 'Comfort'
Результат будет выглядеть так:
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.