Vous avez des données dans PostgreSQL et vous voulez les visualiser sans payer 145 €/mois pour Tableau ou 2000 €/mois pour Looker ? Apache Superset est la réponse. Gratuit, open-source, mature (projet top-level Apache depuis 2021), il est utilisé en production par Airbnb, Dropbox, Udemy et des centaines de startups. Voici comment passer de zéro à un dashboard professionnel en 30 minutes.

Pourquoi Superset plutôt que Metabase ou Grafana ?

Petit comparatif rapide avant de coder :

  • Superset : le plus puissant pour l’analytique. SQL Lab intégré, jointures cross-database, plus de 50 visualisations, cache configurable, filtres dashboard globaux. Idéal pour des équipes data.
  • Metabase : plus simple, orienté « utilisateur métier ». Parfait pour des dashboards rapides sans SQL, mais limité dès que ça devient complexe.
  • Grafana : excellent pour les métriques temps-séries (monitoring serveur, DevOps), mais pauvre pour l’analytique métier (pas de jointures, pas de filtres croisés).

Verdict : si vous avez des données relationnelles et que vous voulez des dashboards riches avec filtres, drill-down et exports, Superset est imbattable.

Étape 1 : installation avec Docker Compose

On utilise l’image officielle apache/superset. Créez un fichier docker-compose.yml :

version: '3.9'

services:
  superset:
    image: apache/superset:4.1.0
    container_name: superset
    ports:
      - "8088:8088"
    environment:
      - SUPERSET_SECRET_KEY=votreCleSecreteTresLongueAChanger
      - SUPERSET_LOAD_EXAMPLES=no
      - DATABASE_DIALECT=postgresql
      - DATABASE_HOST=db
      - DATABASE_PORT=5432
      - DATABASE_DB=superset
      - DATABASE_USER=superset
      - DATABASE_PASSWORD=superset_password
    volumes:
      - ./superset_data:/app/superset_home
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:16-alpine
    container_name: superset_db
    environment:
      - POSTGRES_DB=superset
      - POSTGRES_USER=superset
      - POSTGRES_PASSWORD=superset_password
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

  # Redis pour le cache (optionnel mais recommandé)
  redis:
    image: redis:7-alpine
    container_name: superset_redis
    restart: unless-stopped

Lancez les conteneurs :

docker compose up -d

Initialisez la base de données et créez un compte admin :

# Appliquer les migrations
docker compose exec superset superset db upgrade

# Créer l'admin
docker compose exec superset superset fab create-admin 
  --username admin 
  --firstname Admin 
  --lastname User 
  --email admin@example.com 
  --password MonMotDePasseComplexe123!

# Initialiser les rôles et permissions
docker compose exec superset superset init

Rendez-vous sur http://localhost:8088 et connectez-vous. Vous êtes accueilli par un tableau de bord vide — parfait, on va le remplir.

Étape 2 : connecter votre base de données source

Superset supporte plus de 30 bases de données : PostgreSQL, MySQL, BigQuery, Snowflake, ClickHouse, Druid, DuckDB, et même Google Sheets. Pour cet exemple, on va connecter une base PostgreSQL qui contient nos données de ventes.

Dans Superset : Settings → Database Connections → + Database.

-- URI de connexion PostgreSQL
postgresql://user:password@host:5432/nom_base

-- Exemple concret avec SSL
postgresql://analytics:MonMotDePasse@db-prod.internal:5432/ecommerce?sslmode=require

-- Pour un fichier DuckDB (analytique locale)
duckdb:////data/analytics.db

Astuce : testez la connexion avant de valider. Si vous voyez « Connection looks good! », passez à l’étape suivante.

Créez une vue métier dans votre base

Plutôt que de brancher Superset directement sur les tables brutes, créez des vues SQL dédiées à l’analytique. C’est plus propre et ça évite de surcharger la base de prod :

-- Vue analytics : ventes par jour, catégorie et région
CREATE VIEW analytics.ventes_dashboard AS
SELECT 
    o.created_at::date AS date_commande,
    p.category AS categorie_produit,
    c.region AS region_client,
    COUNT(DISTINCT o.id) AS nombre_commandes,
    SUM(oi.quantity * oi.unit_price) AS chiffre_affaires,
    AVG(oi.quantity * oi.unit_price) AS panier_moyen,
    COUNT(DISTINCT o.customer_id) AS clients_uniques
FROM orders o
JOIN order_items oi ON o.id = oi.order_id
JOIN products p ON oi.product_id = p.id
JOIN customers c ON o.customer_id = c.id
WHERE o.status = 'completed'
GROUP BY 1, 2, 3;

Étape 3 : créer votre premier dataset et graphique

Dans Superset : SQL Lab → SQL Editor. Collez cette requête pour explorer vos données :

SELECT 
    date_commande,
    categorie_produit,
    region_client,
    chiffre_affaires,
    nombre_commandes
FROM analytics.ventes_dashboard
WHERE date_commande >= CURRENT_DATE - INTERVAL '90 days'
ORDER BY date_commande DESC;

Cliquez sur Run, vérifiez les résultats, puis Save → Save as Dataset. Nommez-le « Ventes dashboard 90 jours ».

Retournez dans Charts → + Chart, sélectionnez votre dataset, et choisissez « Time-series Line Chart ». Configurez :

  • X-axis : date_commande
  • Metrics : SUM(chiffre_affaires)
  • Group by : categorie_produit
  • Time Grain : Week
  • Color Scheme : Superset Colors

Cliquez sur Update Chart. En quelques secondes, vous voyez l’évolution du chiffre d’affaires par catégorie sur 90 jours.

Étape 4 : créer un dashboard complet

Un seul graphique, c’est bien. Un dashboard, c’est mieux. Créez 4 graphiques basés sur le même dataset — 2 minutes par graphique en utilisant les modèles prédéfinis :

Graphique 1 : CA par région (Bar Chart)

Chart Type : Bar Chart — X-axis : region_client — Metrics : SUM(chiffre_affaires) — Sort By : SUM(chiffre_affaires), Descending.

Graphique 2 : Top 10 catégories (Pie Chart)

Chart Type : Pie Chart — Dimension : categorie_produit — Metric : SUM(chiffre_affaires) — Row Limit : 10.

Graphique 3 : Panier moyen par région (Big Number with Trendline)

Chart Type : Big Number with Trendline — Metric : AVG(panier_moyen) — Subheader : Panier moyen. Un indicateur synthétique qui attire l’œil.

Graphique 4 : Commandes par jour (Time-series Area Chart)

Chart Type : Area Chart — X-axis : date_commande — Time Grain : Day — Metrics : COUNT(nombre_commandes).

Sauvegardez chaque graphique (Ctrl+S ou Cmd+S). Puis Dashboards → + Dashboard, nommez-le « E-commerce Analytics 2026 », et glissez-déposez vos 4 graphiques dedans. Ajoutez un filtre dashboard sur date_commande pour que tous les graphiques réagissent à la plage de dates sélectionnée.

# Configuration du filtre dashboard
# Type : Time Range
# Column : date_commande
# Scope : All charts in dashboard
# Default : Last 90 days

Le résultat : un dashboard pro, interactif, avec filtres croisés, en 30 minutes chrono.

Étape 5 : bonnes pratiques de production

Quelques conseils pour passer du POC à la prod :

Cache et performance

Ajoutez ceci dans superset_config.py pour activer le cache Redis et éviter de solliciter la base à chaque rafraîchissement :

# superset_config.py
from superset.constants import CACHE_CONFIG

FILTER_STATE_CACHE_CONFIG = {
    'CACHE_TYPE': 'RedisCache',
    'CACHE_DEFAULT_TIMEOUT': 86400,
    'CACHE_KEY_PREFIX': 'superset_filter_',
    'CACHE_REDIS_URL': 'redis://redis:6379/0'
}

DATA_CACHE_CONFIG = {
    'CACHE_TYPE': 'RedisCache',
    'CACHE_DEFAULT_TIMEOUT': 3600,  # 1 heure
    'CACHE_KEY_PREFIX': 'superset_data_',
    'CACHE_REDIS_URL': 'redis://redis:6379/1'
}

Sécurité et accès

  • Activez HTTPS avec un reverse proxy Nginx et Let’s Encrypt.
  • Créez des rôles dans Superset : Viewer (lecture seule), Analyst (SQL Lab + création charts), Admin (config complète).
  • Utilisez OAuth2 pour l’authentification : Superset supporte Google, GitHub, Okta, Azure AD via Flask-AppBuilder.
  • Row-Level Security : limitez les données visibles par rôle. Par exemple, un commercial Europe ne voit que les données Europe.

Automatisation et CI/CD

Versionnez vos dashboards et datasets avec l’API REST de Superset :

# Exporter un dashboard en JSON
curl -X GET "http://localhost:8088/api/v1/dashboard/export?q=[1]" 
  -H "Authorization: Bearer TOKEN" 
  -o dashboard_backup.zip

# Importer via l'API
curl -X POST "http://localhost:8088/api/v1/dashboard/import/" 
  -H "Authorization: Bearer TOKEN" 
  -F "formData=@dashboard_backup.zip"

Stockez ces exports dans Git pour avoir un historique de vos dashboards et les déployer automatiquement via CI/CD.

Cas réel : comment on l’utilise chez un client e-commerce

Un de nos clients, e-commerce 15 M€ de CA annuel, utilisait 3 exports Excel quotidiens pour suivre ses ventes. On a migré vers Superset avec 5 dashboards interconnectés. Résultat :

  • Temps gagné : 2 heures par jour (plus d’exports manuels)
  • Réactivité : détection d’une baisse de conversion en 15 minutes au lieu de 48h
  • Adoption : toute l’équipe (marketing, logistique, finance) consulte ses dashboards le matin
  • Coût : 0 € de licence logicielle, uniquement le coût du serveur

Conclusion : passez à l’analytique open-source

Apache Superset n’est pas juste une alternative gratuite à Tableau ou Looker — c’est un outil de niveau entreprise, extensible, sécurisé, et qui s’intègre dans vos pipelines de données existants. En 30 minutes, vous avez un dashboard pro. En un mois, vous avez une plateforme analytics complète.

Et le meilleur ? Vous gardez le contrôle total de vos données. Pas de vendor lock-in, pas de limites arbitraires sur le nombre d’utilisateurs ou de graphiques. C’est votre data, votre infra, vos règles.


Sources et références

📖 À lire aussi : Pipeline ETL Python avec Polars et PostgreSQL : le guide complet en 30 minutes

W
WP Admin Lab

Architecte web full-stack. WordPress, performance, data et sécurité. Notes de terrain, tests reproductibles et retours d'expérience.