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

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
ABR002
Helper I
Helper I

Match Wildcard via Relationship or Merge

So I've found some topics on this subject but none seem to pertain to my exact situation. I have 2 tables with codes in ABC-####-##### format. On one there is only one value per cell, but on the other table there are between 1 and 40 values per cell. The only thing I can think of is to do a split by delimiter and then merge each column back into one, making multiple rows of the other columns but that seems like it will be pretty messy. Is there a better way? 

I tried a merge using fuzzy matching and that actually worked pretty well, until I came across some codes that were different by only one digit (see below). I altered the similarity threshold, but it literally goes from All to nothing. Heres an example of the 2 tables, green should link to green and blue should link to blue, but the red code is linking to the blue code which I don't want:

Table 1

Row NumberTable 1 Code
1ABC-2002-23456
2ABC-2002-45454
3ABC-2005-55555
4ABC-2006-22222

 

Table 2

Row NumberTable 2 Code
1ABC-2002-33333, ABC-2002-44444, ABC-2005-23456, ABC-2001-98765
2ABC-2004-77777, ABC-2005-44444, ABC-2002-23456
3ABC-2004-88888, ABC-2005-55555, ABC-2002-23456

 

So what I would want is to have row 1 on table 1 somehow match (via merge or relationship) to rows 2 and 3 on table 2, but NOT row 1, and also row 3 on table 1 to row 3 on table 2. The issue I ran into with fuzzy matching was that it was linking with row 1 because there's a code (red) that only has a 1 digit difference, and there's when I change the threshold it goes from matching what I want and don't want to not matching anything at all. Here is my desired outcome, which again if there's a way to do a relationship on the front end that's fine too:

Table 1 Row NumberTable 2 Row NumberTable 1 CodeTable 2 Code
12ABC-2002-23456ABC-2004-77777, ABC-2005-44444, ABC-2002-23456
13ABC-2002-23456ABC-2004-88888, ABC-2005-55555, ABC-2002-23456
33ABC-2005-55555ABC-2004-88888, ABC-2005-55555, ABC-2002-23456
1 ACCEPTED SOLUTION
Omid_Motamedise
Super User
Super User

Consider this table as your second table in power query.

Omid_Motamedise_0-1725575158256.png



select column code and go to transform tab and pick split column by delimiter and use "," as delimiter to reach the next table

Omid_Motamedise_1-1725575259251.png

 

 

now right click on the column row number table 2 and pick unpivot other columns to reach the next table

 

Omid_Motamedise_2-1725575299246.png

 

 

you do not need column attribute, by reming this, you reached a tablel apporopriate for merging by the first om

If my answer helped solve your issue, please consider marking it as the accepted solution. It helps others in the community find answers faster—and keeps the community growing stronger!
You can also check out my YouTube channel for tutorials, tips, and real-world solutions in Power Query with the following link
https://youtube.com/@omidbi?si=96Bo-ZsSwOx0Z36h

View solution in original post

4 REPLIES 4
AlienSx
Super User
Super User

let
    load = (table_name) => Excel.CurrentWorkbook(){[Name = table_name]}[Content],
    tbl_1 = List.Buffer(Table.ToRows(load("Table1"))),
    tx = Table.ToList(
        load("Table2"), 
        (x) => ((w) => if w = -1 then {} else List.Transform(w, (z) => tbl_1{z} & x))
        (List.PositionOf(tbl_1, x{1}, Occurrence.All, (c, v) => Text.Contains(v, c{1})))
    ),
    result = Table.FromRows(List.Combine(tx), {"row 1", "code 1", "row 2", "code 2"})
in
    result
PwerQueryKees
Super User
Super User

split, (trim the result), merge and (possibly) group by is your way forward....

Omid_Motamedise
Super User
Super User

Consider this table as your second table in power query.

Omid_Motamedise_0-1725575158256.png



select column code and go to transform tab and pick split column by delimiter and use "," as delimiter to reach the next table

Omid_Motamedise_1-1725575259251.png

 

 

now right click on the column row number table 2 and pick unpivot other columns to reach the next table

 

Omid_Motamedise_2-1725575299246.png

 

 

you do not need column attribute, by reming this, you reached a tablel apporopriate for merging by the first om

If my answer helped solve your issue, please consider marking it as the accepted solution. It helps others in the community find answers faster—and keeps the community growing stronger!
You can also check out my YouTube channel for tutorials, tips, and real-world solutions in Power Query with the following link
https://youtube.com/@omidbi?si=96Bo-ZsSwOx0Z36h
dufoq3
Super User
Super User

Hi @ABR002, it is not a mistake to split by delimiter and merge (which creates duplicated rows), but you can delete them afterwards. You can compare query speed with this (without merge):

 

Output

dufoq3_0-1725567780369.png

let
    Table1 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Tci5DQAgDATBXi7GEhw2OVCG5f7b4ElgNxt3FCT0MYU5U1jVGiI5+LPa/nJ9bGKny/q4CU+IWA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Row Number" = _t, #"Table 1 Code" = _t]),
    Table2 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZYxBDoAgDMC+YnbeEhgb4FF8BuH/3zDTZM7YWw/tnJAB4RgncUpMxcDNXQx3JS6i1T3T3ltVWDiB341QM0L23fCzubMSs26ETI1/ti4=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Row Number" = _t, #"Table 2 Code" = _t]),
    T2_Ad_Helper = Table.AddColumn(Table2, "Helper", each List.Transform(Text.Split([Table 2 Code], ","), Text.Trim), type list),
    T2_Buffered = Table.Buffer(T2_Ad_Helper),
    T1_Ad_T2 = Table.AddColumn(Table1, "T2", each Table.SelectRows(T2_Buffered, (x)=> List.Contains(x[Helper], [Table 1 Code])), type table),
    ExpandedT2 = Table.ExpandTableColumn(T1_Ad_T2, "T2", {"Row Number", "Table 2 Code"}, {"Table2 Row Number", "Table 2 Code"}),
    FilteredRows = Table.SelectRows(ExpandedT2, each ([Table2 Row Number] <> null))
in
    FilteredRows

Note: Check this link to learn how to use my query.
Check this link if you don't know how to provide sample data.

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

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

May 2025 Monthly Update

Fabric Community Update - May 2025

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