No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Modelado dimensional: diseño de modelo

15/26
Recursos

¿Cómo diseñar un modelo dimensional?

Diseñar un modelo dimensional es crucial para traducir los registros transaccionales en información útil para la toma de decisiones empresariales. En esta clase, veremos cómo crear tablas, identificar relaciones, y asignar atributos a las distintas dimensiones, siempre respetando las reglas de negocio.

¿Qué es una regla de negocio?

Una regla de negocio establece las transformaciones que los datos deben cumplir para satisfacer las necesidades de la empresa. Un ejemplo clásico es la necesidad de consolidar campos de nombres separados en un solo campo de nombre completo. Otra regla podría ser condensar un campo de observación extenso o adicionarle atributos a un vendedor según ciertos criterios. Estas reglas son integradas en el ETL para reflejarse en el modelo dimensional.

¿Cómo se hace la diagramación del modelo?

Utilizamos herramientas como DbDiagram para diagramar el modelo de datos basado en las dimensiones y hechos identificados previamente. Comenzamos creando tablas para las dimensiones como la de clientes y productos, definiendo atributos y estableciendo sus tipos de datos.

Aquí un ejemplo en DbDiagram:

Table dwh.DimClientes {
  IdCliente int
  CodigoCliente varchar
  NombreCliente varchar
  ApellidoCliente varchar
  NombreCompleto varchar
  NumContactoCelular varchar
  NumContactoCasa varchar
  NumTrabajo varchar
  CiudadVivienda varchar
}

Definimos cada campo según las reglas de negocio, y revisamos las bases de datos para asegurarnos del acceso a toda la información necesaria.

¿Cómo se estructura la tabla de hechos?

La tabla de hechos, en este caso FacVentas, contiene las métricas y los IDs de las dimensiones. La estructura incluye un ID de venta, IDs de cliente y producto como claves, y las métricas identificadas como cantidad vendida, valor, descuento y valor neto.

Table dwh.FacVentas {
  IdVenta int [pk, increment]
  IdCliente int [ref: > dwh.DimClientes.IdCliente]
  IdProducto int [ref: > dwh.DimProductos.IdProducto]
  CantidadVendida int
  Valor decimal
  Descuento decimal
  ValorNeto decimal
}

Es importante destacar que no es necesario crear relaciones físicas en bases de datos en modelos dimensionales, ya que las dimensiones pueden emplearse en múltiples modelos.

¿Cómo establecer relaciones virtuales?

Aunque no se requieren relaciones físicas, al diseñar en herramientas de modelado, es útil definir relaciones virtuales para visualizar mejor cómo las tablas se relacionan.

Por ejemplo, conectar IdCliente de una dimensión con el mismo campo en la tabla de hechos para entender la interconexión de datos:

Ref dwh.DimClientes.IdCliente > dwh.FacVentas.IdCliente
Ref dwh.DimProductos.IdProducto > dwh.FacVentas.IdProducto

¿Qué sigue después de diseñar el modelo?

Una vez que el diseño básico del modelo está completado, se pueden añadir más dimensiones como vendedores y geografía para enriquecer el modelo. Esto permite abarcar más escenarios de negocio y realizar análisis más completos.

Te animamos a que experimentes incorporando estas dimensiones faltantes y compartas tu propuesta y resultados. Continuar extendiendo el modelo afina tu habilidad de diseño y mejora las capacidades analíticas del data warehouse.

Aportes 9

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Aqui les el diagrama:

Dejo URL de mis notas relativas a hechos y dimensiones, que he publicado en mi repositorio de GitHub y en LinkedIn, por si a algún/a compañero/a le pueda interesar: <https://github.com/ddasilva64/DWHOLA23001esp/blob/master/publicaciones/publicados/dimfact_esp.md> <https://www.linkedin.com/pulse/modelado-dimensional-dimensiones-y-hechos-esp-da-silva-jarque> Gracias
Here my proposal about task teacher left us, what you think guys ! ![](https://static.platzi.com/media/user_upload/Untitled-e394de1c-831b-4389-a191-c4611e6b3daf.jpg)
Cuál es el sentido de que la Fact tenga una columna con PK ? me gustaría entender la necesidad, pq no la veo en realidad.
![](https://static.platzi.com/media/user_upload/image-4dd58f87-280d-4e2d-b7c7-b3a999800ef8.jpg)```txt Table dwh.dim_clientes { id_cliente int pk codigo_cliente varchar nombre varchar apellido varchar nombre_completo varchar numero_celular varchar numero_casa varchar numero_trabajo varchar ciudad_casa varchar } Ref:dwh.dim_clientes.id_cliente < dwh.fact_ventas.id_cliente Table dwh.dim_producto { id_producto int pk codigo_cliente varchar nombre varchar color varchar tamano varchar categoria varchar } Ref:dwh.dim_producto.id_producto < dwh.fact_ventas.id_producto Table dwh.dim_geografia { id_ubicacion int pk cod_ubicion varchar pais varchar estado varchar ciudad varchar } Ref:dwh.dim_geografia.id_ubicacion < dwh.fact_ventas.id_ubicacion Table dwh.dim_vendedores { id_vendedor int pk cod_vendedor varchar nombre varchar apellido varchar } Ref:dwh.dim_vendedores.id_vendedor < dwh.fact_ventas.id_vendedor Table dwh.fact_ventas { id_venta int pk id_cliente int pk id_producto int pk id_ubicacion int pk id_vendedor int pk cantidad int valor decimal descuento decimal valor_neto decimal } ```
![](https://static.platzi.com/media/user_upload/Untitled-b1828a4c-07a8-4f19-88bd-561f14c25bb9.jpg)
El diseño de un modelo dimensional se centra en estructurar los datos para facilitar la consulta y el análisis, utilizando un enfoque orientado al usuario final. A continuación, se describen los pasos principales para diseñar un modelo dimensional: ### **1. Definir el propósito del modelo** * **Objetivo:** Comprender las preguntas de negocio que el modelo debe responder. Por ejemplo: * ¿Qué métricas se analizarán (ventas, ingresos, costos)? * ¿Qué dimensiones (perspectivas) interesan (tiempo, producto, región)? * Esto ayuda a determinar las métricas clave y las dimensiones necesarias. ### **2. Identificar los procesos de negocio** * **Paso:** Identificar los procesos principales de la organización que generan datos para el análisis (ventas, inventario, finanzas). * **Ejemplo:** Un negocio de retail podría enfocarse en las ventas y el inventario como procesos clave. ### **3. Determinar las métricas (hechos)** * **Definición:** Las métricas (o hechos) son los valores cuantitativos que se analizan. * **Ejemplo:** * Ventas totales, cantidad de productos vendidos, ingresos generados. * **Nota:** Asegúrate de que los hechos sean numéricos y agregables. ### **4. Identificar las dimensiones** * **Definición:** Las dimensiones son los atributos que contextualizan las métricas. * **Ejemplo:** * Tiempo (año, mes, día) * Producto (categoría, marca, nombre) * Cliente (edad, región, género) * Las dimensiones deben estar diseñadas para responder preguntas como: "¿Qué productos se venden más en cada región?" ### **5. Elegir el esquema dimensional** * **Opciones comunes:** * **Esquema estrella (Star Schema):** Una tabla de hechos en el centro conectada directamente a las tablas de dimensiones. * **Esquema copo de nieve (Snowflake Schema):** Extiende las tablas de dimensiones en subdimensiones para normalización. * **Ejemplo de esquema estrella:** * Tabla de hechos: `ventas` * Dimensiones: `dim_producto`, `dim_cliente`, `dim_tiempo`. ### **6. Diseñar las tablas de hechos** * Incluir: * **Clave primaria compuesta:** Llaves foráneas de las dimensiones. * **Métricas:** Las medidas a analizar. * **Ejemplo:** * Tabla `fact_ventas`: * Claves foráneas: `id_producto`, `id_tiempo`, `id_cliente`. * Métricas: `cantidad_vendida`, `ingreso_total`. ### **7. Diseñar las tablas de dimensiones** * Cada dimensión debe incluir: * **Clave primaria:** Identificador único (`id_tiempo`, `id_producto`). * **Atributos descriptivos:** Detalles útiles para el análisis (`nombre_producto`, `marca`, `año`, `mes`). * **Ejemplo:** * Tabla `dim_producto`: * `id_producto`, `nombre`, `marca`, `categoría`. ### **8. Establecer relaciones entre tablas** * Definir las claves foráneas en la tabla de hechos para conectar con las tablas de dimensiones. * Asegurarse de mantener la integridad referencial. ### **9. Validar el modelo** * Reunirse con los interesados para asegurarse de que las necesidades del negocio están cubiertas. * Ejecutar consultas de prueba para verificar que el modelo responde correctamente. ### **10. Optimizar el modelo** * Desnormalizar si es necesario para mejorar el rendimiento de las consultas. * Crear índices en claves foráneas y columnas más consultadas. Este enfoque garantiza que el modelo dimensional sea efectivo para análisis rápidos y centrado en el usuario final. 😊
![](https://static.platzi.com/media/user_upload/image-c71a56ef-e521-41aa-92ab-7d4231a00998.jpg)