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

The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!

Reply
Syndicate_Admin
Administrator
Administrator

Buscando la explicación del comportamiento allexcept

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.indexLeft.nameIzquierda.jk
1aa-1
2aa-2
3aa-3
4aa-4
1bb-1
2bb-2
3bb-3

Nombre de la tabla-Derecha

Right.indexRight.nameRight.valueDerecha.Index.1Correcto.jk
1a1001a-1
2a2002a-2
3a3003a-3
4a4004a-4
1b5005b-1
2b6006b-2
3b7007b-3

Relación sabia filtros izquierdos a la derecha basado en la columna jk (joinkey)

Capture.PNG

Mi salida deseada sigue donde quiero mostrar el máximo de valor agrupado por nombre

Right.indexRight.nameRight.valuesalida
1a100400
2a200400
3a300400
4a400400
1b500700
2b600700
3b700700

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.

Capture.PNG

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

@OwenAuger @MFelix

Gracias de antemano.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

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

View solution in original post

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

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.

Helpful resources

Announcements
FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.