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

Vote for your favorite vizzies from the Power BI Dataviz World Championship submissions. Vote now!

Reply
Syndicate_Admin
Administrator
Administrator

Creación de una segmentación de datos que filtre los datos de forma dinámica

Ayer envié una pregunta para esto con algunas soluciones útiles, pero estoy recibiendo otro golpe para explicar mejor mi situación. El conjunto de datos incluye registros primarios y alternativos (sub) con atributos rellenados para todos los registros. Estoy buscando una solución que permita al usuario ver cómo cambia la composición general a través de elementos visuales (gráficos circulares/gráficos de barras) si un solo primario se reemplaza por una alternativa (sub). La solución a mi primera pregunta me permite crear una medida que rellena un campo dentro de una tabla/matriz que logra esto. Sin embargo, una medida no se puede usar como cortadora, así que aquí está mi segundo intento en esto.

Mesa base

IDENTIFICACIÓN

Nombre

LlaveAtributo/ColorSi es primario - tiene subEn venta
1LuluPrimarioRojo
1CaitlinSubAzulNoNo
1AsheSubAmarilloNo
2HiloPrimarioNaranjaNoNo
3AmapolaPrimarioNegroNoNo
4VeigarPrimarioBlanco
4LuxSubRojoNo
5SorakaPrimarioAzulNo
6PoroPrimarioAmarilloNo
6AkshanSubNaranjaNoNo
6MundoSubNegroNoNo

Tabla desconectada = calculatetable(summarize('Tabla principal','Tabla principal'[Nombre]),filter('Tabla principal','Tabla principal'[Si es principal - tiene sub]="Sí"))

Nombre
Lulu
Veigar
Poro

Slicer1 = 'Tabla desconectada'[Nombre]
Segmentación deseada = Muestra nombres en los que el ID coincide con el de la selección de Segmentación1, por ejemplo, si Segmentación1 = "Lulu", entonces 'Lulu', 'Caitlin', 'Ashe' está disponible para la selección

Resultado deseado: 1) rellena el registro seleccionado en la segmentación deseada excluyendo todos los demás registros en los que el ID coincide con el de la selección de Slicer1, 2) rellene todos los registros en los que Key = 'Primary' donde el ID no coincida con la selección de Slicer1 e incluya todos los sub

Si Slicer1 = 'Lulu' y Desired Slicer='Caitlin', rellena la tabla para incluir solo Caitlin donde ID = 1, de lo contrario, si key = 'Primary' include, else exclude

Tabla principal filtrada if Slicer1 = "Lulu" & Slicer deseado = 'Caitlin'

IDENTIFICACIÓNNombreLlaveAtributo/ColorSi es primario - tiene subEn venta
1CaitlinSubAzulNoNo
2HiloPrimarioNaranjaNoNo
3AmapolaPrimarioNegroNoNo
4VeigarPrimarioBlanco
5SorakaPrimarioAzulNo
6PoroPrimarioAmarilloNo

Tabla principal filtrada si Slicer1 = "Lulu" & Segmentación deseada = 'Lulu'

IDENTIFICACIÓNNombreLlaveAtributo/ColorSi es primario - tiene subEn venta
1LuluPrimarioRojo
2HiloPrimarioNaranjaNoNo
3AmapolaPrimarioNegroNoNo
4VeigarPrimarioBlanco
5SorakaPrimarioAzulNo
6PoroPrimarioAmarilloNo

Tabla principal filtrada if Slicer1 = "Lulu" & Slicer deseado = 'Ashe'

IDENTIFICACIÓNNombreLlaveAtributo/ColorSi es primario - tiene subEn venta
1AsheSubAmarilloNo
2HiloPrimarioNaranjaNoNo
3AmapolaPrimarioNegroNoNo
4VeigarPrimarioBlanco
5SorakaPrimarioAzulNo
6PoroPrimarioAmarilloNo

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Hola @otto-usuario101 ,

Por favor, inténtalo de esta manera:
Primero uso este DAX para crear una nueva tabla para crear Desired Slicer:

Desired Slicer = SELECTCOLUMNS (
    'Primary Table',
    "ID", 'Primary Table'[ID],
    "Name", 'Primary Table'[Name]
)

vjunyantmsft_0-1704077475049.png


A continuación, creo una medida con este DAX en la tabla Desired Slicer:

Measure = 
VAR A = CALCULATE(
    MAX('Desired Slicer'[ID]),
    FILTER(
        ALLSELECTED('Desired Slicer'),
        'Desired Slicer'[Name] = SELECTEDVALUE('Disconnected Table'[Name])
    )
)
RETURN

IF(
    ISFILTERED('Desired Slicer'), 
    IF(
        SELECTEDVALUE('Desired Slicer'[ID]) = A,
        1,
        0
    ),
    0
)

vjunyantmsft_1-1704077594513.png

Y se crea el Desired Slicer , lo siento, no cambié el nombre, puedes cambiarlo tú mismo:

vjunyantmsft_2-1704077622149.png

A continuación, creo una medida con DAX que se muestra a continuación en la tabla principal:

Measure 2 = 
VAR A = CALCULATE(
    MAX('Primary Table'[ID]),
    FILTER(
        ALLSELECTED('Primary Table'),
        'Primary Table'[Name] = SELECTEDVALUE('Disconnected Table'[Name])
    )
)
RETURN
IF(
    //ISFILTERED('Primary Table'),
    ISFILTERED('Desired Slicer'[Name]) && ISFILTERED('Disconnected Table'[Name]),
    IF(
        SELECTEDVALUE('Primary Table'[Name]) = SELECTEDVALUE('Desired Slicer'[Name]),
        1,
        IF(
            SELECTEDVALUE('Primary Table'[ID]) <> A && SELECTEDVALUE('Primary Table'[Key]) = "Primary",
            1,
            0
        )
    ),
    0
)

vjunyantmsft_3-1704077800779.png

El resultado final se muestra a continuación:

vjunyantmsft_4-1704077858729.png

vjunyantmsft_5-1704077866233.png

vjunyantmsft_6-1704077873209.png


Saludos
Dino Tao
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

Para cualquiera que busque lograr lo mismo en Power BI, utilicé la combinación cruzada para crear una copia de la tabla base y, a continuación, creé una columna personalizada para que sirviera como campo de segmentación.

Syndicate_Admin
Administrator
Administrator

DAX no permite el filtrado directo entre tablas sin una relación, la lógica dice que es necesario establecer una conexión.
Una forma de hacerlo es crear una columna en la tabla principal que coincida con los valores de la tabla desconectada.

Puede crear una nueva columna en la tabla principal que identifique si el registro está relacionado con uno de los nombres de la tabla desconectada. Puede ser un indicador booleano simple (Verdadero/Falso).

A continuación, ceate medidas que filtran dinámicamente la tabla principal en función de la selección de Slicer1 y la segmentación deseada.

Use estas medidas en los objetos visuales para reflejar los cambios en función de las selecciones de segmentación.

No tengo tu modelo, así que me estoy imaginando algo como esto:

Connected Column =
IF(
'Primary Table'[Name] IN VALUES('Disconnected Table'[Name]),
TRUE(),
FALSE()
)

Filtered Data Measure =
VAR selectedPrimary = SELECTEDVALUE('Disconnected Table'[Name])
VAR selectedSub = SELECTEDVALUE('Primary Table'[Name], "All")
RETURN
CALCULATE(
COUNTROWS('Primary Table'),
FILTER(
'Primary Table',
IF(
'Primary Table'[Key] = "Primary" && 'Primary Table'[Connected Column] = TRUE(),
'Primary Table'[Name] = selectedPrimary || selectedSub = "All",
'Primary Table'[Key] = "Primary"
)
)
)

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

Vote for your favorite vizzies from the Power BI World Championship submissions!

Sticker Challenge 2026 Carousel

Join our Community Sticker Challenge 2026

If you love stickers, then you will definitely want to check out our Community Sticker Challenge!

January Power BI Update Carousel

Power BI Monthly Update - January 2026

Check out the January 2026 Power BI update to learn about new features.

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.

Top Kudoed Authors
Users online (10,592)