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

Get inspired! Check out the entries from the Power BI DataViz World Championships preliminary rounds and give kudos to your favorites. View the vizzies.

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
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code FABINSIDER for a $400 discount!

FebPBI_Carousel

Power BI Monthly Update - February 2025

Check out the February 2025 Power BI update to learn about new features.

March2025 Carousel

Fabric Community Update - March 2025

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

Top Solution Authors
Top Kudoed Authors