Salta el contingut

Metabase

Metabase és una eina de Business Intelligence de codi obert pensada perquè qualsevol persona — no només l'equip de dades — pugui fer preguntes a una base de dades i obtenir respostes visuals en segons. A diferència de Power BI o Superset, no requereix llicència, s'instal·la amb un únic contenidor Docker i el seu editor de preguntes "point and click" no necessita SQL per a les consultes més habituals.

En aquest apartat connectarem Metabase a les bases de dades que ja hem construït nosaltres mateixos al llarg del mòdul (la pràctica de PostgreSQL del Bloc 2, i més endavant MongoDB), per tancar el cercle: des de la ingestió i l'emmagatzematge fins a la visualització final, tot amb les nostres pròpies dades.


Per què Metabase

Característica Metabase Power BI Apache Superset
Llicència Open source (AGPL) Propietària (Microsoft) Open source (Apache 2.0)
Instal·lació Un sol contenidor Docker Aplicació d'escriptori Windows Diversos serveis Docker
Corba d'aprenentatge Molt baixa Mitjana (DAX) Mitjana-alta
Consultes sense SQL Sí (Question builder) Sí (Power Query) Limitat
Consultes SQL natives Sí (DAX/M)
Connectors de BD PostgreSQL, MySQL, MongoDB, BigQuery, Redshift... Desenes de connectors Desenes de connectors
Ideal per a Equips petits, prototipat ràpid, dades operacionals Entorns corporatius Microsoft Plataformes analítiques a gran escala

Quan triar Metabase

Metabase brilla quan es vol respondre preguntes de negoci sobre una base de dades operacional (la mateixa que alimenta una aplicació) sense haver de muntar un pipeling ETL complet primer. És l'eina ideal per validar ràpidament si unes dades tenen valor abans d'invertir en una arquitectura de BI més sofisticada.


Instal·lació amb Docker

Metabase es distribueix com una única imatge Docker amb una base de dades interna H2 per defecte (val per a proves; en producció es recomana PostgreSQL per emmagatzemar la pròpia configuració de Metabase).

# docker-compose.yml — Metabase
services:
  metabase-nom-cognom:
    image: metabase/metabase:v0.50
    container_name: metabase-nom-cognom
    ports:
      - "3001:3000"
    volumes:
      - metabase_data_nom_cognom:/metabase-data
    environment:
      MB_DB_FILE: /metabase-data/metabase.db

volumes:
  metabase_data_nom_cognom:
docker compose up -d
# Accedir a http://localhost:3001 i completar l'assistent inicial
# (nom, correu, contrasenya d'administrador)

Connectar Metabase amb les teves pròpies pràctiques

Metabase només pot connectar-se a una base de dades si hi té accés de xarxa. Si el contenidor de PostgreSQL de la teva pràctica del Bloc 2 viu en un altre docker-compose.yml, la manera més senzilla és afegir el servei metabase-nom-cognom al mateix fitxer que ja conté postgres-nom-cognom, de manera que comparteixin la xarxa Docker per defecte i Metabase pugui adreçar-se a la base de dades pel seu nom de contenidor.


Connectar Metabase a la base de dades PostgreSQL pròpia (Bloc 2)

Reaprofitem el contenidor postgres-nom-cognom creat a la pràctica PR507402: la mateixa base de dades bigdata_nom_cognom amb les taules de vendes que ja vam optimitzar amb índexs i particionament.

Amplia el docker-compose.yml de la pràctica afegint-hi el servei de Metabase:

services:
  postgres-nom-cognom:
    # ... configuració ja existent de la pràctica PR507402 ...

  metabase-nom-cognom:
    image: metabase/metabase:v0.50
    container_name: metabase-nom-cognom
    ports:
      - "3001:3000"
    volumes:
      - metabase_data_nom_cognom:/metabase-data
    environment:
      MB_DB_FILE: /metabase-data/metabase.db
    depends_on:
      postgres-nom-cognom:
        condition: service_healthy

volumes:
  pgdata_nom_cognom:
  metabase_data_nom_cognom:

A l'assistent inicial de Metabase (o a Configuració d'administrador → Bases de dades → Afegeix una base de dades), introdueix:

Camp Valor
Tipus de base de dades PostgreSQL
Nom a mostrar Vendes — nom_cognom
Host postgres-nom-cognom (nom del contenidor, no localhost)
Port 5432 (el port intern del contenidor, no el 5433 publicat a l'host)
Nom de la base de dades bigdata_nom_cognom
Usuari postgres
Contrasenya bigdata2026

Per què postgres-nom-cognom i no localhost

Quan Metabase i PostgreSQL corren com a serveis del mateix docker-compose.yml, Docker crea una xarxa interna on cada contenidor és accessible pel seu nom de servei. localhost dins del contenidor de Metabase fa referència al propi contenidor, no a l'amfitrió ni als altres contenidors.


Crear la primera pregunta (Question)

Metabase distingeix dues formes de fer preguntes:

Question builder (sense SQL): tria la taula vendes, afegeix un filtre (data_comanda dins de l'últim any), una agrupació (Sum of import per categoria) i Metabase genera automàticament un gràfic de barres. Útil per a usuaris de negoci sense coneixements de SQL.

SQL natiu: per a consultes complexes (finestres, CTEs, subconsultes) que el builder no cobreix:

-- Pregunta SQL natiu a Metabase: top 5 categories per marge
SELECT
    categoria,
    SUM(import_total)                       AS vendes_totals,
    SUM(import_total - cost_producte)        AS marge_total,
    ROUND(
        100.0 * SUM(import_total - cost_producte) / SUM(import_total), 2
    )                                         AS marge_percentual
FROM vendes
WHERE data_comanda >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY categoria
ORDER BY marge_total DESC
LIMIT 5;

Qualsevol pregunta es pot desar (Save) i reutilitzar com a font d'un dashboard o d'una alerta.


Construir un Dashboard

  1. New → Dashboard, posa-li un nom (Vendes nom_cognom — Resum executiu).
  2. Afegeix-hi les preguntes desades com a cards: un KPI de vendes totals, el gràfic de barres per categoria, la consulta SQL del marge.
  3. Afegeix un filtre de dashboard (per exemple, un rang de dates) i connecta'l a totes les cards que usen el camp data_comanda: un sol selector filtra tots els gràfics alhora.
  4. Ajusta la disposició arrossegant i redimensionant les cards en la graella.
  5. Subscripcions: configura un enviament per correu o Slack del dashboard cada dilluns al matí (requereix configurar un servidor SMTP a Configuració d'administrador).
flowchart LR
    A["Base de dades\npostgres-nom-cognom"] --> B["Question\n(builder o SQL)"]
    B --> C["Card del Dashboard"]
    C --> D["Dashboard\namb filtres compartits"]
    D --> E["Subscripció\nemail / Slack"]

Miniactivitat: dashboard sobre la teva pròpia base de dades

Connecta Metabase a la base de dades bigdata_nom_cognom de la teva pràctica PR507402. Crea un dashboard amb com a mínim: (1) un KPI numèric, (2) un gràfic d'evolució temporal, (3) un gràfic de comparació entre categories, i (4) un filtre de dashboard que afecti totes les cards. Fes una captura del resultat.


Alertes automàtiques

A més de dashboards, qualsevol pregunta numèrica es pot convertir en una alerta: Metabase l'executa periòdicament i envia una notificació quan el valor supera o cau per sota d'un llindar (per exemple, "avisa'm si les vendes diàries baixen de 5.000€"). És l'equivalent senzill a una regla d'observabilitat sense necessitat de Grafana ni Prometheus.


Més enllà de PostgreSQL: altres fonts pròpies del mòdul

Metabase també incorpora un connector oficial per a MongoDB, la base de dades no relacional que vam treballar al Bloc 3. El procediment és anàleg: afegir el contenidor de Metabase a la mateixa xarxa Docker que mongo-nom-cognom i donar d'alta la connexió amb Tipus de base de dades = MongoDB, indicant el host (nom del contenidor), el port intern 27017 i el nom de la base de dades.

A diferència de PostgreSQL, MongoDB no té un esquema fix: Metabase infereix els camps mostrejant documents de cada col·lecció, així que els resultats poden variar si els documents no són homogenis — un bon recordatori de per què la validació d'esquema ($jsonSchema) que vam veure al Bloc 3 també importa de cara a la capa de BI.

Una sola eina, totes les fonts del curs

Amb una mateixa instal·lació de Metabase es poden donar d'alta diverses connexions (PostgreSQL del Bloc 2, MongoDB del Bloc 3, fins i tot un Data Warehouse al núvol del Bloc 4) i combinar-les en un mateix dashboard. Això la converteix en una eina molt útil per repassar de manera visual tot el que s'ha construït al llarg del mòdul.


Exercici pràctic

Sense necessitat de cap dataset extern: reutilitza la base de dades de la teva pràctica PR507402 — Optimització de BD relacional i munta un dashboard complet a Metabase que respongui, com a mínim, a aquestes tres preguntes de negoci:

  1. Quina és l'evolució mensual de vendes de l'últim any?
  2. Quines són les 5 categories amb més marge?
  3. Quin percentatge de comandes supera el tiquet mig?

Documenta a l'informe de la pràctica les consultes SQL natives utilitzades i una captura del dashboard final.