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

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends September 15. Request your voucher.

Reply
rodg
Frequent Visitor

add members to group with asterisk

Hi,

 

I'm looking for a power query solution to group users in a group.

 

This is my sourcedata :

rodg_0-1735136688590.png

Source = Table.FromRows(
{
{"Eddie*"},
{"Eddie1"},
{"EddieA"},
{"Eddie2ABC"},
{"ADM*"},
{"ADM_5"},
{"Els"}
},
{"Users"}
)

 

I want to group this list based on the suffix *.

If there is no * at the end the groupname should be the same as the username.

 

So something like this :

 

rodg_1-1735137284439.png

 

Can someone point me in the right direction?

 

Thanks

Ronny

 

1 ACCEPTED SOLUTION

let
  Source = Table.FromRows(
    {{"Eddie*"}, {"Eddie1"}, {"EddieA"}, {"Eddie2ABC"}, {"ADM*"}, {"ADM_5"}, {"Els"}, {"Elsje"}}, 
    {"Users"}
  ), 
  group = Table.Group(
    Source, 
    "Users", 
    {"x", (x) => Table.SelectRows(x, (row) => not Text.EndsWith(row[Users], "*"))}, 
    GroupKind.Local, 
    (s, c) => Number.From(not (Text.EndsWith(s, "*") and Text.StartsWith(c, Text.TrimEnd(s, "*"))))
  ), 
  xpand = Table.ExpandTableColumn(group, "x", {"Users"}, {"user"})
in
  xpand

View solution in original post

6 REPLIES 6
AlienSx
Super User
Super User

let
    group = Table.Group(
        Source, 
        "Users",
        {"x", (x) => Table.SelectRows(x, (row) => not Text.EndsWith(row[Users], "*"))}, 
        GroupKind.Local, 
        (s, c) => Number.From(not Text.StartsWith(c, Text.TrimEnd(s, "*")))
    ), 
    xpand = Table.ExpandTableColumn(group, "x", {"Users"}, {"user"})
in
    xpand
rodg
Frequent Visitor

Hi,

If I add an extra record ("Elsje") to the source, the grouping is no longer correct.

Source :

rodg_0-1735198268935.png

 

'Elsje' may not be grouped with 'Els' because 'Elsje' does not end with an asterisk.

Result

rodg_1-1735198499396.png

Desired result

rodg_2-1735198693207.png

 

Any idea how I can solve this?

let
  Source = Table.FromRows(
    {{"Eddie*"}, {"Eddie1"}, {"EddieA"}, {"Eddie2ABC"}, {"ADM*"}, {"ADM_5"}, {"Els"}, {"Elsje"}}, 
    {"Users"}
  ), 
  group = Table.Group(
    Source, 
    "Users", 
    {"x", (x) => Table.SelectRows(x, (row) => not Text.EndsWith(row[Users], "*"))}, 
    GroupKind.Local, 
    (s, c) => Number.From(not Text.StartsWith(c, Text.TrimEnd(s, "*")))
  ), 
  xpand = Table.ExpandTableColumn(group, "x", {"Users"}, {"user"})
in
  xpand

 

 

Thx

Hi @rodg, similar solution but with different logic in 5th argument of Table.Group

 

Output

dufoq3_0-1735246050736.png

 

let
    Source = Table.FromRows({{"Eddie*"},{"Eddie1"},{"EddieA"},{"Eddie2ABC"},{"ADM*"},{"ADM_5"},{"Els"},{"Elsje"}},{"Users"}),
    GroupedRows = Table.Group(Source, "Users", {{"T", each Table.FillDown(Table.FromColumns({{[Users]{0}?}, if Table.RowCount(_) = 1 then {[Users]{0}?} else List.Skip([Users])}, type table[UserGroup=text, User=text]), {"UserGroup"}), type table }}, 0,
        (x,y)=> [ a = Text.PositionOf(x, "*"),
                  b = if a = -1 then Value.Compare(y, x) else Value.Compare(Text.Start(y, a), Text.Start(x, a))
                ][b] ),
    T = Table.Combine(GroupedRows[T])
in
    T

 


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

rodg
Frequent Visitor

Hi @dufoq3 

 

Thanks for your solution.
But to be honest, I find the custom functions hard to understand. So I solved it with some extra steps.
Maybe not as elegant but, for now, easier to understand. 😉

thx

Ronny

let
  Source = Table.FromRows(
    {{"Eddie*"}, {"Eddie1"}, {"EddieA"}, {"Eddie2ABC"}, {"ADM*"}, {"ADM_5"}, {"Els"}, {"Elsje"}}, 
    {"Users"}
  ), 
  group = Table.Group(
    Source, 
    "Users", 
    {"x", (x) => Table.SelectRows(x, (row) => not Text.EndsWith(row[Users], "*"))}, 
    GroupKind.Local, 
    (s, c) => Number.From(not (Text.EndsWith(s, "*") and Text.StartsWith(c, Text.TrimEnd(s, "*"))))
  ), 
  xpand = Table.ExpandTableColumn(group, "x", {"Users"}, {"user"})
in
  xpand
ZhangKun
Super User
Super User

let
    Source = Table.FromRows({{"Eddie*"},{"Eddie1"},{"EddieA"},{"Eddie2ABC"},{"ADM*"},{"ADM_5"},{"Els"}},{"Users"}),
    Group = Table.Group(Source, {"Users"}, {{"tbl", each Table.Skip(_, 1)}}, GroupKind.Local, (x, y) => Number.From(Text.EndsWith(y[Users], "*"))),
    ExpandTable = Table.ExpandTableColumn(Group, "tbl", {"Users"}, {"Users.1"})
in
    ExpandTable

Helpful resources

Announcements
August Power BI Update Carousel

Power BI Monthly Update - August 2025

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

August 2025 community update carousel

Fabric Community Update - August 2025

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

Top Solution Authors
Top Kudoed Authors