Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
iron_dinges
Helper II
Helper II

Solución de problemas de filtrado cruzado lento

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)?

1 ACCEPTED SOLUTION
iron_dinges
Helper II
Helper II

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.

View solution in original post

6 REPLIES 6
iron_dinges
Helper II
Helper II

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.

amitchandak
Super User
Super User

@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

@amitchandak

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

@amitchandak

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:

Model.png

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?

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

Check out the May 2024 Power BI update to learn about new features.

LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.