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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Segmentación para filtrar una segmentación en una tabla no relacionada

Tengo dos mesas que no están relacionadas. Tabla A y Tabla B.

Cada mesa tiene una cortadora en el campo "Animales".

Tabla A

Animales

O - Gato

O - Perro

O - Elefante

Tabla B

Animales

O - Gato

O - Perro

O - Elefante

Cada tabla tiene una segmentación de casilla de verificación para todos los valores. Cuando selecciono "Cat" en la cortadora de la tabla A, quiero que "Cat" desaparezca en la segmentación de la tabla B. El usuario también puede seleccionar varios valores y todos estos se excluirían en la segunda segmentación.

Ejemplo:

Tabla A Slicer

Animales

X - Gato

O - Perro

O - Elefante

Tabla B Slicer

Animales

O - Perro

O - Elefante

¿Es posible hacer esto en PowerBI?

Fix2: Wow acaba de escribir que todo en y tienen que volver a escribir esto porque no he iniciado sesión!

9 REPLIES 9
Syndicate_Admin
Administrator
Administrator

@ggranger

Puedes intentar algo como esto.

Primero el modelo:

Model.PNG

A continuación, la medida:

Exclude Selection = 
VAR selValTable1 = VALUES(Table1[Animal])
VAR selValTable2 = VALUES(Table2[Animal])
Return
IF(ISFILTERED(Table1[Animal]), COUNTROWS(EXCEPT(selValTable2, selValTable1)), COUNTROWS(Table2))

Agregue esta medida a los "filtros en este objeto visual" y establezca el valor en 1

Y entiendes esto:

Result.PNG

@PaulDBrown ¡Usted, señor, es un genio! Empezaba a jugar con el campo EXCEPTION, pero todavía estaba lejos de la solución.

Una cosa que debería haber preguntado - ¿hay una manera de mostrar todos los valores en ambas segmentaciones debandas si no se selecciona nada (por ejemplo, todos los valores están disponibles en ambas tablas)? El problema al que me enfrento es que si aplico esto a ambas segmentaciones, ambas se mostrarán en blanco.

Editar: Ajustado arriba a esto:

Excluir selección ?
VAR selValTable1 - VALUES(Table1[Animal])
VAR selValTable2 - VALUES(Table2[Animal])
devolución
IF(ISFILTERED(Table1[Animal]), COUNTROWS(EXCEPT(selValTable2, selValTable1)), 1)

Edit2: No pregunté esto, pero esperaba esto para eliminar los datos de todo lo que los filtros de segmentación de datos también. Esto filtra solo la segmentación de datos.

@ggranger

La medida está escrita para aplicarse únicamente en los "filtros de este objeto visual" de la segmentación de la segunda tabla. (no lo agregue a la segmentación de datos de la primera tabla).

Si no se selecciona ningún elemento de la primera segmentación de datos, obtendrá todos los elementos en ambas segmentaciones de datos:

no selections.PNG

Si desea que el mismo comportamiento actúe de la segmentación de datos 2 a la segmentación de datos 1, necesita una medida equivalente y aplicarlo a los "filtros en este objeto visual" para la segmentación de datos 1, estableciendo de nuevo el valor en 1:

Exclude Selection table 1 = 
VAR selValTable1 = VALUES(Table1[Animal])
VAR selValTable2 = VALUES(Table2[Animal])
Return
IF(ISFILTERED(Table2[Animal]), COUNTROWS(EXCEPT(selValTable1, selValTable2)), COUNTROWS(Table1))

both.PNG

En el ejemplo anterior, cada segmentación de datos tiene su medida correspondiente como filtro: cada medida se escribe específicamente para cada segmentación de datos; no se puede usar la misma medida en ambas segmentaciones debandas.

En cuanto al filtrado, mi representación era un poco confusa. Desactivé las interacciones en las tablas de la izquierda para mostrar las tablas completas. Si tiene las interacciones entre los objetos visuales activos (comportamiento predeterminado), cada tabla se filtrará por su segmentación correspondiente, como se puede ver en la representación anterior.

Para filtrar los "valores de la tabla opuesta", en función de la selección de segmentación, aplique cada medida correspondiente a los "filtros en este objeto visual" para cada tabla (la misma medida que ha utilizado como filtro para la segmentación correspondiente de cada tabla:

table filter.PNG

Así que la tabla 2 ahora tiene el mismo filtro (medida) utilizado para la segmentación de datos 2; y haga lo mismo para la tabla 1 agregando la medida que ha utilizado para la segmentación de datos 1 como filtro en la tabla 1. ¿Tiene sentido?

Ps: tal vez debería hacer una entrada de blog sobre esto?

¡Hola Paul, gracias de nuevo por tu ayuda! Su explicación anterior tiene sentido y veo donde no estoy explicando bien toda mi meta. Soy el 90% del camino.

Desafío que estoy teniendo es que he combinado variables de Table1 y Table2 en el mismo gráfico. Así que para el ejemplo anterior, habría una columna adicional para "Recuento de animales".

Si selecciono "Pájaro" en la Tabla 1, la Tabla 1 sigue mostrándose en la visualización anterior. Aquí hay una imagen de cómo tengo mi configuración de datos.

BM1.jpg
BM2.jpg

Con el código, creé esta medida adicional para intentar filtrar la visualización. Añade las dos medidas juntas y si suman "2" o nada se filtra los animales se mostrarían en la cortadora. Esto casi funciona. Sin embargo, no funciona cuando agredo orígenes de ambas tablas, porque las tablas no están relacionadas:

Excluir animales (Grupo1+Grupo2)
VAR selValTable1 - VALUES(Table1[Animal])
VAR selValTable2 - VALUES(Table2[Animal])
devolución
IF(AND(ISFILTERED(Table1[Animal]),ISFILTERED(Table2[Animal])),2,IF(ISFILTERED(Table1[Animal]), COUNTROWS(EXCEPT(selValTable2, selValTable1)), 1)+
IF(ISFILTERED(Table2[Animal]), COUNTROWS(EXCEPT(selValTable1, selValTable2)), 1))

¿Ves alguna forma de lograr el efecto deseado? ¿Quizás crear relaciones a través del código? Mantengo las tablas de datos sin relación para poder hacer comparaciones en el mismo objeto visual.

Me imagino que una entrada de blog sería muy útil para otros. Si estás utilizando un ordenador portátil o una tablet, intenta moverte a otra ubicación e inténtalo de nuevo.

@ggranger

Ok, creo que entiendo lo que estás tratando de reproducir: mostrar el recuento de animales en el mismo visual. Esto realmente hace las cosas un poco más complicadas (al menos la forma en que he trabajado a través de él, pero bien puede que esté complicando demasiado las cosas yo mismo!)

Caminaré a través de este paso a paso.

1) Cree una nueva tabla que incluya los valores únicos para los animales de ambas tablas (puede hacerlo añadiendo tablas en Power Query o utilizando el siguiente DAX:

List Animals =
VAR Table1Anim = VALUES(Table1[Animal])
VAR Table2Anim = VALUES(Table2[Animal])
RETURN
DISTINCT(
      UNION(Table1Anim, Table2Anim)
)

Usaremos esta tabla para el eje de los objetos visuales. Debe permanecer sin relación con las otras tablas del modelo:

New model.JPG

Aquí están las dos tablas de muestra que estoy usando en este ejercicio:

Table 1.JPGTable2.JPG

2) Crear las medidas simples para el número de animales:

Number of Animals T1 = SUM(Table1[Count])
Number of Animals T2 = SUM(Table2[Count])

3) Utilice la medida que creamos anteriormente para filtrar las segmentaciones de datos (y agregarlas al panel de filtro al crear cada segmentación de datos):

Exclude T1 Selection from T2 =
VAR selValTable1 =
    VALUES ( Table1[Animal] )
VAR selValTable2 =
    VALUES ( Table2[Animal] )
RETURN
    IF (
        ISFILTERED ( Table1[Animal] ),
        COUNTROWS ( EXCEPT ( selValTable2, selValTable1 ) ),
        COUNTROWS ( Table2 )
    )
Exclude T2 Selection from T1 =
VAR selValTable1 =
    VALUES ( Table1[Animal] )
VAR selValTable2 =
    VALUES ( Table2[Animal] )
RETURN
    IF (
        ISFILTERED ( Table2[Animal] ),
        COUNTROWS ( EXCEPT ( selValTable1, selValTable2 ) ),
        COUNTROWS ( Table1 )
    )

4) Puesto que estamos utilizando la tabla No relacionados List Animals para el eje, necesitamos crear medidas usando TREATAS para filtrar las columnas correspondientes de cada tabla:

Count Animals 1 =
CALCULATE (
    [Number of Animals T1],
    TREATAS ( VALUES ( 'List Animals'[Animal] ), Table1[Animal] )
)
Count Animals 2 =
CALCULATE (
    [Number of Animals T2],
    TREATAS ( VALUES ( 'List Animals'[Animal] ), Table2[Animal] )
)

5) Por último, necesitamos las siguientes medidas para emular el filtrado de las tablas opuestas y representar los valores correctos para cada selección realizada en las segmentaciones de datos. Estas son las medidas que usaremos en los objetos visuales finales

Count of Animals (Table1) =
VAR selValTable1 =
    VALUES ( Table1[Animal] )
VAR selValTable2 =
    VALUES ( Table2[Animal] )
VAR ListAnimals =
    VALUES ( 'List Animals'[Animal] )
VAR FIlt =
    IF (
        ISFILTERED ( Table2[Animal] ),
        COUNTROWS ( INTERSECT ( ListAnimals, EXCEPT ( selValTable1, selValTable2 ) ) ),
        COUNTROWS ( INTERSECT ( ListAnimals, selValTable1 ) )
    )
RETURN
    CALCULATE ( [Count Animals 1], FILTER ( 'List Animals', FIlt = 1 ) )
Count of Animals (Table2) =
VAR selValTable1 =
    VALUES ( Table1[Animal] )
VAR selValTable2 =
    VALUES ( Table2[Animal] )
VAR ListAnimals =
    VALUES ( 'List Animals'[Animal] )
VAR FIlt =
    IF (
        ISFILTERED ( Table1[Animal] ),
        COUNTROWS ( INTERSECT ( ListAnimals, EXCEPT ( selValTable2, selValTable1 ) ) ),
        COUNTROWS ( INTERSECT ( ListAnimals, selValTable2 ) )
    )
RETURN
    CALCULATE ( [Count Animals 2], FILTER ( 'List Animals', FIlt = 1 ) )

Ahora puede configurar los objetos visuales utilizando el campo 'Listar animales' [Animal] en el eje y las medidas finales. Cree las segmentaciones con la medida correspondiente para filtrar, y obtendrá este

Un. Sin selección:

noselection.JPG

B. Cualquiera de las rebanadoras seleccionadas:

Sicer t2.JPG

Slicer t1.JPG

c. combinación de rebanadoras

combines slicers.JPG

PS. Si desea mantener el orden de clasificación en los objetos visuales coherente, agregue una columna de índice a la tabla 'List Animals' y ordene la tabla por la columna de índice y los objetos visuales por esa columna de animales.

Sort by index.JPG

He adjuntado el archivo PBIX de muestra para usted

@ggranger

Claro, puede crear relaciones virtuales entre tablas mediante DAX: la función TREATAS es su mejor amigo en este caso.

No estoy muy seguro de lo que está tratando de representar en el gráfico de barras visual aunque (o en la medida en sí). ¿Puede mostrar otro ejemplo con una explicación del resultado previsto?

Syndicate_Admin
Administrator
Administrator

@MFelix Gran solución, pero el único desafío veo que no va a funcionar en la rebanadora con multi-selección por lo que necesita alguna mejora. Sólo mis 2 centavos.

@parry2k usted está en lo cierto, sin embargo hice esto así con el fin de mostrar el error cuando usted tiene la selección y desea filtrar el aumento del número de selecciones aumentará este tipo de error. Pero tienes mucha razón.

Syndicate_Admin
Administrator
Administrator

No @ggranger ,

Esto es posible utilizando la sintaxis siguiente:

Filter_Slicer = if(SELECTEDVALUE(TableA[Animal]) = SELECTEDVALUE(TableB[Animal]), BLANK() , 1)

A continuación, utilice esta medida tiene un filtro en TAble B y seleccione todos los valores no en blanco.

MFelix_0-1611426853424.png

Sin embargo, las segmentaciones de datos tienen una forma especial de trabajar en comparación con otras visualizaciones, por lo que si tiene un valor seleccionado en la segmentación de la tabla B y es el que desea ocultar hasta que seleccione otra opción, el valor seguirá apareciendo.

MFelix_1-1611426875824.png

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.