Kommo + Apache Superset: BI-аналитика продаж без лицензий
Apache Superset — open-source BI-платформа с возможностями enterprise-уровня: 40+ типов визуализаций, SQL Lab для произвольных запросов, ролевой доступ, встраиваемые дашборды. В отличие от Metabase Community или Google Looker Studio, Superset не имеет ограничений по количеству пользователей и позволяет настроить тонкую гранулярность доступа к данным. Подключение Kommo к Superset через промежуточную базу данных даёт полноценную BI-аналитику воронки без лицензионных расходов.
Superset vs Metabase: когда выбирать что
Оба инструмента open-source, оба подключаются к PostgreSQL. Разница — в глубине возможностей и сложности настройки.
| Параметр | Apache Superset | Metabase Community |
|---|---|---|
| Типы визуализаций | 40+ (включая heatmap, treemap, sunburst) | ~20 |
| SQL Lab | Да (полноценная IDE) | Упрощённый |
| Ролевой доступ | Гранулярный (row-level security) | Базовый |
| Встраивание (embed) | Да (бесплатно) | Платно (Pro) |
| Время развёртывания | 30–60 мин (Docker Compose) | 5–10 мин |
| Порог входа | Выше | Ниже |
Metabase — правильный выбор когда команда небольшая и нужен быстрый старт. Подробнее об этой схеме в статье о Kommo и Metabase для аналитики CRM. Superset — когда нужна enterprise-гибкость, встраивание дашбордов в продукт или строгий ролевой доступ.
Архитектура: Kommo -> PostgreSQL -> Superset
Superset не подключается напрямую к Kommo API — работает с реляционными БД. Нужен ETL-пайплайн:
Kommo API (каждые 15–60 мин)
↓ ETL-скрипт
PostgreSQL
↑
Apache Superset -> дашборды, SQL Lab, алерты
Схема таблиц та же, что и для Metabase: leads, contacts, lead_status_history, tasks, users, pipelines. Ключевая таблица для time-on-stage аналитики — lead_status_history.
Развёртывание Superset через Docker Compose
# docker-compose.yml (минимальная конфигурация)
version: '3'
services:
superset:
image: apache/superset:latest
ports:
- '8088:8088'
environment:
- SUPERSET_SECRET_KEY=your-secret-key-here
volumes:
- superset_home:/app/superset_home
volumes:
superset_home:
После запуска:
docker exec -it superset superset fab create-admin \
--username admin --firstname Admin \
--lastname User --email admin@example.com \
--password yourpassword
docker exec -it superset superset init
Superset готов по localhost:8088. Подключение к PostgreSQL — через Settings -> Database Connections -> postgresql://user:pass@host:5432/db.
ETL: выгрузка данных из Kommo
Тот же инкрементальный подход, что и для Metabase:
def sync_kommo_to_postgres():
last_sync = get_last_sync_timestamp()
# Лиды, изменённые с последней синхронизации
leads = kommo_api.get_leads(
updated_from=int(last_sync.timestamp()),
with_=["contacts", "custom_fields"]
)
for lead in leads:
upsert_lead(lead) # INSERT ... ON CONFLICT (id) DO UPDATE
upsert_lead_contacts(lead)
# История изменений статусов
events = kommo_api.get_events(
filter_type="lead_status_changed",
created_from=int(last_sync.timestamp())
)
for event in events:
insert_status_history(event)
save_sync_timestamp(datetime.now())
Запускается по cron каждые 15–30 минут для оперативных дашбордов.
Row-Level Security: доступ к данным по ролям
Superset поддерживает Row-Level Security (RLS) — ограничение строк таблицы для конкретных пользователей или групп. Это критично когда руководители отделов должны видеть только свои сделки:
-- Правило RLS: менеджер видит только свои сделки
-- Привязка: Superset user.username = kommo.users.email
[responsible_user_email] = '{{current_username()}}'
Nastройка в Superset: Security -> Row Level Security -> Add Rule. Применяется к таблице leads — каждый менеджер видит только свои строки, руководитель (admin-роль) видит всё.
Примеры дашбордов
Воронка с конверсией по этапам (Funnel Chart):
Superset имеет нативный Funnel Chart — не нужно писать SQL для базовой воронки. Источник: таблица leads, группировка по status_id, сортировка по количеству.
Время на этапе (Box Plot или Heatmap):
SELECT
stage_name,
PERCENTILE_CONT(0.5) WITHIN GROUP
(ORDER BY hours_on_stage) AS median_hours,
PERCENTILE_CONT(0.9) WITHIN GROUP
(ORDER BY hours_on_stage) AS p90_hours
FROM lead_status_history h
JOIN stages s ON h.to_status = s.id
WHERE h.changed_at > NOW() - INTERVAL '90 days'
GROUP BY stage_name
Когортная аналитика (лиды по месяцу создания -> конверсия):
SELECT
DATE_TRUNC('month', created_at) AS cohort_month,
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status_id = 142) AS won,
ROUND(100.0 * COUNT(*) FILTER (WHERE status_id = 142) / COUNT(*), 1) AS win_rate
FROM leads
GROUP BY 1
ORDER BY 1
Встраивание дашбордов
Superset поддерживает Guest Token API для встраивания дашбордов в сторонние приложения без логина:
# Получить guest token
response = requests.post(
f'{SUPERSET_URL}/api/v1/security/guest_token/',
json={
'user': {'username': 'guest'},
'resources': [{'type': 'dashboard', 'id': DASHBOARD_UUID}],
'rls': [{'clause': f'responsible_user_email = \'manager@company.com\''}]
},
headers={'Authorization': f'Bearer {admin_token}'}
)
guest_token = response.json()['token']
Дашборд встраивается в iframe с ?token={guest_token} — без необходимости создавать аккаунт Superset для каждого менеджера.
Для кого актуально
Kommo + Superset имеет смысл если:
— Нужны дашборды в продукте или портале для клиентов (embedded analytics)
— Требуется строгий row-level security: менеджеры видят только свои данные
— Команда аналитиков хочет SQL Lab без ограничений
— Масштаб: 50,000+ сделок, где Metabase начинает тормозить на сложных запросах
— Нет бюджета на Tableau ($70/пользователь/мес) или Looker ($3,000+/мес)
Часто задаваемые вопросы
Superset сложнее Metabase — стоит ли переходить?
Если текущий инструмент справляется — переходить не стоит. Superset даёт преимущества в трёх конкретных случаях: встраивание дашбордов, row-level security, расширенные типы визуализаций (heatmap, treemap). Если этих задач нет — Metabase проще и быстрее в настройке.
Как обновлять Superset без потери настроек?
Все настройки (дашборды, чарты, датасеты) хранятся в метаданных PostgreSQL Superset (отдельная БД от данных Kommo). При обновлении образа Docker данные не теряются если volumes корректно настроены. Рекомендуется экспортировать дашборды в ZIP (Dashboard -> Export) перед обновлением.
Какая БД лучше — PostgreSQL или ClickHouse?
До 5 миллионов строк — PostgreSQL с индексами справляется. При больших объёмах и GROUP BY по сотням миллионов строк — ClickHouse в 10–100 раз быстрее. Для большинства Kommo-аккаунтов (до 100,000 сделок) PostgreSQL достаточно.
Superset поддерживает алерты?
Да. Superset имеет встроенные Alerts & Reports: задать условие (например, конверсия < 10%) -> отправить email или Slack-сообщение. Требует настройки Celery и Redis в docker-compose.
Итого
- Apache Superset — open-source альтернатива Tableau и Looker с enterprise-функциями: row-level security, встраивание, SQL Lab
- Архитектура идентична Metabase: Kommo API -> PostgreSQL (ETL каждые 15–30 мин) -> Superset
- Преимущество над Metabase: гранулярный доступ, embedded analytics, 40+ типов визуализаций
- Развёртывание через Docker Compose, 30–60 минут
- Типовой срок разработки ETL + базовые дашборды — 3–4 недели
Если вам нужна аналитика воронки Kommo с встраиванием в портал или row-level security для менеджеров — опишите задачу. Exceltic.dev оценит объём данных и настроит ETL + Superset.