Grain, facts y dimensions

Objetivo

Diseñar un modelo estrella sin dobles conteos.

Explicación

El grain es la unidad de una fila. En ecommerce, fact_order_lines puede ser una fila por línea, mientras fact_orders es una fila por pedido. Mezclar métricas de ambos grains sin cuidado duplica importes de pedido. Un modelo analítico mal definido puede producir métricas correctas en apariencia pero equivocadas por duplicación o grain. Aquí practicarás cómo convertir reglas de negocio en estructuras y tests que puedan verificarse automáticamente. Para trabajar Grain, facts y dimensions de forma profesional, no te quedes con el ejemplo: identifica la entrada, ejecuta el caso base, provoca al menos un caso incorrecto y compara el resultado con un control independiente. En este laboratorio el criterio de salida es concreto: Revenue de producto sale de line_amount a grain línea; revenue de pedido sale de fact_orders. La verificación principal será: Suma line_amount por order_id y compárala con order_amount del pedido. Si no puedes explicar por qué pasa esa comprobación, vuelve al paso anterior antes de continuar.

Contexto profesional

Un modelo analítico mal definido puede producir métricas correctas en apariencia pero equivocadas por duplicación o grain. Aquí practicarás cómo convertir reglas de negocio en estructuras y tests que puedan verificarse automáticamente.

Ejemplo real

fact_orders(order_id, customer_key, order_date_key, order_amount)
fact_order_lines(order_id, line_id, product_key, quantity, line_amount)

Archivos o datos de entrada

  • data/ecommerce_orders.csv
  • data/ecommerce_order_lines.csv

Práctica guiada

Escribe grain y clave candidata de ambos datasets.

Laboratorio paso a paso

  • Prepara el entorno y localiza los datos/archivos de entrada: data/ecommerce_orders.csv, data/ecommerce_order_lines.csv. Antes de modificar nada, anota el número de filas, columnas u objetos que esperas usar.
  • Reproduce el ejemplo real de la lección y guarda la salida. No avances hasta poder explicar qué hace cada bloque relacionado con «Grain, facts y dimensions».
  • Ejecuta la práctica guiada: Escribe grain y clave candidata de ambos datasets. Documenta el comando, consulta o acción exacta y el resultado obtenido.
  • Resuelve el reto sin mirar la solución: Calcula revenue por producto: decide qué fact debes usar. Si falla, registra el mensaje de error y formula una hipótesis antes de cambiar código.
  • Compara tu resultado con el criterio esperado: Revenue de producto sale de line_amount a grain línea; revenue de pedido sale de fact_orders. Después ejecuta la comprobación: Suma line_amount por order_id y compárala con order_amount del pedido.
  • Provoca deliberadamente un caso problemático relacionado con este error frecuente: Unir fact_orders con líneas y luego sumar order_amount multiplica el total por número de líneas.. Comprueba que sabes detectarlo y corregirlo.

Reto sin ayuda

Calcula revenue por producto: decide qué fact debes usar.

Resultado esperado

Revenue de producto sale de line_amount a grain línea; revenue de pedido sale de fact_orders.

Cómo verificarlo

Suma line_amount por order_id y compárala con order_amount del pedido.

Checklist de validación

  • El resultado cumple: Revenue de producto sale de line_amount a grain línea; revenue de pedido sale de fact_orders.
  • Has ejecutado esta verificación y puedes explicar el resultado: Suma line_amount por order_id y compárala con order_amount del pedido.
  • Has probado al menos un caso límite o dato inválido y el comportamiento es explícito, no silencioso.
  • Puedes repetir la práctica desde cero sin copiar la solución y dejar evidencia (consulta, commit, captura o salida de consola).
Pista específica

Usa la tabla cuyo grain contiene la dimensión que necesitas.

Solución paso a paso

1) Empieza reproduciendo el caso base con los datos indicados. 2) Aplica esta estrategia específica: Para producto necesitas order_lines; para pedidos totales puedes usar orders. 3) Usa como referencia técnica el ejemplo de la lección (fact_orders(order_id, customer_key, order_date_key, order_amount) fact_order_lines(order_id, line_id, product_key, quantity, line_amount)). 4) Ejecuta la verificación: Suma line_amount por order_id y compárala con order_amount del pedido. 5) Compara con el resultado esperado: Revenue de producto sale de line_amount a grain línea; revenue de pedido sale de fact_orders. 6) Repite el reto cambiando un dato o condición para demostrar que entiendes el comportamiento y no has obtenido el resultado por casualidad. Si aparece el error «Unir fact_orders con líneas y luego sumar order_amount multiplica el total por número de líneas.», corrige la causa antes de continuar; no ocultes el fallo ni cambies el resultado esperado para que la prueba pase.

Errores frecuentes

  • Unir fact_orders con líneas y luego sumar order_amount multiplica el total por número de líneas.

Qué debes recordar

El grain determina qué métricas pueden agregarse sin duplicar.

Preguntas de entrevista

  • ¿Cuál es el grain y cómo lo demostrarías? Aplícalo concretamente a «Grain, facts y dimensions».
  • ¿Qué test detectaría el error más probable de este modelo? Explica qué evidencia enseñarías al revisor.

Siguiente paso

Verás claves y SCD.

Recursos de esta lección

Quiz de la lección

¿Qué pasa si sumas order_amount después de unir cada pedido a sus líneas?

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.