Encontrar atributos comunes entre dos conjuntos de datos diferentes

Un usuario Pregunto ✅

Naunidh

Tengo dos conjuntos de datos, Grupo A y Grupo B, como se muestra a continuación.

Grupo A Desayuno Almuerzo Cena GrupoB Desayuno Almuerzo Cena
A1 Cereal Pasta Vegetales B1 Cereal Pasta Vegetales
A2 Huevos Comida rápida Carne B2 Fruta Comida rápida Pan de molde
A3 Fruta Arroz Pan de molde B3 Cereal Comida rápida Carne
A4 Cereal Emparedado Carne B4 Huevos Emparedado Pan de molde

Me gustaría poder definir una relación entre los miembros del grupo A y el grupo B. Por ejemplo, si elijo un miembro del Grupo A, digamos A1, me gustaría saber qué tan similar es a cada miembro del Grupo B En este caso, A1 es exactamente como B1, ya que las tres categorías coinciden; en este caso, la fuerza de la relación es 3. Pero A1 es muy diferente de B4, donde la fuerza de la relación es 0. Así que me gustaría tener 1) la fuerza de la relación ( 0 rto 3) y 2) detalles de la relación, es decir, qué campos son comunes.

Gracias de antemano por su ayuda Comunidad.

TomMartens

Hola @Naunidh,

Creé dos tablas Tabla A y Tabla B

Creé 2 medidas (buscando A en B), solo creo medidas adicionales para el revés.

Estas son mis medidas:

level of similarity = 
IF( HASONEVALUE( 'TableA'[GroupA] )

    , IF( HASONEVALUE( 'TableB'[GroupB] )
        , var searchstring = 
            CONCATENATEX(
                'TableA'
                , COMBINEVALUES( "|", 'TableA'[Breakfast] , 'TableA'[Lunch] , 'TableA'[Dinner] )
                , "|"
            )
        return
            SUMX(
                'TableB'
                , var stringToCompare = COMBINEVALUES( "|", 'TableB'[Breakfast] , 'TableB'[Lunch] , 'TableB'[Dinner] )
                var lengthSearch = PATHLENGTH( searchstring )
                var t =
                    ADDCOLUMNS( 
                        GENERATESERIES( 1 , lengthSearch , 1 )
                        , "isfound" , IF( PATHCONTAINS( stringToCompare , PATHITEM( searchstring , [Value] ) ) , 1 , 0 )
                    )
                return
                SUMX( t , [isfound] )
            )
        , BLANK()
    )
, "Select one item from Group A"
)

y

similar items = 
IF( HASONEVALUE( 'TableA'[GroupA] )
    , IF( HASONEVALUE( 'TableB'[GroupB] )
        , var searchstring = 
            CONCATENATEX(
                'TableA'
                , COMBINEVALUES( "|", 'TableA'[Breakfast] , 'TableA'[Lunch] , 'TableA'[Dinner] )
                , "|"
            )
        return
            CONCATENATEX(
                'TableB'
                , var stringToCompare = COMBINEVALUES( "|", 'TableB'[Breakfast] , 'TableB'[Lunch] , 'TableB'[Dinner] )
                var lengthSearch = PATHLENGTH( searchstring )
                var t =
                    ADDCOLUMNS( 
                        GENERATESERIES( 1 , lengthSearch , 1 )
                        , "founditem" , IF( PATHCONTAINS( stringToCompare , PATHITEM( searchstring , [Value] ) ) , PATHITEM( searchstring , [Value] ) , BLANK() )
                    )
                return
                CONCATENATEX( t , [founditem] , ", " )
            )
        , BLANK()
    )
, "Select one item from Group A"
)

Esto permite crear este informe:

image.png

Con suerte, esto proporciona algunas ideas sobre cómo abordar su desafío.

Saludos,

Tomás

TomMartens

Hola @Naunidh,

Creé dos tablas Tabla A y Tabla B

Creé 2 medidas (buscando A en B), solo creo medidas adicionales para el revés.

Estas son mis medidas:

level of similarity = 
IF( HASONEVALUE( 'TableA'[GroupA] )

    , IF( HASONEVALUE( 'TableB'[GroupB] )
        , var searchstring = 
            CONCATENATEX(
                'TableA'
                , COMBINEVALUES( "|", 'TableA'[Breakfast] , 'TableA'[Lunch] , 'TableA'[Dinner] )
                , "|"
            )
        return
            SUMX(
                'TableB'
                , var stringToCompare = COMBINEVALUES( "|", 'TableB'[Breakfast] , 'TableB'[Lunch] , 'TableB'[Dinner] )
                var lengthSearch = PATHLENGTH( searchstring )
                var t =
                    ADDCOLUMNS( 
                        GENERATESERIES( 1 , lengthSearch , 1 )
                        , "isfound" , IF( PATHCONTAINS( stringToCompare , PATHITEM( searchstring , [Value] ) ) , 1 , 0 )
                    )
                return
                SUMX( t , [isfound] )
            )
        , BLANK()
    )
, "Select one item from Group A"
)

y

similar items = 
IF( HASONEVALUE( 'TableA'[GroupA] )
    , IF( HASONEVALUE( 'TableB'[GroupB] )
        , var searchstring = 
            CONCATENATEX(
                'TableA'
                , COMBINEVALUES( "|", 'TableA'[Breakfast] , 'TableA'[Lunch] , 'TableA'[Dinner] )
                , "|"
            )
        return
            CONCATENATEX(
                'TableB'
                , var stringToCompare = COMBINEVALUES( "|", 'TableB'[Breakfast] , 'TableB'[Lunch] , 'TableB'[Dinner] )
                var lengthSearch = PATHLENGTH( searchstring )
                var t =
                    ADDCOLUMNS( 
                        GENERATESERIES( 1 , lengthSearch , 1 )
                        , "founditem" , IF( PATHCONTAINS( stringToCompare , PATHITEM( searchstring , [Value] ) ) , PATHITEM( searchstring , [Value] ) , BLANK() )
                    )
                return
                CONCATENATEX( t , [founditem] , ", " )
            )
        , BLANK()
    )
, "Select one item from Group A"
)

Esto permite crear este informe:

image.png

Con suerte, esto proporciona algunas ideas sobre cómo abordar su desafío.

Saludos,

Tomás

Amitchandak

@Naunidh, puedes crear una tabla como

A B

A1 B1

A2 B2

Únase con la tabla 1 en el GrupoA y la tabla 2 en el Grupob y luego puede ver o filtrar (dropdown) y luego juntos

Naunidh

En respuesta a Amitchandak

Gracias Amit. Espero que mis dos tablas tengan miles de filas. y me gustaría seleccionar un miembro del Grupo A o B y ver cómo ese elemento se relaciona con todos los elementos individuales o con el Grupo opuesto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *