Power Query vs Power Pivot – Denormalizar

Anteriormente, en esta serie, vimos Power Query vs Power Pivot – Metadatos y tablas

En la entrada anterior, vimos que Power Query nos brinda la posibilidad de expandir las columnas de una tabla agregando columnas de tablas relacionadas, de forma muy sencilla, sin crear código de ningún tipo.

Modelado dimensional

Si hemos visto algo de modelado dimensional, entenderemos que no es adecuado agregar columnas descriptivas a las tablas de hecho, y eso fue lo que hice en la demo anterior, a la tabla de Ventas, FactInternetSales, que es claramente una tabla de hechos, agregué un par de columnas expandiéndolas desde la dimensión de Clientes, DimCustomer. El caso es que el modelo tabular lo admite y aunque no soy partidaria de tales prácticas en modelos reales, si lo necesitamos, tenemos forma de hacerlo. Y lo podemos necesitar, por ejemplo, para crear un prototipo muy sencillo y rápido, lo que estaría del todo bien.

Hoy prefiero mostrarles un par de casos en los que sería muy conveniente aprovechar esta capacidad de Power Query para denormalizar.

Denormalizar para examinar con jerarquías

La Base de datos Datawarehouse de Microsoft AdventureWorksDW2012 mantiene 3 tablas para la dimensión Productos, la propia tabla Productos, DimProduct, y dos tablas adicionales para Categoría, DimProductCategory,  y Subcategoría, DimProductSubcategory. Esta estructura se muestra en la siguiente imagen.

trestablasprodsql

Veamos cómo denormalizamos con cada una de las herramientas

  • Denormalizar con Power Query

Con Power Query, nos ahorramos mucho trabajo si traemos directamente a la tabla Productos, el par de columnas descriptivas que necesitamos, de esta forma denormalizamos, nos quitamos relaciones, columnas y tablas innecesarias en la tabla dinámica. Podemos además, crear jerarquías dentro de la tabla Producto, ah y sin escribir ni una sola línea de código M, se escribe «solito» por nosotros.

Entonces, traemos la tabla productos desde el panel Navegador, sólo una, aunque estamos viendo que hay tres.

3tablasprod

Desplazamos la barra hasta encontrar la columna DimProductSubcategory, que se corresponde con las subcategorías.

listatablasrelacprod

Seleccionamos dos columnas, EnglishProductSubcategoryName, la categoría como tal y DimProductCategory para traer la tabla Categorías que no está directamente relacionada con Productos y por eso no sale de la primera vez.

expandirsubcat

Repetimos la acción, seleccionando esta vez EnglishProductCategotyName, es decir las categorías.

expandircateg

De esta forma, nos hemos traído las dos columnas y desde ahora van a formar parte de la tabla Productos. ¿Dije traído? No, no traemos nada desde el Editor de consultas, hemos expandido las columnas en la consulta, apenas al salir es que se ejecuta la consulta y se extraen los datos del servidor original.

colcategsubcat

Como hay un grupo de productos que no tienen asociados Categorías ni Subcategorías, para ver el efecto correcto de la relación podemos filtrar en la vista preliminar.

filtrarcat

Si vemos, los Pasos aplicados en la consulta se corresponden directamente con nuestras acciones.

pasosfiltro

Y como siempre, sólo para curiosos, el código M.

coddenormaliza

Eliminar pasos 

La idea de la serie no es desgranar toda la enorme riqueza de Power Query; pero me detengo en este caso, para que no perdamos de vista, que si dejamos la consulta tal cual, sólo traerá los productos de la categoría bicicletas, ya que hay un paso que así lo define:

#"Filas filtradas" = Table.SelectRows(#"Expandir DimProductCategory", 
each ([EnglishProductCategoryName] = "Bikes"))

Así es que, mucho cuidado, hacer la comprobación está bien; pero luego hay que deshacer este último paso. Para deshacer o eliminar un paso, basta con pulsar sobre la X.

EliminarPaso

Cuando deshacemos un paso, se eliminan todos los pasos, desde el paso eliminado hasta el final de todos los que existen, en este caso es sólo uno y además el último; pero nuevamente, cuidado al eliminar un paso intermedio.

De esta forma, estamos en condiciones de importar al modelo de datos, Power Pivot, el conjunto de datos obtenido como resultado de esta consulta Power Query, y luego analizar, por ejemplo desde tabla dinámica, Power View o Power Map, las ventas por productos, empleando para ello, una jerarquía formada por Categoría-Subcategoría-Producto. La tabla producto ya estaba relacionada con los hechos de las ventas.

¿Y si quiero analizar los datos por Países y/o Ciudades de la tabla Geografía, DimGeography, que no está relacionada con los hechos, FactInternetSales?

Tablas no relacionadas directamente con hechos

Para analizar los hechos por columnas de tablas no directamente relacionadas, hacemos el mismo proceso, denormalizamos para dejar estas columnas en la tabla Clientes, DimCustomer que sí está directamente relacionada.

Desde la tabla de hechos FactInternetSales que representa las ventas, nos desplazamos hasta el final y vemos que tras las columnas de la tabla, aparecen las columnas con los nombres de las tablas relacionadas.

hechosdimcust

Seleccionamos el botón expandir para la columna de la tabla DimCustomer y seleccionamos  la columna que a su vez se corresponde con la tabla DimGeography.

dimcustomergeo

Ahora vemos que ya no está DimCustomer como columna y sí que aparece DimGeography, no podemos dejar de entender que expandir puede significar sustituir, según que acción hagamos, y este es un ejemplo.

dimcustomergeo 1

Ahora estamos en condiciones de seleccionar las columnas de esa tabla, no directamente relacionada con los hechos en el origen de datos, por las que queremos realizar nuestro análisis.

dimcustomergeo 2

En nuestro caso, hemos querido volver a seleccionar DimCustomer, para poder expandir otras columnas de DimCustomer, además de DimGeography. Esta acción sería innecesaria si desde el inicio seleccionamos todas las columnas y tablas relacionadas. El paso extra lo he provocado, sobre todo para que veamos que expandir no es dejar todo lo que hay y agregar más, hay que tener cuidado.

dimcustomergeo 3

De esta forma, la tabla que estamos importando FactInternetSales, que se corresponde con las ventas, trae dos columnas descriptivas para países y ciudades.

Estos dos ejemplos ilustran una funcionalidad muy potente en Power Query, que se puede aprovechar en un sin número de escenarios.

  •  Denormalizar con Power Pivot

Es posible denormalizar con Power Pivot, además es altamente ventajoso. Cuando creamos un modelo analítico, denormalizar nos permite ajustar el modelo a las necesidades del cliente, quitamos enlaces innecesarios, ocultamos tablas innecesarias, podemos crear jerarquías, son todo ventajas.

trestablasprod

Con PowerPivot necesitamos aplicar el lenguaje de expresiones DAX, necesitamos entender que la función RELATED() nos permite traer una columna de una tabla relacionada, aunque la relación no sea directa, como en este caso con Categoría.

related1

related2

Una introducción a DAX y algunos temas relacionados los podemos leer en una de la entradas de la serie dedicada a Denormalizar con DAX

Hay otro aspecto muy interesante en el que difieren Power Query y Power Pivot, es la capacidad de utilizar los metadatos y las relaciones entre tablas de los orígenes de datos, lo veremos en la próxima entrada.

No te pierdas el resto de entradas de la serie Power Query vs Power Pivot

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.