Práctica: Modelar una Tabla de Ventas desde Cero

Lectura
30 min~4 min lectura

Concepto clave

Modelar una tabla de ventas en dbt Cloud es como construir la columna vertebral de tu sistema analítico. Imagina que eres un arquitecto que transforma ladrillos sueltos (datos crudos) en una estructura organizada (modelos analíticos). En dbt, los modelos son archivos SQL que definen transformaciones, mientras que las tablas de ventas consolidan transacciones, clientes y productos en una vista unificada para analisis.

Este proceso va mas alla de escribir SQL: implica pensar en como los datos fluyen, como se relacionan entre si y como garantizar su calidad. Un buen modelo de ventas no solo responde preguntas como "¿Cual fue el ingreso total del ultimo trimestre?", sino que tambien permite analisis complejos como cohortes de clientes o tendencias de productos. La clave esta en diseñar un modelo que sea mantenible, escalable y confiable.

Como funciona en la practica

Para modelar una tabla de ventas desde cero en dbt Cloud, seguimos un flujo estructurado. Primero, conectamos dbt Cloud a nuestro warehouse (como Snowflake o BigQuery) y configuramos el entorno. Luego, identificamos las fuentes de datos: típicamente tablas como orders, customers, y products en formato crudo.

El paso a paso incluye: 1) Crear modelos base que limpian y estandarizan los datos crudos, 2) Unir estas tablas para crear una vista de ventas detallada, 3) Agregar metricas clave como ingresos y cantidades, y 4) Documentar y probar el modelo. Por ejemplo, si tu tabla orders tiene fechas en diferentes zonas horarias, un modelo base las convierte a UTC para consistencia.

Codigo en accion

Aqui mostramos un ejemplo funcional de un modelo base para limpiar datos de pedidos. Antes: datos crudos con inconsistencias.

-- En tu warehouse, tabla cruda orders_raw
SELECT order_id, customer_id, order_date, amount, status FROM raw.orders_raw;
-- Resultado: order_date en formato texto, amount con decimales variables

Despues: modelo base en dbt que estandariza.

-- models/staging/stg_orders.sql
{{ config(materialized='view') }}

WITH cleaned_orders AS (
    SELECT
        order_id,
        customer_id,
        CAST(order_date AS TIMESTAMP) AS order_timestamp, -- Convertir a timestamp
        ROUND(amount, 2) AS amount, -- Redondear a 2 decimales
        LOWER(status) AS status -- Estandarizar a minusculas
    FROM {{ source('raw', 'orders_raw') }}
    WHERE order_date IS NOT NULL -- Filtrar nulos
)

SELECT * FROM cleaned_orders

Errores comunes

  • No validar joins: Unir tablas sin verificar claves unicas puede duplicar registros. Solucion: Usa tests de dbt como unique y relationships en tus modelos base.
  • Ignorar el rendimiento: Crear modelos muy pesados sin particionar o indexar. Solucion: Configura materialized como 'table' con particiones para datos grandes.
  • Documentacion incompleta: Dejar modelos sin descripciones o columnas sin explicar. Solucion: Usa bloques docs en dbt para describir cada modelo y columna.
  • No probar datos: Asumir que los datos crudos son perfectos. Solucion: Implementa tests desde el inicio, como verificar que amount sea positivo.

Checklist de dominio

  1. Configurar dbt Cloud conectado a un warehouse real (e.g., Snowflake trial).
  2. Crear al menos tres modelos base: stg_orders, stg_customers, stg_products.
  3. Unir modelos base en un modelo final fct_sales con metricas calculadas.
  4. Agregar documentacion usando schema.yml para describir modelos y columnas.
  5. Implementar tests basicos: unique, not_null, y accepted_values.
  6. Ejecutar y verificar el pipeline en dbt Cloud con dbt run y dbt test.
  7. Revisar la documentacion generada en la interfaz de dbt Docs.

Construye un modelo de ventas detallado con dbt Cloud

Sigue estos pasos para crear un modelo de ventas completo desde datos crudos:

  1. Prepara tu entorno: En dbt Cloud, crea un nuevo proyecto conectado a un warehouse (usa Snowflake o BigQuery si es posible). Asegurate de tener acceso a tablas crudas: orders_raw, customers_raw, products_raw.
  2. Crea modelos base: En la carpeta models/staging/, genera tres archivos SQL:
    • stg_orders.sql: Limpia orders_raw, convierte fechas a timestamp y redondea montos.
    • stg_customers.sql: Estandariza nombres y emails de clientes.
    • stg_products.sql: Unifica categorias de productos y precios.
  3. Construye el modelo final: En models/marts/, crea fct_sales.sql que una los modelos base usando JOIN y calcule:
    • Ingreso total por venta (amount * quantity).
    • Fecha de venta en formato DATE.
    • Informacion de cliente y producto.
  4. Documenta y prueba: En models/schema.yml, agrega descripciones para cada modelo y columna. Luego, añade tests para verificar que order_id sea unico y amount no sea nulo.
  5. Ejecuta y verifica: Usa la interfaz de dbt Cloud para correr dbt run y luego dbt test. Revisa los logs y asegurate de que no haya errores.
Pistas
  • Usa la funcion CAST en SQL para convertir tipos de datos, como texto a timestamp.
  • En los joins, verifica que las claves (e.g., customer_id) existan en ambas tablas para evitar datos perdidos.
  • Para documentar, empieza con un bloque version: 2 en schema.yml y define modelos bajo models:.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.