Qué es uno mismo en Python: ejemplos del mundo real
Qué es uno mismo en Python: ejemplos del mundo real
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 .
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 .
Luego haga clic en Aceptar y obtendrá una imagen similar a esta.
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.
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.
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 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...
…mientras que este usa el Trimestre de nuestra tabla de fechas. Funciona de cualquier manera.
Pero el problema con el promedio por categoría es simplemente el código DAX.
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 .
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í.
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.
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.
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
Qué es uno mismo en Python: ejemplos del mundo real
Aprenderá a guardar y cargar objetos desde un archivo .rds en R. Este blog también cubrirá cómo importar objetos desde R a LuckyTemplates.
En este tutorial del lenguaje de codificación DAX, aprenda a usar la función GENERAR y a cambiar dinámicamente el título de una medida.
Este tutorial cubrirá cómo usar la técnica de elementos visuales dinámicos de subprocesos múltiples para crear información a partir de visualizaciones de datos dinámicos en sus informes.
En este artículo, repasaré el contexto del filtro. El contexto del filtro es uno de los temas principales que cualquier usuario de LuckyTemplates debería conocer inicialmente.
Quiero mostrar cómo el servicio en línea de LuckyTemplates Apps puede ayudar a administrar diferentes informes e información generada a partir de varias fuentes.
Aprenda a calcular los cambios de su margen de beneficio utilizando técnicas como la bifurcación de medidas y la combinación de fórmulas DAX en LuckyTemplates.
Este tutorial analizará las ideas de materialización de cachés de datos y cómo afectan el rendimiento de DAX al proporcionar resultados.
Si todavía usa Excel hasta ahora, este es el mejor momento para comenzar a usar LuckyTemplates para sus necesidades de informes comerciales.
¿Qué es la puerta de enlace de LuckyTemplates? Todo lo que necesitas saber