Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreShape the future of the Fabric Community! Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions. Take survey.
Hi,
I have got two columns, "Sales Orders" and "Version number". The sales have a correlating ID in this format: "M00123456". The data comes from an Access database. The version number is a whole number from 1 to infinity.
Every order have a version number. When the order changes (for instance, when the shipping address is updated) a new record is added and the old record is kept as-is (the user adds a new record in the Access Web App). This means that I need to do a filter that searches for a specific order with a version number higher than 1, with that I wan't to remove every version but the newest/highest version number. But it can't be a static search for a sales order, I must do it for every sales order.
Example:
Sales Order Version number
M00123456 1 <--- Do nothing
M00234567 1 <--- Discard
M00234567 2 <--- Display this one
M00345678 1 <--- Discard
M00345678 2 <--- Discard
M00345678 3 <--- Display this one
.... ...
For instance, Sales Order "M00234567" - I only wan't to display the latest version, the one with version number 2. Essentially I wan't to display this:
Sales Order Version number
M00123456 1 <--- Do nothing
M00234567 2 <--- Display this one
M00345678 3 <--- Display this one
Essentially, I need to discard every sales order but the one with the highest version number for every specific Sales Order ID.
Is this even possible to do? It feels like I've tried everything I can think of... Anyone with an idea how to solve this?
Thanks in advance for any help!
Sincerely,
TM
Solved! Go to Solution.
Hi @TM,
I can only agree with @itchyeyeballs: Grouping in combination with a MAX function should solve your problem. I copied your table into Excel and then pulled it into Power Query. My script looks like this
let Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Change Type" = Table.TransformColumnTypes(Source,{{"Sales Order ", type text}, {" Version number", Int64.Type}}), #"Group Rows" = Table.Group(#"Change Type", {"Sales Order "}, {{"HighestVersionNumber", each List.Max([#" Version number"]), type number}}) in #"Group Rows"
The result is the following:
Hope that helps.
Regards,
Lars
Hi @TM,
I can only agree with @itchyeyeballs: Grouping in combination with a MAX function should solve your problem. I copied your table into Excel and then pulled it into Power Query. My script looks like this
let Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Change Type" = Table.TransformColumnTypes(Source,{{"Sales Order ", type text}, {" Version number", Int64.Type}}), #"Group Rows" = Table.Group(#"Change Type", {"Sales Order "}, {{"HighestVersionNumber", each List.Max([#" Version number"]), type number}}) in #"Group Rows"
The result is the following:
Hope that helps.
Regards,
Lars
@itchyeyeballs Haha!! Actually @LarsSchreiber was simpler than mine and didn't had time to imrove mine to show correct totals.
But tell us your thinking because it always useful, and if not in this usually in other problems
I typed out a soultion for using the group by functionality (either in Access or power query) to create a lookup table, using the max function to only return the highest version number.
May be a way to go if @TM doesn't wan't the other order data in his model at all I suppose.
@itchyeyeballs you are right since if not using old data anywhere else, this can help navigating to data model and also performance, specially if the fact table contains millions of rows.
You can check this thread http://community.powerbi.com/t5/Desktop/Calculate-the-sum-of-the-line-amounts-with-the-highest-versi...
User | Count |
---|---|
95 | |
92 | |
84 | |
83 | |
49 |
User | Count |
---|---|
150 | |
146 | |
112 | |
73 | |
56 |