Advance your Data & AI career with 50 days of live learning, dataviz contests, hands-on challenges, study groups & certifications and more!
Get registeredGet Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Learn more
Hi there,
Say I have the below list of Points awarded at Hogwarts in a given month, along with the Student who earned them. Gryffindor has 6 unique Students earing Points, Slytherin 3, Ravenclaw 2 and Hufflepuff 1.
Does anyone know how I can group and count the Houses by the number of unique Students earning Points that month?
Desired output table:
| House size (Points-earning Students) | Count of Houses |
| 1 student | 1 |
| 2 students | 1 |
| 3 or more students | 2 |
Data set:
| Date | House | Points | Student |
| 6-Mar | Slytherin | 60 | Draco |
| 7-Mar | Gryffindor | 40 | Lee |
| 7-Mar | Slytherin | 90 | Vincent |
| 9-Mar | Gryffindor | 10 | Harry |
| 10-Mar | Hufflepuff | 20 | Cedric |
| 11-Mar | Gryffindor | 20 | Ginny |
| 12-Mar | Slytherin | 70 | Pansy |
| 13-Mar | Gryffindor | 10 | Neville |
| 13-Mar | Gryffindor | 70 | Hermione |
| 13-Mar | Gryffindor | 70 | Ron |
| 16-Mar | Ravenclaw | 40 | Luna |
| 16-Mar | Ravenclaw | 50 | Padma |
| 18-Mar | Gryffindor | 70 | Ron |
| 19-Mar | Ravenclaw | 40 | Luna |
| 19-Mar | Ravenclaw | 50 | Padma |
| 21-Mar | Slytherin | 90 | Vincent |
| 22-Mar | Ravenclaw | 50 | Padma |
| 23-Mar | Slytherin | 90 | Vincent |
| 24-Mar | Gryffindor | 40 | Lee |
| 25-Mar | Hufflepuff | 20 | Cedric |
| 26-Mar | Slytherin | 70 | Pansy |
| 27-Mar | Gryffindor | 10 | Neville |
Solved! Go to Solution.
Hello - this will produce the requested result. You can group by house to get a count of students, then assign those counts to house sizes and finally group again by house size to get a count of houses by house size.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jdLPC4IwFAfw/2Vng1ymeS7QQ0UYdJEOYz5psJ6xfuF/36YrSmZ6GRt8+L7H3stzEk42TBGP7GV9O4ESqO/hVB8rxXhFjl5OIksSVZelwKIyj8CYNcCP+A6JDTgI5IC3BsWuGN+olClVN8afWpTey1LCRZ/6QQ1aQqEEb5XvimpUIhBtFHU0FRmzY3i1Ztbb0xYeQkr4w5qsFNRZVDjosgpb8v7vjD0AuWTPz1/ekfWTedt4cbZmMVwpHq7kIp1K1B8zW0pHJM1GJQWD20bnY5aEuja7M3/qXO3f+R9f", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, House = _t, Points = _t, Student = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"House", type text}, {"Points", Int64.Type}, {"Student", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"House"}, {{"House Size", each let i = List.Count ( List.Distinct ( [Student] ) ) in if i = 1 then "1 Student" else if i = 2 then "2 Students" else "3 or More Students" , type text}}),
#"Grouped Rows1" = Table.Group(#"Grouped Rows", {"House Size"}, {{"Count of Houses", each Table.RowCount(_), Int64.Type}})
in
#"Grouped Rows1"
Thanks so much @jennratten ! Makes good sense and gives me exactly what I need. Cheers
You're welcome!
Hello - this will produce the requested result. You can group by house to get a count of students, then assign those counts to house sizes and finally group again by house size to get a count of houses by house size.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jdLPC4IwFAfw/2Vng1ymeS7QQ0UYdJEOYz5psJ6xfuF/36YrSmZ6GRt8+L7H3stzEk42TBGP7GV9O4ESqO/hVB8rxXhFjl5OIksSVZelwKIyj8CYNcCP+A6JDTgI5IC3BsWuGN+olClVN8afWpTey1LCRZ/6QQ1aQqEEb5XvimpUIhBtFHU0FRmzY3i1Ztbb0xYeQkr4w5qsFNRZVDjosgpb8v7vjD0AuWTPz1/ekfWTedt4cbZmMVwpHq7kIp1K1B8zW0pHJM1GJQWD20bnY5aEuja7M3/qXO3f+R9f", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, House = _t, Points = _t, Student = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"House", type text}, {"Points", Int64.Type}, {"Student", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"House"}, {{"House Size", each let i = List.Count ( List.Distinct ( [Student] ) ) in if i = 1 then "1 Student" else if i = 2 then "2 Students" else "3 or More Students" , type text}}),
#"Grouped Rows1" = Table.Group(#"Grouped Rows", {"House Size"}, {{"Count of Houses", each Table.RowCount(_), Int64.Type}})
in
#"Grouped Rows1"
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
Check out the October 2025 Power BI update to learn about new features.
| User | Count |
|---|---|
| 9 | |
| 6 | |
| 4 | |
| 3 | |
| 3 |