Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Tengo algunos problemas con el filtrado cruzado siendo extremadamente lento (20 segundos) en comparación con el uso de una segmentación de datos para lograr el mismo resultado (<1 segundo).
Mi informe consta de lo siguiente:
1. "Resumen" - tabla visual. Contiene StockCode, Descripción y varias estadísticas sobre cantidad disponible, ventas, etc. Los datos son DirectQuery (ya que los estoy integrando con PowerApp)
2. "Historial de ventas" - matriz visual. Contiene el último historial de ventas de 12 meses por mes y almacén. Los datos son una tabla diferente, en el modo de importación, que enlaza a la tabla de resumen en StockCode
Uso del informe: analizamos las líneas de resumen una por una, seleccionando una para ver el historial detallado en los otros objetos visuales.
Por ejemplo, seleccionaré StockCode 12345 y la matriz Historial de ventas se actualizará para mostrar los últimos 12 meses de ventas para cada almacén en ese StockCode específico.
El problema es que esto es extremadamente lento: el objeto visual Historial de ventas tarda más de 20 segundos en actualizarse después de hacer clic en una fila de la tabla Resumen.
Cuando uso una segmentación de datos en StockCode para seleccionar la misma línea, el historial de ventas se actualiza casi al instante (<1 segundo)
He intentado cambiar el origen de datos Historial de ventas a DirectQuery, pero eso no hizo ninguna diferencia.
Cuando hago una copia del objeto visual Resumen e incluyo solo 2 de las columnas originales (StockCode y una de las estadísticas), el filtrado cruzado de este objeto visual funciona bien y rápidamente.
¿Por qué es que el filtrado cruzado de un objeto visual de tabla con más columnas tarda mucho más, dado que ambos producen el mismo conjunto de resultados y los orígenes de datos están vinculados por una sola columna (StockCode)?
Solved! Go to Solution.
He solucionado el problema utilizando el siguiente método:
1. "Caché" los resultados de la consulta directa en una tabla en mi base de datos.
2. Cambie la consulta de la tabla de resumen para consultar la tabla recién creada.
Ahora está funcionando extremadamente rápido, debido a la velocidad de hacer una simple consulta de selección en una base de datos.
Esto agrega la complejidad de tener que mantener esa tabla actualizada para los usuarios del informe, ¡pero al menos el rendimiento es mejor!
Sería interesante aprender a optimizar las consultas de filtrado cruzado, luchando por encontrar cualquier buen material de referencia en línea.
He solucionado el problema utilizando el siguiente método:
1. "Caché" los resultados de la consulta directa en una tabla en mi base de datos.
2. Cambie la consulta de la tabla de resumen para consultar la tabla recién creada.
Ahora está funcionando extremadamente rápido, debido a la velocidad de hacer una simple consulta de selección en una base de datos.
Esto agrega la complejidad de tener que mantener esa tabla actualizada para los usuarios del informe, ¡pero al menos el rendimiento es mejor!
Sería interesante aprender a optimizar las consultas de filtrado cruzado, luchando por encontrar cualquier buen material de referencia en línea.
@iron_dinges , si hay alguna unión bidireccional, hágalos direccionales únicas. Compruebe la consulta que se está generando y compruebe si hay índices para admitir esa consulta.
Consulte también: https://www.youtube.com/watch?v=4kVw0eaz5Ws
Gracias por la respuesta.
Las uniones son unidireccionales.
¿Cómo ayudaría un índice en este problema? Tengo un problema con la tabla Import, no con la tabla DirectQuery.
Para aclarar:
1. El objeto visual de la tabla Summary tiene el origen de datos DirectQuery. Esta es la tabla visual donde selecciono filas para filtrar el otro objeto visual.
2. El objeto visual de la matriz Historial de ventas es un origen de datos de importación, por lo que a partir de mi comprensión, los índices no serían relevantes, ya que todo el conjunto de datos ya existe en el modelo?
@iron_dinges , están tomando datos de ambas fuentes (importación/directa) juntos. ¿Puede compartir el diagrama de relaciones con la tabla Direct/import etiquetada
Después de investigar con el analizador de rendimiento creo que entiendo por qué el rendimiento de DirectQuery es importante: parece que el filtrado cruzado realiza una consulta completa en la tabla DirectQuery, utilizando una cláusula WHERE adicional para cada una de las columnas del objeto visual de la tabla.
¿No hay forma de indicar a la operación de filtrado cruzado que solo utilice la columna StockCode para el filtrado cruzado? Para mí no tiene ningún sentido por qué consultaría el resto de las columnas, la única columna relevante en este caso es la columna StockCode.
Sí, estoy usando una mezcla de Import y Direct.
Como se indica en el OP, también intenté usar solo DirectQuery para ambas tablas, pero el resultado fue el mismo.
Modelo de datos:
vw_PBI_Redundant... es la tabla DirectQuery que estoy usando para el objeto visual de la tabla "Resumen".
Historial de ventas NotTraceable es la tabla de importación que estoy utilizando para el objeto visual de la tabla "Historial de ventas".
Las otras dos tablas del modelo proporcionan información sobre objetos visuales adicionales en el informe. ¿Podrían estar afectando el rendimiento?