Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!
Hola expertos,
Estoy tratando de entender cómo ALLEXPECT se comporta en una medida cuando hay varias tablas involucradas.
por ejemplo, tengo las siguientes dos tablas
Nombre de la tabla - Izquierda
| Left.index | Left.name | Izquierda.jk |
| 1 | a | a-1 |
| 2 | a | a-2 |
| 3 | a | a-3 |
| 4 | a | a-4 |
| 1 | b | b-1 |
| 2 | b | b-2 |
| 3 | b | b-3 |
Nombre de la tabla-Derecha
| Right.index | Right.name | Right.value | Derecha.Index.1 | Correcto.jk |
| 1 | a | 100 | 1 | a-1 |
| 2 | a | 200 | 2 | a-2 |
| 3 | a | 300 | 3 | a-3 |
| 4 | a | 400 | 4 | a-4 |
| 1 | b | 500 | 5 | b-1 |
| 2 | b | 600 | 6 | b-2 |
| 3 | b | 700 | 7 | b-3 |
Relación sabia filtros izquierdos a la derecha basado en la columna jk (joinkey)
Mi salida deseada sigue donde quiero mostrar el máximo de valor agrupado por nombre
| Right.index | Right.name | Right.value | salida |
| 1 | a | 100 | 400 |
| 2 | a | 200 | 400 |
| 3 | a | 300 | 400 |
| 4 | a | 400 | 400 |
| 1 | b | 500 | 700 |
| 2 | b | 600 | 700 |
| 3 | b | 700 | 700 |
Puedo mostrar esto fácilmente con la siguiente medida cuando saco todo sólo de la mesa correcta
Measure 3 = CALCULATE(MAX('right'[Right.value]),ALLEXCEPT('right','right'[Right.name]))
pero si quiero mostrar lo mismo obteniendo las columnas tenues de la tabla izquierda como la siguiente, entonces la medida se queda plana. No entiendo por qué ALLEXCEPT no puede conservar la agrupación en este contexto.
Sin embargo, llegué a donde quería con Measure2. Es sólo que estoy tratando de encontrar una explicación sobre el comportamiento ALLEXCEPT.
Measure2 :=
MAXX (
FILTER (
ALLSELECTED ( 'right' ),
'right'[Right.name] = MAX ( 'right'[Right.name] )
),
CALCULATE ( MAX ( 'right'[Right.value] ) )
)
Gracias de antemano.
Solved! Go to Solution.
Allí @smpa01
En primer lugar, creo que obtendrá el resultado que desea con esta medida en su lugar:
Measure 3 Fixed =
CALCULATE (
MAX ( 'right'[Right.value] ),
ALL ( 'Right' ),
VALUES ( 'Right'[Right.name] )
)
La explicación básica es que ALLEXCEPT quita todos los filtros de las columnas de la tabla (expandida) en el primer argumento, excepto los filtros existentes en los argumentos restantes. Por lo tanto, para que se conserve un filtro, debe existir en primer lugar.
En este modelo de datos, la relación 1:1 significa que la tabla expandida de 'Derecha' incluye todas las columnas de 'Izquierda' (y viceversa).
Cuando se utilizan columnas de 'Izquierda' en el objeto visual de la tabla, no hay filtros en las columnas de 'Derecha', incluido 'Derecha'[nombre]. Por lo tanto, ALLEXCEPT tiene el efecto de borrar todos los filtros a la derecha y a la izquierda (debido a la expansión de la tabla) y, en este objeto visual, no hay filtros en 'Right'[Nombre] que conservar.
[Medida 3 fija] en su lugar utiliza ALL/VALUES, en lugar de ALLEXCEPT. Esto borra todos los filtros de 'Derecha' (e 'Izquierda' debido a la expansión de la tabla), pero devuelve los valores visibles de 'Derecha'[Right.name], que tiene en cuenta el cruce entre 'Izquierda' y 'Derecha.
Buen artículo de SQLBI sobre este tema general:
https://www.sqlbi.com/articles/using-allexcept-versus-all-and-values/
Atentamente
Owen
Allí @smpa01
En primer lugar, creo que obtendrá el resultado que desea con esta medida en su lugar:
Measure 3 Fixed =
CALCULATE (
MAX ( 'right'[Right.value] ),
ALL ( 'Right' ),
VALUES ( 'Right'[Right.name] )
)
La explicación básica es que ALLEXCEPT quita todos los filtros de las columnas de la tabla (expandida) en el primer argumento, excepto los filtros existentes en los argumentos restantes. Por lo tanto, para que se conserve un filtro, debe existir en primer lugar.
En este modelo de datos, la relación 1:1 significa que la tabla expandida de 'Derecha' incluye todas las columnas de 'Izquierda' (y viceversa).
Cuando se utilizan columnas de 'Izquierda' en el objeto visual de la tabla, no hay filtros en las columnas de 'Derecha', incluido 'Derecha'[nombre]. Por lo tanto, ALLEXCEPT tiene el efecto de borrar todos los filtros a la derecha y a la izquierda (debido a la expansión de la tabla) y, en este objeto visual, no hay filtros en 'Right'[Nombre] que conservar.
[Medida 3 fija] en su lugar utiliza ALL/VALUES, en lugar de ALLEXCEPT. Esto borra todos los filtros de 'Derecha' (e 'Izquierda' debido a la expansión de la tabla), pero devuelve los valores visibles de 'Derecha'[Right.name], que tiene en cuenta el cruce entre 'Izquierda' y 'Derecha.
Buen artículo de SQLBI sobre este tema general:
https://www.sqlbi.com/articles/using-allexcept-versus-all-and-values/
Atentamente
Owen
@OwenAuger muchas gracias por su tiempo y por escribir esta explicación detallada. Ahora subtand completamente el tema y gracias de nuevo por simplificar la complejidad detrás de él.