Home
» Power BI
»
Optimización DAX: dónde encontrar la trampa DAX oculta
Optimización DAX: dónde encontrar la trampa DAX oculta
Quiero centrarme hoy en algo que llamo la trampa DAX oculta. Si se encuentra con esta situación, sentirá que está perdiendo la cabeza porque su DAX se verá bien, pero no funcionará. Lo guiaré cuando eso ocurra y lo que puede hacer al respecto, y en el proceso, también hablaré sobre algunas mejores prácticas generales de optimización de DAX. Puedes ver el video completo de este tutorial en la parte inferior de este blog.
Primero echemos un vistazo a lo que estamos trabajando aquí. Tenemos alrededor de 10 años de datos de Internet Movie Database. Las tablas de hechos son bastante simples y tenemos datos de calificación, datos de presupuesto y datos brutos.
Hoy, veremos los ingresos brutos mundiales.
También tenemos nuestra mesa de fechas extendida. Este será un análisis de inteligencia de tiempo basado en la tabla de fechas y la tabla de hechos.
Queremos hacer algo realmente común y simple. Nuestro total bruto mundial es solo una medida de suma agregada muy simple, que queremos convertir en un porcentaje.
Para hacer esto, tomamos el numerador ( medida Total Worldwide Gross ) y el denominador ( medida Total Worldwide Gross , pero eliminamos el contexto del filtro de año).
Utilicé la porque creo que es más intuitivo cuando lees el código, pero si prefieres la , funciona igual de bien. Simplemente dividimos el numerador por el denominador para obtener el resultado.
Si tomamos la medida resultante y la colocamos en nuestra tabla, verá que hace exactamente lo que esperamos que haga. Obtenemos el 100% en la parte inferior y obtenemos los años convertidos en sus porcentajes individuales. Hasta ahora todo bien, y todavía no hemos encontrado ningún problema.
Total mundial bruto por trimestre
Echemos un vistazo a una situación similar en la que vamos por trimestre. Esta medida podría ser útil porque existe la hipótesis de que los ingresos brutos de la temporada de películas de verano son diferentes desde el comienzo del año y hacia el final del año previo a la temporada de los Oscar.
Nuevamente, tenemos exactamente la misma medida con la función REMOVEFILTERS en los números de trimestre en lugar del año.
Y si colocamos la medida que acabamos de hacer en la tabla, también hace exactamente lo que esperábamos.
Total mundial bruto por mes y año
Echemos un vistazo al tercer caso, que puede ser muy común, donde queremos buscar por mes y año.
Y nuevamente, usaremos la misma medida que antes. Pero esta vez, eliminaremos el filtro por mes y año.
Dejemos eso en nuestra mesa. De repente no funciona.
Podemos decir lo que no funciona al respecto. Sabemos que la medida del bruto mundial funciona, lo que significa que el numerador está bien, pero el denominador no. En cada uno de los casos anteriores, la función REMOVEFILTERS eliminó el filtro correctamente, pero aquí claramente no lo hizo.
De hecho, podemos probar esto cambiando lo que devolvimos aquí en el resultado.
En lugar de Resultado, usemos Denominador. Tenga en cuenta que esto se formateará en un porcentaje, por lo que se verá un poco divertido.
Lo que deberíamos obtener para el denominador es el mismo número en cada fila, pero no lo es.
Podemos decir que no está eliminando el filtro en el mes y el año, y pensamos que es porque el mes y el año están en el texto.
Pero el anterior para el trimestre también se expresó en texto, por lo que no es simplemente porque es texto. Solo hay que arreglarlo. Una vez que suelta el campo sin ordenarlo, se ordenará alfabéticamente.
En la tabla de fecha extendida, echemos un vistazo a ese campo llamado Mes y año . Si lo miramos en la columna Ordenar por , veremos algo interesante.
Veremos que esa columna está ordenada por un número llamado MonthnYear. Cuando ordena una columna por otra, esa columna de ordenación en realidad se convierte en parte del contexto del filtro. Esto es lo que está echando a perder este cálculo.
Volvamos a nuestra medida y eliminemos el contexto del mes y año que estamos usando como ordenación.
Ahora estamos obteniendo exactamente lo que deberíamos, que es el mes y el año calculados como un porcentaje adecuado.
Al eliminar un contexto de filtro, se necesitarán dos campos para hacer esto cuando esté ordenado . Puede preguntar que en lugar de tener que hacer dos campos aquí, ¿por qué no podemos eliminar los filtros en toda la tabla de fechas?
La respuesta es que podemos, y esto funcionará para los tres ejemplos de los que hablamos porque cada una de esas columnas es parte de nuestra tabla de fechas. Eliminar todo el contexto de filtro en esa tabla funcionará para los tres casos, pero en realidad es una mala idea.
Como principio general de optimización de DAX, debe eliminar tanto contexto de filtro como sea necesario para obtener el resultado que desea.
En la mayoría de los casos, no presentará esto en un formato tabular. Lo presentará como una matriz y necesitará una medida más compleja porque tiene dos granularidades diferentes en la misma columna. Esta medida parece complicada, pero en realidad no lo es.
Esto es solo una extensión de lo que ya hemos hecho. La primera parte de este cálculo de optimización DAX muestra los denominadores para la granularidad diferente. Eliminamos el contexto de filtro para un mes, para el año y para toda la tabla.
Para la segunda parte del cálculo, usamos SWITCH TRUE. Para esta función hay que ir de lo más específico a lo menos específico. El mes es nuestro alcance más estricto y específico, así que aquí es donde comenzamos. Tendremos que eliminar el contexto usando esos dos campos que identificamos.
Para el alcance del año, tenemos que eliminar el contexto del año y eliminar el contexto de toda la tabla.
Echemos un vistazo a lo que sucede si tomamos y eliminamos el contexto en toda la tabla de fechas . Usaremos una medida diferente que elimina el contexto en toda la tabla de fechas para los tres casos.
Veremos que la medida está eliminando demasiado el contexto. En lugar de calcular la contribución de cada mes a ese año, está calculando la contribución de ese mes a todo el conjunto de datos. Esto no es lo que queremos que suceda porque eliminar el contexto de toda la tabla es realmente solo un instrumento contundente cuando se necesita un bisturí.
Conclusión
Hay muchos casos en los que tiene una matriz y necesita controlar cuidadosamente qué contexto elimina. Simplemente eliminar el contexto en toda la tabla causará este tipo de problemas.
Espero que cuando surja esta situación (que invariablemente lo hará, en algún momento), la reconocerá como la trampa oculta que hemos discutido en esta publicación de optimización de DAX, y podrá evitarla sin la misma frustración. que me causó cuando lo vi por primera vez y no pude entender por qué mi DAX no funcionaba correctamente.
Si disfrutó del tema de optimización DAX cubierto en este tutorial en particular, suscríbase al canal de televisión LuckyTemplates . Tenemos una gran cantidad de contenido que sale todo el tiempo de mí y una variedad de creadores de contenido, todos los cuales están dedicados a mejorar la forma en que usa LuckyTemplates y Power Platform.