Qué es uno mismo en Python: ejemplos del mundo real
Qué es uno mismo en Python: ejemplos del mundo real
En este tutorial, aprenderá a optimizar una medida en LuckyTemplates. La optimización de las medidas en su informe mejora el rendimiento de sus códigos en la producción de información y datos valiosos. También aprenderá sobre los diferentes métodos de evaluación y cómo aplicarlos para optimizar su informe. Puedes ver el video completo de este tutorial en la parte inferior de este blog.
Tabla de contenido
1. Analizar el rendimiento del código
En este ejemplo, necesita optimizar este informe:
Este es el modelo de datos que vas a utilizar:
La tabla Trabajos contiene toda la información relativa a cualquier trabajo que se haya realizado en un período de tiempo determinado.
Esta tabla es la base de todas las medidas que vas a optimizar:
En primer lugar, debe probar el rendimiento del informe.
Vaya a la pestaña Ver y seleccione Analizador de rendimiento . Luego, haga clic en Iniciar grabación y actualizar imágenes . Espere a que el analizador represente la imagen.
Una vez hecho esto, despliegue la lista Desglose de incentivos y haga clic en Copiar consulta .
A continuación, seleccione Herramientas externas para ir a DAX Studio y ver el código que generó LuckyTemplates.
Luego, pegue la consulta copiada dentro del espacio de trabajo.
Variables en la medida
La primera variable es DateClosed , que es la segmentación del tablero. Utiliza una columna de la tabla Fact para obtener los valores de ciertos períodos en la segmentación.
La siguiente variable es JobLost , que comprueba si los datos de Job Lost son falsos o están en blanco.
La última variable es MatrixVisual . Este es el corazón del código. Muestra la columna resumida generada por LuckyTemplates para rellenar objetos visuales de matriz. Agrupa el Job Loss Type en esta matriz e inyecta los filtros provenientes de los slicers. Luego, agrega columnas extendidas.
Una vez que la columna de resumen complete la ejecución, verá los resultados en el panel debajo del código.
LuckyTemplates usa el resultado para rellenar objetos visuales de matriz.
Caché en frío para DAX Studio
A continuación, debe verificar el tiempo necesario para ejecutar todo el código. Para hacer eso, active los tiempos del servidor y luego elija Borrar caché y luego ejecutar .
Cuando intenta optimizar una medida en LuckyTemplates con DAX Studio , es mejor operar en el escenario de caché en frío para que el tiempo que obtenga sea el correcto. Después de eso, presione F5 y espere a que se complete la operación en la pestaña Tiempos del servidor .
Una vez que se completa, puede ver que el tiempo total de ejecución es de 3,6 segundos. Pasó la mayor parte del tiempo en el motor de fórmula y pasó 57 milisegundos en el motor de almacenamiento.
También puede ver que encontró 383 consultas del motor de almacenamiento. De todas esas consultas, hay 327 que se lanzan en la memoria para que puedan ser reutilizadas.
2. Analizar una medida en LuckyTemplates
A continuación, debe optimizar estas 3 medidas idénticas.
Debe extraer estas medidas en un archivo diferente y conectarlo al modelo de datos que está utilizando.
Después de eso, inicie Server Timings para ver el tiempo que tardan las 3 medidas en completar las imágenes.
Los resultados de la ejecución muestran que las medidas consumen 1,85 segundos para recuperar un resultado.
El resultado muestra una tabla que consta de 10 filas y 3 columnas extendidas que pertenecen a las columnas resumidas.
La columna Tipo de pérdida contiene 10 valores únicos que el código calcula para obtener los porcentajes de incentivo.
El tiempo que tarda el código es exponencialmente alto. Aquí es donde y cuando necesita optimizarlos.
La medida de porcentaje de incentivo RB en LuckyTemplates
Esta es una medida de % de incentivo RB en LuckyTemplates. Es una de las 3 medidas principales utilizadas en este ejemplo.
Puede ver que está tratando de calcular el porcentaje de incentivo.
Tiene una variable, JobType, que recupera el valor de Lost Type en el contexto de filtro actual. También comprueba si solo hay un único valor visible en el contexto de filtro actual. Debe usar una función que cada vez que se cumpla una condición, dé el resultado correspondiente.
Este código de medida genera mucha grasa de motor de almacenamiento lo que aumenta el tiempo en la duración total del código.
Ahora, regrese a DAX Studio para verificar la cantidad de consultas del motor de almacenamiento que genera la medida.
Puede ver que se necesitaron 600 milisegundos para ejecutarse y 43 consultas del motor de almacenamiento para simplemente recuperar datos para las 10 filas.
Ahora, verifique los datos que se solicitan desde el motor de almacenamiento. En la primera consulta, hay un tipo de pérdida de trabajos y DCOUNT del tipo de pérdida de trabajos.
La siguiente consulta tiene Fecha de cierre de trabajos, que proviene de la segmentación del informe.
En el tercer código, verá otro tipo de pérdida de trabajos con el ID de datos de devolución de llamada.
En otra línea, verás las líneas de código más importantes.
Lo primero que ve es la del pago de trabajos recibido, facturado y gastos reales.
La siguiente es la función WHERE que establece una condición y su resultado correspondiente. El resultado variará según la selección de la segmentación y la declaración de cambio en la medida % de incentivo de RB.
También notará que el código en las líneas 12 y 14 es el mismo.
Si te desplazas hacia la derecha, puedes ver que hay líneas con las mismas consultas. Las consultas en las líneas están dirigidas por la declaración de cambio en la medida RB Incentive%.
Si vuelve a la medida RB Incentive% en LuckyTemplates, puede ver la cantidad de veces que se repite una consulta y cómo se refleja en las consultas del motor de almacenamiento.
La lógica detrás de IF y Switch
Ahora, para comprender por qué las consultas se ejecutan varias veces, debe comprender la lógica de las funciones y SWITCH .
Debe ejecutarlos por separado en un plan de consulta. Pero antes de hacerlo, asegúrese de conectarse a la base de datos y activar el Plan de consulta.
Ejecute la instrucción SWITCH en el plan de consulta. Luego, resalte la declaración y luego presione enter.
Esto generará un Plan Lógico de Consulta con diferentes operaciones.
Luego, ejecute la declaración IF resaltando la declaración y presionando enter.
Puede ver que genera el mismo Plan de consulta lógica.
Esto se debe a que cada vez que usa una función SWITCH , el motor convierte internamente esa función en una instrucción IF . Pero se recomienda una instrucción SWITCH porque aumenta la legibilidad de su código.
Después de eso, debe comprender cómo se ejecuta un código dentro de la función IF o SWITCH .
Este es un código de ejemplo que tiene una instrucción SWITCH dentro.
Tiene medidas para Ganancia bruta, Estimación total y Facturación total, que son la SUMA de diferentes columnas. También tiene una función sobre los del tipo de pérdida de trabajos y una instrucción SWITCH y TRUE .
Cuando ejecute este código, verá la lógica detrás de las funciones.
La primera consulta obtiene el Tipo de pérdida de trabajos distinto de la tabla Trabajos.
Además del tipo de pérdida de empleos, también obtiene la suma de la estimación de empleos.
Dentro de la condición DONDE , también puede ver los valores que existen en la columna Tipo de pérdida de trabajos.
3. Usar métodos de evaluación de código
En DAX, existen 3 métodos para evaluar códigos:
Estos métodos lo ayudarán a optimizar un código o medida en LuckyTemplates.
1er Método: Evaluación Estricta
El ejemplo que se muestra a continuación utiliza el método de evaluación estricta.
La lógica detrás de esto es que si el contexto del tipo de pérdida de empleos es igual a A, proporcionará la ganancia bruta. De lo contrario, da la Estimación Total. El código hace esto para cada fila en el tipo de pérdida de trabajos.
Esta es otra medida de ejemplo en LuckyTemplates que utiliza una evaluación estricta.
Cuando ejecute este código, generará 5 consultas del motor de almacenamiento.
Con Evaluación Estricta, el código proporciona la Estimación Total si la Ganancia Bruta multiplicada por 1.4 es mayor que la Estimación Promedio. En caso contrario, dará el Beneficio Bruto.
El uso de la evaluación estricta produce más consultas del motor de almacenamiento porque la declaración IF verifica la competencia de la ganancia bruta varias veces y eventualmente obstaculizará el rendimiento de toda la operación.
2do método: evaluación ansiosa
Este es el mismo código que el ejemplo anterior.
Pero en lugar de calcular las medidas dentro de la declaración IF , calculó todo en el antes de RETURN .
Significa que antes de verificar las declaraciones, obtiene todos los valores de Ganancia bruta y Estimación total para todos los Tipos de pérdida de empleos.
Cuando ejecuta este código, la cantidad de motores de almacenamiento se reduce a 3.
Mejora el rendimiento de toda la operación.
En la consulta de la primera operación, obtiene el tipo de pérdida de trabajos y la suma de la estimación de trabajos y la ganancia bruta.
La siguiente consulta obtiene la suma de la estimación de trabajos del establo de trabajos. Esto se utiliza para calcular la estimación promedio.
La última consulta proporciona el tipo de pérdida de trabajos distinto para los valores escritos en ADDCOLUMNS .
El uso de Eager Evaluation obtiene todo en un solo caché de datos. Los datos también se evalúan e iteran en el motor de fórmulas. La declaración IF devolverá la estimación total o la ganancia bruta según la evaluación de Verdadero o Falso.
Eager Evaluation no siempre es el mejor método para optimizar sus códigos. La evaluación estricta dará como resultado un mejor rendimiento si tiene códigos complejos. Todo depende de las funciones que use dentro del código DAX.
La desventaja de Eager Evaluation es que si crea valores antes de una declaración IF o SWITCH y usa esas variables dentro de la declaración que nunca debe ejecutarse, el motor seguirá calculando esas variables.
Aquí hay un ejemplo de la desventaja:
Idealmente, si el tipo de pérdida de empleos es igual a A, debería obtener una ganancia bruta. De lo contrario, obtiene Estimación total.
Dado que no hay ningún valor dentro de la columna Tipo de pérdida de trabajo que sea igual a A, siempre debe obtener la Estimación total. Sin embargo, todavía proporciona la ganancia bruta en la memoria caché de datos.
Si observa la primera consulta, obtiene el tipo de pérdida de empleos y la suma de la ganancia bruta y la estimación de empleos.
En la siguiente consulta, obtiene un tipo de pérdida de trabajos distinto de la tabla de trabajos.
3er Método: Evaluación IF.EAGER
El siguiente método es la evaluación de la función IF.EAGER que replica el comportamiento de Eager Evaluation.
Le permite escribir un código que representa la evaluación estricta y ejecutarlo con Eager Evaluation.
Si observa este código de muestra, es igual que el código de evaluación estricta. La única diferencia es que esto usa la función IF.EAGER en lugar de IF .
Antes de ejecutar el código, asegúrese de conectarse al modelo de LuckyTemplates y activar la Temporización del servidor. Una vez hecho esto, presione F5.
Puede ver que generó 3 consultas del motor de almacenamiento.
La primera consulta obtiene el tipo de pérdida de trabajos y la suma de la estimación de trabajos y la ganancia bruta.
La segunda consulta obtiene la suma de la estimación de trabajos.
La última consulta obtiene el Tipo de pérdida de trabajos distinto de la tabla Trabajos.
Notarás que ejecutó el mismo comportamiento que Eager Evaluation.
Resumen de métodos de evaluación
Al tratar de mejorar el rendimiento de sus cálculos, debe recordar lo siguiente:
Pero tenga en cuenta que debe probar estos tres métodos para descubrir cuál es realmente el mejor para usar en su informe.
4. Optimizar una medida en LuckyTemplates
La lección principal de este tutorial es optimizar sus códigos.
Vuelva atrás y mire la medida de % de incentivo de RB que se ejecuta mediante la evaluación estricta. A continuación, intente evaluarlo utilizando Eager Evaluation.
Comience creando variables e ingresando la función RETORNO .
Cambie las referencias de medida con las variables.
Después de eso, confirme la medida y vaya a DAX Studio para ver si mejoró el rendimiento.
Muestra que el tiempo total es de 642 milisegundos y el número total de consultas del motor de almacenamiento se ha reducido a 39.
Ahora, cree las variables para todos los datos y cambie todas las referencias de medida a sus variables correspondientes.
A continuación, confirme la medida y ejecute el código en el estudio DAX.
El tiempo total de ejecución y la cantidad total de consultas del motor de almacenamiento se han reducido de 600 milisegundos a 170 milisegundos y de 43 consultas a 15 consultas, respectivamente.
También puede ver que no hay duplicados. Tener variables en su código mejora su legibilidad y rendimiento.
Optimización avanzada para una medida en LuckyTemplates
A continuación, debe optimizar aún más sus códigos DAX.
En lugar de usar , use la función .
HASONEVALUE cuenta el número de valores disponibles en el contexto del filtro, que es una operación muy intensiva. Mientras tanto, ISINSCOPE comprueba si la columna que se está suministrando se utiliza para agrupar o no.
Después de cambiar las funciones, confirme la medida y ejecútela en DAX Studio.
Puede ver que el número de consultas del motor de almacenamiento ahora es 12. El tiempo total de ejecución también se ha convertido en 105 milisegundos.
En la segunda consulta, verá un ID de datos de devolución de llamada.
Esto sucede a veces cuando usa SELECTEDVALUE con el campo de texto. Cuando ve datos de devolución de llamada, el motor de almacenamiento llama al motor de fórmulas para ayudar a resolver la complejidad del código. Esto ralentiza el rendimiento de su medida.
Debe eliminar los datos de devolución de llamada para tener un mejor rendimiento en su informe. Para ello, debe crear una tabla de configuración en el modelo de datos.
Vaya a la opción Introducir datos y pegue los datos. Nombre la tabla LossTypeConfigTable .
A continuación, haga clic en Editar para cambiar el tipo de datos de la columna que va a importar.
El tipo de datos del ID de tipo de pérdida debe ser un valor de maestro para que pueda usarse dentro de la función SELECTEDVALUE .
Una vez que se haya cargado en el modelo, cree una relación entre la tabla Jobs y la tabla LossTypeConfigTable según el tipo de pérdida.
Después de crear una relación, vaya a la tabla Trabajos y agregue una nueva columna. Llámelo ID de pérdida y luego ingrese la fórmula.
Use la función para la tabla de configuración y luego extraiga el ID del tipo de pérdida.
A continuación, vuelva a la medida RB Incentive% y haga referencia al campo numérico en lugar del campo de texto. Dentro de SELECTEDVALUE , reemplace Loss Type con Loss ID.
A continuación, modifique todas las medidas dentro del código. Utilice un valor entero en lugar de valores de texto para verificar el tipo de trabajo.
Una vez que haya cambiado el código, confirme la medida y ejecútela en DAX Studio.
El ID de datos de devolución de llamada se elimina en la consulta y el tiempo de ejecución del código se reduce a 93 milisegundos.
La medida RB Incentive% ahora está completamente optimizada.
5. Optimice otras medidas en LuckyTemplates
También debe optimizar las medidas WR Incentive% y QB Incentive%.
Copie y pegue el código exacto utilizado en la medida RB Incentive%. Luego, ejecute las 3 medidas juntas.
El tiempo total de ejecución se optimiza y reduce de 1855 milisegundos a 213 milisegundos. También hay solo 12 consultas del motor de almacenamiento.
Las dos primeras consultas crean el contexto del filtro y el resto representa el número exacto de valores dentro de la columna Tipo de pérdida de trabajos.
Dado que todas las medidas se han optimizado, ejecute el código original y vea cómo ha cambiado el rendimiento. Los datos muestran que ahora se calcula en 1,9 segundos.
El rendimiento de todo el código ahora está optimizado, lo que hace que su informe sea más rápido y mejor.
Optimice las funciones de DAX con este nuevo curso
Transformaciones simples de LuckyTemplates para obtener datos más optimizados
Optimice las fórmulas de LuckyTemplates con DAX avanzado
Conclusión
En los informes de LuckyTemplates, las medidas deben optimizarse para garantizar que sus códigos DAX se ejecuten sin problemas. Esto también mejora el rendimiento general de su informe.
Aprendió los diferentes métodos para optimizar su medida en LuckyTemplates y aprendió a evaluar cuál usar según el contexto de su informe.
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