Power BI is turning 10, and we’re marking the occasion with a special community challenge. Use your creativity to tell a story, uncover trends, or highlight something unexpected.
Get startedJoin us for an expert-led overview of the tools and concepts you'll need to become a Certified Power BI Data Analyst and pass exam PL-300. Register now.
Hi all,
I am working on a project to assess the sales at our company, based on the invoices. I have a dataset at line item level, and want to assign a category to each invoice number based on the line item with the highest value.
Example data:
Invoice number | Line item | Category | Value | Desired result |
1 | 1 | Bordeaux | 110 | Bordeaux |
1 | 2 | Languedoc | 15 | Bordeaux |
1 | 3 | Alsace | 55 | Bordeaux |
2 | 1 | Bordeaux | 150 | Alsace |
2 | 2 | Alsace | 300 | Alsace |
So basically, the steps are as follows:
Should be quite simple I guess, but I am struggling with the implementation at the moment.
Does anyone know how to do this?
Thanks!
Kirvis
Solved! Go to Solution.
@kirvis with PQ
List.Max(
Table.SelectRows(
CT,
(r) =>
r[Invoice number]
= [Invoice number] and r[Value]
= List.Max(Table.SelectRows(CT, (q) => q[Invoice number] = [Invoice number])[Value])
)[Category]
)
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"i45WMlTSAWOn/KKU1MTSChDX0EApVgciZQTEPol56aWpKfnJIDlTuJQxEDvmFCcmpwIZphBxIyymmRrApYyQtRgbACViAQ==",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [#"Invoice number" = _t, #"Line item" = _t, Category = _t, Value = _t]
),
CT = Table.TransformColumnTypes(
Source,
{
{"Invoice number", Int64.Type},
{"Line item", Int64.Type},
{"Category", type text},
{"Value", Int64.Type}
}
),
#"Added Custom" = Table.AddColumn(CT, "maxCAT", each List.Max(
Table.SelectRows(
CT,
(r) =>
r[Invoice number]
= [Invoice number] and r[Value]
= List.Max(Table.SelectRows(CT, (q) => q[Invoice number] = [Invoice number])[Value])
)[Category]
))
in
#"Added Custom"
with DAX
_maxCAT =
VAR _partition =
ALLEXCEPT ( 'Table', 'Table'[Invoice number] )
VAR _val =
CALCULATE ( MAX ( 'Table'[Value] ), _partition )
RETURN
CALCULATE ( MAX ( 'Table'[Category] ), 'Table'[Value] = _val, _partition )
Wow, this truly is like magic.
Thanks for the quick reply and for the elegant solution!
@kirvis with PQ
List.Max(
Table.SelectRows(
CT,
(r) =>
r[Invoice number]
= [Invoice number] and r[Value]
= List.Max(Table.SelectRows(CT, (q) => q[Invoice number] = [Invoice number])[Value])
)[Category]
)
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"i45WMlTSAWOn/KKU1MTSChDX0EApVgciZQTEPol56aWpKfnJIDlTuJQxEDvmFCcmpwIZphBxIyymmRrApYyQtRgbACViAQ==",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [#"Invoice number" = _t, #"Line item" = _t, Category = _t, Value = _t]
),
CT = Table.TransformColumnTypes(
Source,
{
{"Invoice number", Int64.Type},
{"Line item", Int64.Type},
{"Category", type text},
{"Value", Int64.Type}
}
),
#"Added Custom" = Table.AddColumn(CT, "maxCAT", each List.Max(
Table.SelectRows(
CT,
(r) =>
r[Invoice number]
= [Invoice number] and r[Value]
= List.Max(Table.SelectRows(CT, (q) => q[Invoice number] = [Invoice number])[Value])
)[Category]
))
in
#"Added Custom"
with DAX
_maxCAT =
VAR _partition =
ALLEXCEPT ( 'Table', 'Table'[Invoice number] )
VAR _val =
CALCULATE ( MAX ( 'Table'[Value] ), _partition )
RETURN
CALCULATE ( MAX ( 'Table'[Category] ), 'Table'[Value] = _val, _partition )
@smpa01 could it be that the query is very slow when working with several thousand lines? When I try your query on a few lines, it works fine, but as soon as I try it on the complete dataset (a few thousand lines) then it takes forever (up to 5 seconds per line).
Any advice on how to solve this?
@kirvis I am guessing you are asking about PQ and not DAX. If yes, please follow the the known hacks described here
This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.
Check out the June 2025 Power BI update to learn about new features.
User | Count |
---|---|
9 | |
7 | |
7 | |
6 | |
5 |
User | Count |
---|---|
11 | |
11 | |
9 | |
6 | |
6 |