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
Jenni-Sky
Helper I
Helper I

Comparar dos columnas y comprobar si hay coincidencia parcial

Hola

Tengo una tabla de datos que incluye una columna "Nombre del cliente" y una columna "Cliente de factura".

Estoy buscando crear una columna "Coincidir", para comprobar si el nombre del cliente y el nombre de la factura coinciden o coinciden parcialmente, o si no coinciden.

Esto es lo que me gustaría lograr:

Nombre del clienteCliente de facturasPartido
Seguro de elefantesSeguro de elefantesPartido
Fabricantes de papelImpresoras verdes Sin partido
Ratón 3D3dmousePartido parcial
Universidad AleatoriaUni aleatorioPartido parcial
Universidad de HillUniversidad de HillPartido parcial

Estoy buscando una manera de comparar las dos columnas para ver si hay una coincidencia o una coincidencia parcial.

Aprecio que es poco probable que siempre reconozca las coincidencias parciales, pero sería muy útil si hubiera una manera de identificar algunos de los valores similares.

Gracias de antemano!

1 ACCEPTED SOLUTION
v-alq-msft
Community Support
Community Support

Hola, @Jenni-Sky

Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

Mesa:

b1.png

Puede crear una columna calculada como se muestra a continuación.

Match = 
var _cname = 'Table'[Customer Name]
var _iname = 'Table'[Invoice Customer]
var _firstname = LEFT(_cname,SEARCH(" ",_cname)-1)
var _lastname = MID(_cname,SEARCH(" ",_cname)+1,LEN(_cname))
return
IF(
    EXACT([Customer Name],[Invoice Customer]),
    "Match",
    IF(
           NOT(CONTAINSSTRING(_iname,_firstname))&&NOT(CONTAINSSTRING(_iname,_lastname)),
           "Not Match",
           IF(
               CONTAINSSTRING(_iname,_firstname)||CONTAINSSTRING(_iname,_lastname),
               "Partial Match"
           )
    )
)

Resultado:

b2.png

Saludos

Allan

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

6 REPLIES 6
v-alq-msft
Community Support
Community Support

Hola, @Jenni-Sky

Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

Mesa:

b1.png

Puede crear una columna calculada como se muestra a continuación.

Match = 
var _cname = 'Table'[Customer Name]
var _iname = 'Table'[Invoice Customer]
var _firstname = LEFT(_cname,SEARCH(" ",_cname)-1)
var _lastname = MID(_cname,SEARCH(" ",_cname)+1,LEN(_cname))
return
IF(
    EXACT([Customer Name],[Invoice Customer]),
    "Match",
    IF(
           NOT(CONTAINSSTRING(_iname,_firstname))&&NOT(CONTAINSSTRING(_iname,_lastname)),
           "Not Match",
           IF(
               CONTAINSSTRING(_iname,_firstname)||CONTAINSSTRING(_iname,_lastname),
               "Partial Match"
           )
    )
)

Resultado:

b2.png

Saludos

Allan

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

MFelix
Super User
Super User

Hola @Jenni-Sky

He respondido a una pregunta similar en el siguiente post:

https://community.powerbi.com/t5/Desktop/Matching-and-returning-a-list-of-all-matching-words-within-...

esta respuesta se basó en la entrada del blog a continuación:

https://radacad.com/quick-dax-word-count

https://powerpivotpro.com/2014/01/containsx-finding-if-a-value-in-table-1-has-a-matching-value-in-ta...

Mirando a usted problema concreto lo que puede hacer es la siguiente columna:

Output to a Table = 
VAR Sentence = 'FInd'[Customer Name]
VAR SentenceCleaned = " " & Sentence & " "
VAR LengthOfSentence = LEN(SentenceCleaned)
VAR PivotedSentence  = 
    ADDCOLUMNS(
        GENERATESERIES(1,LengthOfSentence) ,
        "Letter" , 
        MID(SentenceCleaned,[Value],1)
    )  
var Boundaries = 
  ADDCOLUMNS(
    PivotedSentence ,
    "PrevSpace", MAXX(FILTER(PivotedSentence ,''[Value] < EARLIER([Value]) && [Letter] = " "),[Value]) + 1,
    "NextSpace", MINX(FILTER(PivotedSentence ,''[Value] > EARLIER([Value]) && [Letter] = " "),[Value]) - 1 
       )
VAR TableOfWords =        
    SELECTCOLUMNS(
        SUMMARIZE(
             FILTER(Boundaries, not [Letter] IN {" "}) ,
            [PrevSpace]
            ),"Word Position",[PrevSpace]
            ) 
    
VAR TableOfWords2 = 
    ADDCOLUMNS(
        TableOfWords,
        "Word",
        CONCATENATEX(
            FILTER(
                Boundaries,[PrevSpace]=[Word Position]),
                [Letter],
                ,
                [Value]
                )
        )
       
RETURN 
iF('FInd'[Customer Name] = 'FInd'[Invoice Customer], "Match",
IF(
      SUMX(TableOfWords2,
           SEARCH(
                upper(TRIM([Word])),
                upper(TRIM('FInd'[Invoice Customer]))
                ,,0
               )
          ) 
> 0,
      "Partial Match",
      "No Match"
     ))

Compruebe la conexión del archivo PBIX.


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog: Power BI em Português



amitchandak
Super User
Super User

Gracias por este @amitchandak , ya he visto este recurso, sin embargo se refiere a unirse a dos tablas diferentes. Mis datos ya están en la misma tabla y solo quiero comparar dentro de la fila. Estaba luchando para ver cómo aplicar el recurso a mi situación.

@Jenni-Sky, Inténtalo como. Es posible que debas realizar algunos cambios en la condición 2. Una nueva columna

Switch ( True(),
containsstring([Nombre del cliente],[Cliente de factura]) , "Coincidir"
SEARCH(left([Customer Name],SEARCH(" ",[Customer Name],1,0)-1) ,[Cliente de factura],1,0)>0
|| SEARCH(left([Cliente de factura],SEARCH(" ",[Cliente de factura],1,0)-1) ,[Nombre del cliente],1,0) >0 ,"Coincidencia parcial",
"Sin coincidencia")

ToddChitt
Super User
Super User

Para un martillo, el mundo de es un clavo

Apuesto a que obtendrá algunas respuestas de tipo "nail" en este foro de Power BI porque todos aquí son un martillo.

Pero en realidad, Power BI no es la herramienta para esto. Prueba Coincidencia aproximada en SSIS. O si lo tiene en una base de datos SQL, tal vez pueda escribir código que iterará sobre los dos conjuntos de datos en busca de similitudes, tal vez usando expresiones regulares y similares.

Pero en realidad, le estás pidiendo a la gente de martillos y clavos una solución cuando realmente necesitas un electricista. 🙂




Did I answer your question? If so, mark my post as a solution. Also consider helping someone else in the forums!

Proud to be a Super User!





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.