Introducción
En una entrada anterior vimos cómo, en escenarios donde tanto los atributos relacionados con la fecha como los relacionados con la hora son relevantes para el análisis que queremos realizar, podíamos crear una dimensión horaria en M que nos sirviera para filtrar y segmentar nuestras medidas en función de atributos temporales menores al día.
La idea principal consiste en crear una lista con todas las horas que va a incluir nuestra consulta, que en función de la granularidad temporal que deseemos, tendrá un número de elementos distinto. Por ejemplo, si queremos que la consulta tenga un nivel de detalle de segundos, utilizaríamos la función List.Times
de la siguiente forma:
let Origen = List.Times( #time(0,0,0), 24*60*60, #duration(0,0,0,1) ) in Origen
Y obtendríamos el resultado deseado:
Ya solo nos quedaría convertir la lista en una tabla y empezar a añadir, como nuevas columnas, todos los atributos descriptivos que nos van a servir para filtrar y segmentar nuestro modelo.
En este artículo, vamos a ver cómo podemos crear este tipo de tablas también con DAX.
Creando una tabla calculada en DAX
Para crear nuestra dimensión horaria en DAX, empezamos seleccionando «Nueva tabla» desde la pestaña de modelado:
Y utilizamos la función GENERATESERIES()
para crear la tabla con una columna con los números consecutivos de las horas del día:
A continuación, utilizamos la función SELECTCOLUMNS()
para cambiar el nombre de la columna:
Posteriormente, guardamos la tabla creada en una variable y hacemos lo mismo para crear otras 2 tablas, una para los minutos y otra para los segundos. Después, utilizamos la función CROSSJOIN()
para que nos devuelva una tabla con el producto cartesiano de las filas de todas las tablas que pasaremos como argumentos, es decir, todas las combinaciones posibles entre los valores de las 3 tablas que hemos almacenado en variables:
Ahora utilizamos ADDCOLUMNS()
para añadir la columna que probablemente usemos como clave primaria, que la tendremos que clasificar como tipo de dato «Hora», y ya tendremos nuestra consulta creada con 86.400 registros, que corresponde al número de segundos que existen en un día:
Ya solo sería cuestión de seguir utilizando el ADDCOLUMNS()
que tenemos para crear todas aquellas columnas necesarias para filtrar y segmentar nuestros datos, de manera que terminemos con una dimensión horaria completa y útil para usar en nuestro modelo:
Os dejo también el video de mi sesión en Power Platform Madrid, donde podemos ver como crear paso a paso una dimensión de este tipo utilizando Power Query:
Deja un comentario