Tips de Diseño de DWH- La Granularidad – Parte 2

12 Oct, 2016

Realizado por nuestra SmartB Rut Almoguera

dwh-1

En el post anterior nos referimos a La Granularidad de las Dimensiones, en este caso nos referiremos a la granularidad de las medidas en las tablas Facts con respecto a las Dimensiones con las que se relacionan.

Si quieres ver el artículo anterior, lo puedes hacer aquí

Granularidad de dimensiones vs granularidad de medidas

Cuando estamos realizando el diseño de un DWH y ya hemos decidido cuál es la granularidad que vamos a tener en nuestras Dimensiones, es necesario decidir que granularidad tendrán las medidas de nuestras tablas Fact con cada Dimensión.

En este momento si tú mi querido lector, te estás iniciando en el diseño de DWHs, te preguntaras

¿No deberían tener la misma que las Dimensiones? Pues la respuesta a esta interrogante es: no necesariamente.

Me imagino que tú, mi querido lector, estás en este momento confundido, pues permíteme darte un ejemplo en donde no son las mismas.

Ejemplo

Imaginemos el caso de una Fact de Ventas en donde no solo requerimos registrar las Ventas, sino que deseamos registrar las Metas de Venta de los Vendedores.

Para poder hacer análisis del desempeño de los vendedores y medir si los estos cumplen o no con su cuota de ventas planificadas y si han mejorado con respecto a periodos anteriores.

Por lo general las Ventas se registran con respecto a la dimensión Fecha a nivel Diario, por lo cual la granularidad de esta medida con respecto a la Dimensión Fecha es a nivel de Día.

Pero las Metas de Ventas de los Vendedores suelen registrarse a nivel Mensual, es decir que la granularidad de las Metas de Ventas con respecto a la dimensión Fecha tienen una granularidad al nivel de Mes.

Es decir, estas dos medidas que deben ir dentro de la misma Fact tienen diferentes granularidades con respecto a la dimensión Fecha, y es un requerimiento del negocio que las medidas de Ventas Reales y Metas de Ventas sean analizadas juntas y estén en la Fact de Ventas.

¿Qué hacer entonces en estos casos?

Para solucionar esto, debemos tratar nosotros mismos de llevar las medidas que están dentro de una misma Fact al mismo nivel de granularidad con respecto a las dimensiones.

En nuestro ejemplo de las Ventas y las Metas de Ventas podríamos distribuir por ejemplo las Metas de Ventas Mensuales a nivel de Día en el ETL antes de meter dicha medida en la Fact.

Es decir, en lugar de registrar las Metas de las Ventas de los Vendedores a nivel de Mes, en el ETL podríamos tomar dicho valor y dividirlo entre los días hábiles del mes y registrar dichas Metas de Ventas a nivel Diario.

Entonces si tenemos en la fuente lo siguiente:

Metas de Ventas Vendedor 01 Mes 03 2016= 3000

En el ETL debemos llevar dicho valor a diario, asumiendo que en ese mes hay 20 días hábiles:

3000/20 = 150.

En este caso el valor 150 es el que será registrado en la Fact de Ventas para la medida Metas de Ventas en cada día hábil del Mes 3 del 2016 para el vendedor 01.

Con esto, cuando el Cubo sumarice esta medida a nivel de Mes la misma dará el valor exacto que estamos esperando que es 3000.

Otra forma de hacerlo

Puedes acumular las Ventas hasta el nivel de Mes en el ETL antes de insertarlas en la Fact, pero para esto debemos estar bien seguros de cuáles son los requerimientos, si se desean ver los datos a nivel de Día o a nivel de Mes en esa Fact.

Una situación que se nos podría presentar es que en diferentes Facts las granularidades no sean las mismas con respecto a una dimensión específica.

Nota: recordemos que en un DWH las dimensiones deben ser compartidas.

Otro ejemplo

Imaginemos que tenemos una Fact de Inventario, en donde registramos el Conteo Físico a nivel Semanal, y deseamos registrar también las Ventas a nivel Semanal.

En este caso no tendríamos demasiados problemas, pues simplemente en el ETL sumarizamos las ventas a nivel Semanal antes de insertarlas en la Fact de Inventario como explicamos antes.

El problema se presenta en el caso de que nuestra dimensión Fecha tenga una granularidad Diaria, pues la misma es compartida con la Fact de Ventas que si debe llegar al nivel de Día.

Algunas dudas

¿Qué hacer en este caso para registrar las medidas de la Fact de Inventario?

¿Debemos llevarla al nivel de Día para que se pueda utilizar la misma Dimensión Fecha que se usa en la Fact de Ventas?

¿Cómo registraríamos el conteo físico para llevarlo al nivel Diario?

La respuesta a si debemos o no llevar las medidas de dicha Fact a nivel Diario seria NO.

Lo que debemos hacer en este caso es simplemente registrar las medidas de esta Fact al Nivel de Semana, y luego en la herramienta en donde creemos los Cubos, debemos indicarle que la relación de dicha Fact con la dimensión Fecha es a nivel de Semana y no a nivel Día.

Esto es necesario para que los cálculos de Roll Up (agregaciones hacia arriba la jerarquía de una Dimensión) y Drill Down (Navegar hacia abajo en la jerarquía de una Dimensión) puedan ser calculadas correctamente por el Cubo.

Casi la totalidad de las herramientas donde diseñamos los Cubo en la actualidad permiten definir el nivel de granularidad en la que se encuentran cada una de las medidas que contienen las Facts con respecto a las Dimensiones con las que se relacionan.

En nuestro caso, en el Cubo debemos reflejar las siguientes relaciones entre la Dimensión Fecha, la Fact de Inventario y la de Ventas:

dwh-2

Con esto, el Cubo podrá agregar adecuadamente los valores de las Medidas cuando los usuarios consulten la data de las Facts en diferentes niveles de la dimensión Fecha.

Conclusión

Así que querido lector, cada vez que realices un diseño de un DWH debes considerar cuidadosamente cual será la granularidad de cada una de las Dimensiones, las medidas con respecto a cada una de las Dimensiones y las Facts en donde se colocaran dichas medidas.