Modelado de datos de marketing
Tablas limpias y unidas
Modelado de datos de marketing es una lección gratuita de Digital Marketing Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Digital Marketing Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Digital Marketing Academy incluye 4 lecciones en total.
Por qué modelar
Las tablas raw de los conectores son desordenadas: tienen nombres de columnas incoherentes, monedas mezcladas, distintas granularidades y particularidades propias de cada plataforma. Consultarlas directamente produce cifras incorrectas y no reproducibles.
El modelado de datos es la disciplina de convertir filas raw en tablas limpias, coherentes y listas para el negocio. Aquí se definen el ROAS, las conversiones y los ingresos una sola vez y correctamente, para que todos los informes coincidan.
El esquema de estrella
El modelo analítico dominante es el esquema de estrella: una tabla de hechos central de eventos medibles rodeada de tablas de dimensiones que los describen. Los hechos contienen números, como gasto, clics e ingresos; las dimensiones contienen contexto, como campaña, fecha, canal y cliente.
Esta estructura resulta intuitiva para los profesionales de marketing y eficiente para las herramientas de BI, que relacionan un hecho con varias dimensiones para desglosar las métricas según cualquier atributo.
dim_date
|
dim_channel -- fct_ad_spend -- dim_campaign
|
dim_account
fct_ad_spend (facts): impressions, clicks, cost, conversions
dims: who / what / when contextHechos frente a dimensiones
Una tabla de hechos es larga y aditiva: una fila por evento o por campaña y día, con medidas numéricas que se suman. Una tabla de dimensiones es ancha y descriptiva: una fila por campaña o cliente, con atributos por los que se filtra y agrupa.
La prueba es la siguiente: si lo sumaría con SUM, es un hecho; si lo usaría en GROUP BY, es una dimensión. El gasto es un hecho; el nombre de la campaña es una dimensión.
fct_ad_spend dim_campaign
---------------- ----------------
date campaign_id (PK)
campaign_id (FK) campaign_name
cost <-SUM-> channel
clicks <-SUM-> objective
conversions start_dateGranularidad: la primera decisión
La granularidad indica qué representa una fila de una tabla de hechos. Declararla primero es la decisión de modelado más importante. Mezclar granularidades, como filas diarias con totales acumulados, provoca dobles recuentos y corrompe todas las métricas posteriores.
Indique la granularidad en lenguaje llano: una fila por campaña y día. A partir de ahí, cada columna debe ser válida para esa granularidad y cada carga debe respetarla.
Declared grain: one row per campaign per day
-- enforce uniqueness on the grain
SELECT date, campaign_id, COUNT(*)
FROM fct_ad_spend
GROUP BY 1,2
HAVING COUNT(*) > 1; -- must return 0 rowsModelos de staging
Antes de los hechos y las dimensiones, construya modelos de staging: uno por tabla de origen, cambiando los nombres de las columnas a un estándar, convirtiendo los tipos y estandarizando las unidades, como pasar de centavos a dólares o usar fechas UTC. Un modelo de staging corresponde a una tabla raw, y nada más.
El staging es la capa de limpieza. Aísla las particularidades de cada fuente para que sus marts posteriores nunca tengan que saber que Meta lo denomina gasto y Google lo denomina coste.
-- stg_google_ads__spend
SELECT
date AS spend_date,
campaign_id,
'google' AS channel,
cost_micros / 1000000 AS cost, -- micros -> dollars
clicks,
conversions
FROM raw.google_ads__campaign_stats;Unificación de canales
Cada plataforma publicitaria informa de una forma distinta, pero después del staging todas comparten una estructura común. El modelo siguiente las combina en un único hecho de gasto multicanal, la base de los informes combinados.
Esta única tabla es la que hace posible calcular el ROAS total. Como todos los canales tienen las mismas columnas, una consulta suma de una vez el gasto de Google, Meta y TikTok.
-- fct_ad_spend: union all channels
SELECT * FROM stg_google_ads__spend
UNION ALL
SELECT * FROM stg_meta_ads__spend
UNION ALL
SELECT * FROM stg_tiktok_ads__spend;
-- now: SUM(cost) GROUP BY channel worksDimensiones conformadas
Para el análisis multicanal, las dimensiones deben estar conformadas: un dim_date y un dim_channel compartidos a los que cada hecho se una de la misma manera. Así, «ingresos por mes y canal» significa lo mismo tanto si el origen son los anuncios como si es el correo electrónico o la web.
Las dimensiones conformadas permiten colocar el gasto y los ingresos uno junto a otros en un mismo gráfico. Sin ellas, las relaciones no coinciden y los totales difieren silenciosamente.
Conformed dims shared across facts:
dim_date -> joined by every fact on date
dim_channel -> 'google','meta','email','organic'
dim_campaign -> unified campaign keys
-> spend and revenue line up on the same axesAtribución en SQL
La atribución asigna el mérito de una conversión a los puntos de contacto. La atribución de último clic es la más sencilla: la fuente de marketing final antes de la conversión recibe todo el mérito. La atribución de primer clic, lineal y basada en posiciones distribuye el mérito de otras formas.
En un almacén se implementa la atribución como un modelo, no como una caja negra de una plataforma. Con datos de eventos de GA4 puede usar funciones de ventana para recorrer los puntos de contacto de cada usuario y aplicar cualquier regla, y después comparar los resultados entre modelos de forma objetiva.
-- last non-direct click per conversion
WITH touches AS (
SELECT user_id, channel, event_time,
ROW_NUMBER() OVER (PARTITION BY user_id
ORDER BY event_time DESC) AS rn
FROM web_touchpoints
WHERE channel <> 'direct'
)
SELECT channel, COUNT(*) FROM touches WHERE rn=1
GROUP BY 1;Dimensiones de cambio lento
Los atributos de las dimensiones cambian con el tiempo: cambia el responsable del presupuesto de una campaña o sube de nivel un cliente. Una dimensión de cambio lento de Tipo 2 conserva el historial añadiendo una fila nueva con fechas de vigencia en lugar de sobrescribir la anterior.
Esto es importante para elaborar informes precisos en un momento dado. Para saber en qué segmento estaba un cliente cuando convirtió, necesita la versión de la dimensión que estaba vigente entonces, no la actual.
dim_customer (SCD Type 2)
cust_id tier valid_from valid_to is_current
101 free 2026-01-01 2026-04-01 false
101 pro 2026-04-01 9999-12-31 true
-- join on event_date BETWEEN valid_from AND valid_toPruebas y documentación
Los modelos son código, así que pruébelos. Herramientas como dbt le permiten verificar que las claves sean únicas y no nulas, que los valores de canal pertenezcan a un conjunto aceptado y que se cumplan las relaciones entre tablas.
Las pruebas detectan la deriva del esquema y las relaciones incorrectas antes de que lleguen a un dashboard. Junto con la documentación y el linaje generados automáticamente, hacen que el modelo sea confiable y fácil de incorporar para nuevos miembros, en lugar de convertirlo en una caja negra frágil.
# dbt schema test
models:
- name: fct_ad_spend
columns:
- name: campaign_id
tests: [not_null]
- name: channel
tests:
- accepted_values:
values: ['google','meta','tiktok']Marts: la capa final
La capa superior son los marts: tablas listas para el negocio y diseñadas para audiencias concretas, como un mart marketing_performance que ya relaciona el gasto con los ingresos y calcula el ROAS por canal y día.
Las herramientas de BI leen únicamente de los marts. Al relacionar y agregar previamente los datos aquí, los dashboards se mantienen rápidos y baratos, y todos los analistas heredan las mismas definiciones correctas.
-- marts.marketing_performance (1 row / day / channel)
SELECT s.spend_date, s.channel,
SUM(s.cost) AS spend,
SUM(r.revenue) AS revenue,
SAFE_DIVIDE(SUM(r.revenue), SUM(s.cost)) AS roas
FROM fct_ad_spend s
LEFT JOIN fct_revenue r USING (spend_date, channel)
GROUP BY 1,2;Comprobación rápida
Está construyendo una tabla de hechos para el rendimiento de los anuncios y debe evitar los dobles recuentos. ¿Qué es lo más importante que debe declarar antes de escribir cualquier columna?
Repaso
El modelado transforma tablas sin procesar desordenadas en datos confiables y listos para el negocio mediante capas: staging limpia y normaliza cada fuente, las tablas de hechos y las dimensiones conformadas forman un esquema en estrella, y los marts dejan todo unido de antemano para BI.
Declare primero la granularidad, una los canales para obtener métricas combinadas, implemente la atribución y el historial SCD Type 2 en SQL, y pruebe cada modelo para que los números incorrectos fallen de forma visible en lugar de llegar a un dashboard.
Preguntas frecuentes
¿La lección «Modelado de datos de marketing» es gratis?
Sí — el texto completo de «Modelado de datos de marketing» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Digital Marketing Academy, actualiza a CoddyKit PRO. El curso de Digital Marketing Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Modelado de datos de marketing»?
Tablas limpias y unidas Practicas Digital Marketing Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Digital Marketing Academy?
No se requiere experiencia previa. Digital Marketing Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Modelado de datos de marketing»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Digital Marketing Academy?
Sí. Cada lección de Digital Marketing Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué utilizar un almacén de datos
- ETL y conectores
- Modelado de datos de marketing
- Dashboards que impulsan la acción