Forum Discussion
kirvis
4 years agoHelper I
Determine invoice category based on highest-value line item
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...
- 4 years ago
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
4 years agoCommunity Champion
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 )
kirvis
4 years agoHelper I
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?