Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreGet certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now
Esto está funcionando, pero me preguntaba si alguien tenía una mejor solución: mejor modelado o mejor rendimiento. Además, ¿hay un nombre para este problema?
Aquí están los datos básicos. Filtrar una tabla con muchos componentes para cada problema. Cada componente tiene su propia fila.
Tabla de hechos
Emitir # | Componente |
1 | Gato |
1 | Ratón |
2 | Perro |
2 | Elefante |
3 | Perro |
3 | Jerbo |
3 | Ratón |
Los problemas solo deben mostrarse si SE SELECCIONAN TODOS sus componentes. Si se seleccionan 2/3 componentes, no muestre el problema en absoluto.
A continuación, tengo 2 conjuntos de imágenes. En el primero, se seleccionan todos los componentes y se muestran todas las filas. En el segundo conjunto, se selecciona todo excepto Elephant, por lo que no se muestra nada del número 2.
Utilizo un esquema en estrella con filtrado unidireccional. FactTable con dimensiones Component y Issue.
Tengo una columna calc (filas de hechos) en Problema para contar cuántas filas en la tabla de hechos. Esto reemplaza algunos DAX elegantes en la medida [Filtro visual]. El elegante DAX no funcionó bien con el gran conjunto de datos para el que sirve.
Columna Problema[Filas de hechos] =
[Filtro visual] medida =
Solved! Go to Solution.
¿Qué tal reemplazar _allRows con esto?
CALCULATE ( COUNTROWS ( FactTable ), REMOVEFILTERS ( FactTable[Component] ) )
Probar
Visual Filter 2 = IF( ISINSCOPE(FactTable[Issue #]),
var slicerValues = VALUES(Component[Component])
var issueValues = CALCULATETABLE( VALUES(FactTable[Component]), ALLEXCEPT(FactTable,FactTable[Issue #]))
return IF( ISEMPTY( EXCEPT( issueValues, slicerValues) ), 1 )
)
Gracias por la respuesta. Este es un DAX elegante. Intenté esto y hace que todos los resultados desaparezcan. Además, evito las declaraciones IF y otras ramificaciones en los filtros de nivel visual debido al rendimiento. Me gusta el truco de SQLBI de usar INT() para convertir un booleano en un 1 o un cero.
Eso es extraño, funcionó en el archivo de demostración cuando lo probé.
Buen consejo sobre el INT, los chicos de SQL BI son increíbles. Por lo general, no dedico mucho tiempo a la optimización, ya que no trabajo con conjuntos de datos particularmente grandes.
¿Qué tal reemplazar _allRows con esto?
CALCULATE ( COUNTROWS ( FactTable ), REMOVEFILTERS ( FactTable[Component] ) )
Gracias Alexis. Eso funciona si hago REMOVEFILTER(Component[Component] y pongo Component from Component dim y no from FactTable. No funciona si la visualización de la tabla tiene FactTable[Component] con REMOVEFILTER( FactTable[Component]. Creo que esto podría deberse al problema de los autoexistentes. Entendiendo DAX Auto-Exist - SQLBI, pero no voy a pensar en eso ahora.
Sí, quitar el filtro de la tabla de cotas es la forma correcta de hacerlo. Inicialmente no me di cuenta de que tenías una mesa separada que estabas usando para la rebanadora.
Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.