Creación de grupos Dinámicos en DAX

En Power BI existen varias formas de poder agrupar tus datos de forma dinámica y de forma estática

En esta ocasión os voy a mostrar como hacerlo de forma dinámica en DAX. ¿Estáis listos?

Empezamos 🚀

Modelo de datos

Para el ejemplo vamos a utilizar un pequeño modelo de datos llamado Tabla1 donde tenemos una serie de edades y atracciones de PortAventura. Lo que necesitamos conocer es el número de personas por tipo de atracción. 

Cálculos necesarios

En primer lugar vamos a crear una tabla para agrupar las edades mínimas y máximas. Para crear una tabla DAX basta con irnos a la barra de Power BI Modelado\Nueva Tabla

En este caso vamos a utilizar la función DATATABLE.

La sintaxis de esta expresión es la siguiente: 

				
					DATATABLE (ColumnName1, DataType1, ColumnName2, DataType2..., {{Value1, Value2...}, {ValueN, ValueN+1...}...})
				
			

La expresión DATATABLE nos devolverá una tabla en base a las columnas y datos que le vamos a insertar. En nuestro caso hemos creado 4 columnas: «IdEdad», «EdadMin», «EdadMax», y «Grupo de edades». 

Una vez hemos puesto las columnas en nuestra expresión tenemos que determinar el tipo de dato que vamos a insertar en nuestras columnas. En nuestro caso es el siguiente: 

✅ «IdEdad» será un id para identificar el grupo de edades por lo tanto vamos a utilizar INTEGER. 

✅ «EdadMin» será la edad mínima que tendremos en cada categoría. Por lo tanto, vamos a utilizar un INTEGER.

✅ «EdadMax» será la edad máxima que tendremos en cada categoría. Por lo tanto, vamos a utilizar un INTEGER.

✅ «Grupo de edades»  aquí es donde vamos a determinar cada categoría del rango de edades de los que disponemos. Será un STRING. 

Quedaría de la siguiente forma:

				
					Grupo de edades = 
DATATABLE (
    "IdEdad", INTEGER,
    "EdadMin", INTEGER,
    "EdadNax", INTEGER,
    "Grupo de edades", STRING,
    {
        { 1,  0,   9, "Hasta 10 años" },
        { 2, 10,  18, "De 10 a 18 años" },
        { 3, 19,  30, "De 19 a 30 años" },
        { 4, 31,  50, "De 31 a 50 años" },
        { 5, 50, 999, "Más de 50 años" }
    }
)
				
			

Así queda nuestra tabla creada

Una vez que tenemos nuestra tabla diseñada con la categorización de nuestros datos vamos a realizar una medida para calcular el número de personas en función de la clasificación de edades que hemos realizado. 

Para eso vamos a definir tres variables: 

✅VAR _min = MIN(‘Grupo de edades'[EdadMin]): Esta variable calcula el valor mínimo de la columna «EdadMin» en la tabla «Grupo de edades».

✅VAR _max = MAX(‘Grupo de edades'[EdadNax]): Esta variable calcula el valor máximo de la columna «EdadMax» en la tabla «Grupo de edades».

✅ VAR _resultado = Esta variable la utilizamos para almacenar el resultado final de nuestro cálculo.

La función IF la utilizamos para evaluar si hay un solo valor seleccionado en la columna «Grupo de edades» de nuestra tabla «Grupo de edades». Eso se verifica utilizando la función HASONEVALUE. 

La función CALCULATE se utiliza para realizar un cálculo basado en un contexto filtrado.

En este caso, se calcula el recuento de filas en la tabla «Tabla1» que cumplan con el filtro establecido en la función FILTER. El filtro se aplica a todas las filas seleccionadas en la tabla «Tabla1» utilizando la función ALLSELECTED, y se filtran las filas donde la columna «Edad» es mayor o igual que el valor mínimo (_min) y  menor que el valor máximo (_max) definidos en las variables anteriores.

Si no hay un solo valor seleccionado en la columna «Grupo de edades» (bloque ELSE del IF), se realiza un recuento  de filas en la tabla «Tabla1» utilizando la función COUNTROWS.

Por último utilizamos la función RETURN para devolver el resultado que hemos almacenado en la variable _resultado.

Nuestra medida quedaría de la siguiente forma:

				
					Numero de personas = 
VAR _min =
    MIN ( 'Grupo de edades'[EdadMin] )
VAR _max =
    MAX ( 'Grupo de edades'[EdadMax] )
VAR _resultado =
    IF (
        HASONEVALUE ( 'Grupo de edades'[Grupo de edades] ),
        CALCULATE (
            COUNTROWS ( Tabla1 ),
            FILTER ( ALLSELECTED ( Tabla1 ), Tabla1[Edad] >= _min && Tabla1[Edad] < _max )
        ),
        COUNTROWS ( Tabla1 )
    )
RETURN
    _resultado
				
			

Ahora vamos a ver el resultado 👀

¿Cuál es el número de personas que tenemos por atracción según su edad? 

Lo vemos en la siguiente imagen 🤪

Parece que tenemos mayor número de personas en el Dragon Khan ¿no? 

Tengo que confesar que también es mi favorito. 😂

Esto y mucho más lo podrás aprender en el curso en VIVO que voy a dar los días 25, 26, 27 y 31 de julio de 17 a 20h hora Española. 

Y no solo eso…si quieres empezar tu carrera como data analyst daré tips para realizar tu portfolio y ser más visible en LinkedIn ¿te lo vas a perder? 

PLAZAS LIMITADAS. 

CUPON DISPONIBLE hasta el 16/06/2023. 

Os dejo el enlace para inscribiros y ver el contenido del curso 👇🏼

https://form.jotform.com/231606982746364

Y ya sabes, si te ha resultado útil esta información ayudame compartiéndola en tu red social favorita.

Facebook
Twitter
LinkedIn
WhatsApp

🤞 ¡No te pierdas ningún artículo!

¡No hacemos spam!

Noelia Navarro

Empecé mi carrera profesional en departamentos de administración contable, laboral y logística permitiéndome desarrollar nuevas técnicas para mejorar mi trabajo y descubrir así mi verdadera pasión el análisis de datos.
5 1 vote
Article Rating
Subscribe
Notify of
guest

2 Comentarios
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Felipe Music

Sin saberlo, Noelia, ha sido una de las personas que indirectamente me ha motivado a dar un giro en mi camino profesional.
Siempre tiene interesantes temas en su blog.