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 all, I would like to remove lines with duplicated "ID" and keep the lowest "price" line. May I know if there any quick way(not using groupby) I could do for this case?
Original Table
| ID | Price | 
| 1 | 4 | 
| 1 | 346 | 
| 3 | 27 | 
| 4 | 458 | 
| 5 | 734 | 
| 5 | 6 | 
| 7 | 45 | 
| 7 | 85 | 
| 7 | 7 | 
Desired outcome:
| ID | Price | 
| 1 | 4 | 
| 3 | 27 | 
| 4 | 458 | 
| 5 | 6 | 
| 7 | 7 | 
Appreciated if any help
Solved! Go to Solution.
@ngct1112 try this
CT = Table.TransformColumnTypes(#"Promoted Headers", {{"ID", Int64.Type}, {"Price", Int64.Type}}), 
  #"Filtered Rows" = Table.SelectRows(
    CT, 
    each ([Price] = List.Min(Table.SelectRows(CT, (q) => q[ID] = [ID])[Price]))
  )Easier way, add sorted rows, buffer and remove duplicate step
let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTI0UIrVgTDNwSwnIMsSzjI0UoqNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", Int64.Type}}),
    #"Sorted Rows" = Table.Sort(#"Changed Type",{{"Column2", Order.Ascending}}),
    #"Buffered" = Table.Buffer(#"Sorted Rows"),
    #"Removed Duplicates" = Table.Distinct(Buffered, {"Column1"})
in
    #"Removed Duplicates"
Easier way, add sorted rows, buffer and remove duplicate step
let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTI0UIrVgTDNwSwnIMsSzjI0UoqNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", Int64.Type}}),
    #"Sorted Rows" = Table.Sort(#"Changed Type",{{"Column2", Order.Ascending}}),
    #"Buffered" = Table.Buffer(#"Sorted Rows"),
    #"Removed Duplicates" = Table.Distinct(Buffered, {"Column1"})
in
    #"Removed Duplicates"
@ngct1112 try this
CT = Table.TransformColumnTypes(#"Promoted Headers", {{"ID", Int64.Type}, {"Price", Int64.Type}}), 
  #"Filtered Rows" = Table.SelectRows(
    CT, 
    each ([Price] = List.Min(Table.SelectRows(CT, (q) => q[ID] = [ID])[Price]))
  )This feels like a DAX sort of approach. In M, you want to be very careful about doing table filtering like this since the O(n^2) complexity will make it impractical for larger datasets.
In this particular case, we can do this with a simple Group By:
= Table.Group(#"Changed Type", {"ID"}, {{"Price", each List.Min([Price]), type nullable number}})@AlexisOlson This feels like a DAX sort of approach - yes it is 😀 I was simply testing out how can I avoid groupby (OP wants to avoid groupby)and still get there and translate DAX to M
Ah, this makes much more sense now. I must have skimmed over that particular requirement.
Group by is the perfect tool for this, so I was rather confused about why no one suggested it. Turns out I need to learn how to read.
 
					
				
				
			
		
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.
