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

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Learn more

Reply
Anonymous
Not applicable

Vlookup for any member of comma separated list in a different table

Hello everyone,

 

I am facing the below business case, and I have trouble finding a solution behind it.

 

Business Case

I have a Table 1 [Changes], where I have a specific Column A [Countries]

Column [Countries] can have different values either single values i.e. Total Europe or multiple, comma separated values i.e. Poland, Denmark, Spain. Structure of the table is as per below

 

ID              Change                    Countries

1                  XYZ                      Total Europe

2                  ABC                Poland, Denmark, Spain

There is a Table 2 [Segmentation], where each of the above countries takes a value, either BIG/SMALL/ALL

ID              Country                Attribute

1                Poland                     BIG

2                 Spain                    SMALL

3              Denmark                    BIG

4           Total Europe                 ALL

 

What I want PowerBI to do is the following:

For each row of the Table 1, check where the value of Column Countries belongs by vlookingup Table 2.

                - If Table 1 [Countries] = Total Europe, use "ALL"

                - If Table 1 [Countries] = Spain, use "SMALL"

                - If Table 1 [Countries] = Poland, use "BIG"

                - If Table 1 [Countries] = Denmark, Poland, Spain, use "ALL" (values belong in both categories)

I have found the respective solutions for Excel here
I can't figure it out though on PowerBI.... any ideas?

 

Thank you!!!

1 ACCEPTED SOLUTION

Hey @Anonymous ,

 

I guess you mean if there would be a row "Spain, Switzerland" for example and both would have the attribute "SMALL"?

You would have to check when there is a comma if all the values have the same attribute.
Check the following measure:

Country Attribute = 
// Check if there is a direct match from Countries to Country
VAR vDirectMatch =
    LOOKUPVALUE(
        'Table 2'[Attribute],
        'Table 2'[Country], 'Table 1'[Countries]
    )

// Check if by comma separated values have the same attribute
VAR vCurrentRowCountry = 'Table 1'[Countries]
VAR vMatchTable =
    ADDCOLUMNS (
        SUMMARIZE ( 'Table 2', 'Table 2'[Country], 'Table 2'[Attribute] ),
        "@CountryExists", IFERROR ( SEARCH ( 'Table 2'[Country], vCurrentRowCountry ), BLANK () )
    )
VAR vFilteredMatchTable =
    SUMMARIZE (
        FILTER ( vMatchTable, [@CountryExists] <> BLANK () ),
        'Table 2'[Attribute]
    )
VAR vCheckOneValue = MAXX ( vFilteredMatchTable, 'Table 2'[Attribute] )

// Check if country contains a comma and set to ALL
VAR vSearch =
    IFERROR(
        SEARCH(
            ",",
            'Table 1'[Countries]
        ),
        BLANK()
    )

// Return correct value
RETURN
    SWITCH(
        TRUE(),
        vDirectMatch <> BLANK(), vDirectMatch, -- if there is a direct match
        COUNTROWS ( vFilteredMatchTable ) = 1, vCheckOneValue, -- if multiple countries have same attribute
        vSearch <> BLANK(), "ALL" -- if countries contains comma, return "ALL"
    )

 

If you need any help please let me know.
If I answered your question I would be happy if you could mark my post as a solution ✔️ and give it a thumbs up 👍
 
Best regards
Denis
 

View solution in original post

5 REPLIES 5
Anonymous
Not applicable

@selimovd,

I don't know how to thank you enough!!! Not only for providing the solution, but also building a new logic, that I can reapply across - SIMPLY THANK YOU!!!!!!

Hey @Anonymous ,

 

you're welcome 😊

I'm happy you can use that solution for future approaches and maybe understand DAX a little better.

 

Best regards

Denis

Anonymous
Not applicable

@selimovd 

WOW!!! This works PERFECTLY!!!! there is one minor point: what happens when I have multiple values, which belong to the same group? For example I have 2 "SMALL", which are comma separated?

You can also guide me and I will try to build the code 😉

Hey @Anonymous ,

 

I guess you mean if there would be a row "Spain, Switzerland" for example and both would have the attribute "SMALL"?

You would have to check when there is a comma if all the values have the same attribute.
Check the following measure:

Country Attribute = 
// Check if there is a direct match from Countries to Country
VAR vDirectMatch =
    LOOKUPVALUE(
        'Table 2'[Attribute],
        'Table 2'[Country], 'Table 1'[Countries]
    )

// Check if by comma separated values have the same attribute
VAR vCurrentRowCountry = 'Table 1'[Countries]
VAR vMatchTable =
    ADDCOLUMNS (
        SUMMARIZE ( 'Table 2', 'Table 2'[Country], 'Table 2'[Attribute] ),
        "@CountryExists", IFERROR ( SEARCH ( 'Table 2'[Country], vCurrentRowCountry ), BLANK () )
    )
VAR vFilteredMatchTable =
    SUMMARIZE (
        FILTER ( vMatchTable, [@CountryExists] <> BLANK () ),
        'Table 2'[Attribute]
    )
VAR vCheckOneValue = MAXX ( vFilteredMatchTable, 'Table 2'[Attribute] )

// Check if country contains a comma and set to ALL
VAR vSearch =
    IFERROR(
        SEARCH(
            ",",
            'Table 1'[Countries]
        ),
        BLANK()
    )

// Return correct value
RETURN
    SWITCH(
        TRUE(),
        vDirectMatch <> BLANK(), vDirectMatch, -- if there is a direct match
        COUNTROWS ( vFilteredMatchTable ) = 1, vCheckOneValue, -- if multiple countries have same attribute
        vSearch <> BLANK(), "ALL" -- if countries contains comma, return "ALL"
    )

 

If you need any help please let me know.
If I answered your question I would be happy if you could mark my post as a solution ✔️ and give it a thumbs up 👍
 
Best regards
Denis
 
selimovd
Super User
Super User

Hey @Anonymous ,

 

try the following calculated column. When there are multiple values separated by a comma it will return "ALL" and otherwise the related attribute:

Country Attribute =
VAR vDirectMatch =
    LOOKUPVALUE(
        'Table 2'[Attribute],
        'Table 2'[Country], 'Table 1'[Countries]
    )
VAR vSearch =
    IFERROR(
        SEARCH(
            ",",
            'Table 1'[Countries]
        ),
        BLANK()
    )
RETURN
    SWITCH(
        TRUE(),
        vDirectMatch <> BLANK(), vDirectMatch,
        vSearch <> BLANK(), "ALL"
    )

 

If you need any help please let me know.
If I answered your question I would be happy if you could mark my post as a solution ✔️ and give it a thumbs up 👍
 
Best regards
Denis
 

Helpful resources

Announcements
Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 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 Solution Authors