La función CALCULATE DAX: problemas y soluciones

En el blog de hoy, exploraremos por qué no debe usar la función DAX para obtener el promedio por categoría y brindaremos algunas soluciones alternativas para obtener los mismos resultados que desea. Puedes ver el video completo de este tutorial en la parte inferior de este blog .

Obtener un promedio por categoría en DAX es extrañamente complicado. Al usar la función CALCULATE para resolver estos cálculos, los nuevos usuarios de DAX pueden encontrar el código DAX más difícil de entender de lo que debería ser. La buena noticia es que existen soluciones más sencillas para este problema. 

Tabla de contenido

Descripción general de la función CALCULAR DAX

Hace unos meses, presenté en el para LuckyTemplates. Se llamó DAX Counterculture, donde proporcioné algunos puntos de vista alternativos sobre DAX. 

Uno de los principales se relaciona con el uso de la función CALCULAR. Hablé sobre por qué no debería usar CALCULATE, especialmente si es nuevo en DAX. 

CALCULATE es una función realmente compleja de entender y usar. Hace ciertas suposiciones sobre su modelo de datos y puede causarle muchos problemas. 

También profundicé en la medida rápida de Microsoft para Running Total porque no funciona en situaciones de una sola tabla y necesita un esquema de estrella para funcionar correctamente.

Entonces, mostré una alternativa más fácil que funciona ya sea un esquema en estrella o un modelo de tabla única sin necesidad de CALCULAR. 

CALCULAR Fórmula DAX

Este blog profundizará en una medida rápida llamada Promedio por categoría . Si está en el escritorio de LuckyTemplates, comience por ir al panel Campos y cree una nueva medida rápida .

La función CALCULATE DAX: problemas y soluciones

En la ventana Medida rápida que aparecerá, elija Promedio por categoría en el menú desplegable Cálculo . Entonces, ¿arrastrar ? Valor en el campo de texto Valor base y Mes en el campo Categoría .

La función CALCULATE DAX: problemas y soluciones

Luego haga clic en Aceptar y obtendrá una imagen similar a esta. 

La función CALCULATE DAX: problemas y soluciones

En el eje x están los trimestres: Trimestre 1, 2, 3 y 4. 

Y lo que quiere hacer es sumar los valores de cada mes que se muestra a continuación y luego tomar el promedio de esos valores. En resumen, el promedio por categoría, que es el tema de nuestro blog. 

La función CALCULATE DAX: problemas y soluciones

Nuestro modelo de datos para esto es muy simple. Tenemos una tabla con Fechas , Valores que se generan aleatoriamente y Mes , MesOrdenar y Trimestres en columnas separadas. 

La función CALCULATE DAX: problemas y soluciones

Y tenemos lo mismo en nuestra tabla de fechas con Calendar Table, Month, MonthSort y Quarter. Esto significa que podemos elegir el Trimestre o el Mes de la tabla de fechas o de la primera tabla. 

La función CALCULATE DAX: problemas y soluciones

La buena noticia con Promedio por categoría es que en realidad funciona independientemente de si tiene un modelo de tabla única o un esquema de estrella.

En estas imágenes, estamos usando el Quarter de la primera mesa...

La función CALCULATE DAX: problemas y soluciones

 …mientras que este usa el Trimestre de nuestra tabla de fechas. Funciona de cualquier manera. 

La función CALCULATE DAX: problemas y soluciones

Pero el problema con el promedio por categoría es simplemente el código DAX. 

La función CALCULATE DAX: problemas y soluciones

Este código DAX es raro, porque incluso si eres un experto en DAX, probablemente te confundirá a primera vista. Está extrañamente construido con una declaración CALCULATE sin cláusula de filtro y solo envuelve una declaración de suma. 

De hecho, es una de esas cosas que me molestan cuando veo gente en los foros que usan CALCULATE que simplemente envuelve una suma sin razón. Pero en este caso, en realidad tiene una razón.

Me sorprende cada vez que los veo porque es solo una indicación inmediata de que no tienen idea de lo que están haciendo con la función CALCULAR. Así que recomiendo simplemente mantenerse alejado de él en su lugar. 

Código DAX para promedio por categoría

El código DAX que se muestra arriba usa . Esta función no está en un segmento CALCULAR, lo que, de nuevo, lo hace raro. Supuestamente, esta función está diseñada para usarse en declaraciones CALCULATE basadas en su documentación.

El código también usa , con lo que no estoy de acuerdo. Nunca deben usar VALORES porque los valores distintos tienden a devolver una fila en blanco si hay una fila que no coincide. Eso puede causarte muchos problemas, pero ese es un tema para otro video.

Esencialmente, lo que está pasando aquí es que están usando una función de VALORES para obtener todas nuestras categorías. Por ejemplo, en el Trimestre 1, eso es enero, febrero y marzo. VALUES también devuelve una tabla, pero están usando una instrucción KEEPFILTER para que sea válida como primer parámetro en . 

También mantienen la función CALCULATE para ejecutarse dentro del contexto de KEEPFILTERS. Debido a la forma en que funciona AVERAGEX, toma la segunda expresión y la ejecuta dentro del contexto de la primera expresión. 

¿Cuál es el problema, entonces?

En general, funciona bien, pero no para alguien nuevo en DAX. Creo que Microsoft realmente perdió el tren cuando crearon esta medida rápida porque supuestamente las medidas rápidas son para personas nuevas en DAX.

Las medidas rápidas son una gran idea, como "Vamos a escribir algunas medidas comunes con diferentes cálculos para usted porque es nuevo en DAX y no sabe todo lo que hay que saber sobre DAX". Pero, ¿por qué los construirían de formas tan extrañas y complicadas? 

¿Cómo se supone que alguien nuevo en DAX debe echar un vistazo a esto y descubrir qué está pasando cuando incluso probablemente los profesionales de DAX se están rascando un poco la cabeza con esto? 

Entonces, para mí, perdieron una oportunidad de oro para ayudar a las personas a aprender DAX con sus medidas rápidas al insistir en que incluyeran CALCULATE y tener que pasar por los aros para obtener CALCULATE allí. 

La solución más fácil

Uso de la función RESUMEN

Como mencioné anteriormente, hay una manera mejor y más simple de hacerlo.

Primero, cree una variable de tabla usando VAR_Table . Luego, usaremos para tomar la tabla, resumirla por mes, crear una columna de valor y resumir nuestros valores.

Finalmente, tomaremos el promedio de nuestros valores usando la función AVERAGEX

La función CALCULATE DAX: problemas y soluciones

Este código es más simple y es mucho más lógico. No incluye CALCULAR, que de todos modos no necesitas. 

Es posible que encuentre un artículo de blog que critique SUMMARIZE. El blog dice que la forma en que SUMMARIZE funciona internamente es bastante complicada.

También sugiere que puede meterse en problemas en un caso específico, pero nunca se encontrará con él. Eso solo sucedería si su cálculo involucra un cálculo muy complejo y una tabla muy grande. Solo entonces RESUMEN le dará resultados extraños. 

Al menos eso es lo que afirma el artículo del blog. Y está bien si desea evitar RESUMEN. En ese caso, utilice la función en su lugar.

Uso de la función GROUPBY

Nadie tiene problemas con el uso de la función GROUPBY, así que aprendamos a usarla también. Nuevamente, cree una variable de tabla usando VAR_Table. Luego, GROUPBY Mes y creamos una columna de Valor.

A continuación, aplicamos usando CURRENTGROUP , que es como funciona GROUPBY. Sumemos nuestro valor y nuevamente tomemos el AVERAGEX a través de él. 

Nuestro código debería verse así.

La función CALCULATE DAX: problemas y soluciones

Comparación de los resultados: funciones SUMMARIZE vs GROUPBY vs CALCULATE DAX

Ahora, veamos si los atajos que hicimos devuelven los mismos resultados. 

Como puede ver en las imágenes a continuación, tanto SUMMARIZE etiquetado como Mejor promedio por categoría como GROUPBY etiquetado como Mejor promedio por categoría 2 devuelven los mismos números. 

La función CALCULATE DAX: problemas y soluciones

Nuestras dos fórmulas devuelven 3.4K para el primer trimestre, 3.6K para el segundo trimestre, 3.4K para el tercer trimestre y 3.5K para el cuarto trimestre. Y nuevamente, funcionan en un modelo de datos de una sola tabla usando Quarters para nuestra tabla.

También funcionan en un esquema de estrella donde usamos Quarters en nuestra tabla de fechas. 

La función CALCULATE DAX: problemas y soluciones


Medidas rápidas: cómo usarlas en modelos de LuckyTemplates
usando la función Calcular dentro de LuckyTemplates
Formas efectivas de usar la función GROUPBY en LuckyTemplates

Conclusión

No necesitamos forzarnos a nosotros mismos a una lógica de contexto retorcida solo para obtener CALCULATE en nuestras fórmulas. Simplemente use funciones DAX estándar simples y puede lograr las mismas cosas. 

De hecho, probablemente en el 80% - 90% de los casos, no hay absolutamente ninguna razón para molestarse en usar CALCULATE para nada. En su lugar, puede utilizar las funciones SUMMARIZE y GROUPBY, que son más sencillas y lógicas.

Si desea explorar este archivo PBIX, ya lo publiqué en la Galería de medidas rápidas y lo llamé Mejor promedio por categoría . Simplemente desplácese hacia abajo en la página para encontrar el archivo PBIX que puede descargar y jugar con usted mismo. 

Mis mejores deseos,

greg deckler

Leave a Comment

Time Intelligence en LuckyTemplates: cómo calcular el número de transacciones realizadas en los últimos N días

Time Intelligence en LuckyTemplates: cómo calcular el número de transacciones realizadas en los últimos N días

Descubra cómo calcular el total de transacciones realizadas en los últimos N días y obtenga información útil utilizando la inteligencia de tiempo en LuckyTemplates.

Cómo evaluar clústeres en sus datos mediante la técnica DAX en LuckyTemplates

Cómo evaluar clústeres en sus datos mediante la técnica DAX en LuckyTemplates

En este tutorial, demuestro cómo mostrar clústeres en sus datos permite extraer información valiosa usando técnicas DAX avanzadas.

¿Cuánto personal tenemos actualmente? Lógica de fechas múltiples en LuckyTemplates usando DAX

¿Cuánto personal tenemos actualmente? Lógica de fechas múltiples en LuckyTemplates usando DAX

En este tutorial, aprenderá a calcular la <strong>población actual del personal</strong> para las relaciones múltiples de la tabla de calendario mediante la función COUNTROWS y FILTER en LuckyTemplates.

Hacer una solicitud HTTP en Power Automate

Hacer una solicitud HTTP en Power Automate

Aprenda a crear una solicitud HTTP con Power Automate y cómo implementar soluciones efectivas para la automatización de tareas.

Programe un flujo de escritorio para que se ejecute en Power Automate

Programe un flujo de escritorio para que se ejecute en Power Automate

En este tutorial, aprenda cómo programar un flujo de escritorio en Power Automate para automatizar tareas en la web y su escritorio.

Power Automate Terminar Control de acción en flujos

Power Automate Terminar Control de acción en flujos

Aprenda a usar correctamente el control Terminar acción de Power Automate que termina las acciones en un flujo si no se cumple alguna de las condiciones.

Power Query: combinar archivos de varias carpetas

Power Query: combinar archivos de varias carpetas

Aprenda a combinar archivos de varias carpetas en su red, escritorio, OneDrive o SharePoint utilizando Power Query.

Tipos de flujo de Power Automate y cuándo usarlos

Tipos de flujo de Power Automate y cuándo usarlos

En este blog, analizamos las similitudes y diferencias entre los tipos de flujo de Power Automate y determinamos cuándo usar cada flujo. Encuentra la mejor opción de automatización.

Conectores de Power Automate: número, texto y fecha y hora

Conectores de Power Automate: número, texto y fecha y hora

Familiarízate con algunos conectores Power Automate integrados que transforman cadenas en otro formato: número, texto y fecha y hora.

Tutorial del analizador VertiPaq: relaciones e integridad referencial

Tutorial del analizador VertiPaq: relaciones e integridad referencial

Este tutorial detallado sobre el analizador VertiPaq en DAX Studio le enseñará cómo usar la pestaña Relaciones para optimizar su DAX y resolver problemas de integridad referencial.