Forum Discussion
Previous Latest Date
I have tried so many solutions. But couldn't get what I am looking for. In the below sample table, I need the Previous Latest Date column as a result as a part of the power query table itself.
Any help is much appreciated.
CIF Date Previous Latest Date
0123456789 20/07/2020 03/05/2020
0123456789 03/05/2020 02/02/2020
0123456789 02/02/2020 01/01/2020
0123456789 01/01/2020 01/01/2020
Regards, Ramnath
Hi. This is not the best place to do it if you have a database as source because it has to query itself. Let's see. Add a custom column and insert the statement after "LastD", the final code should look like this:
= Table.AddColumn(#"Last Step", "LastD", (Earlier) => Table.Max( Table.SelectRows( Table.SelectColumns(#"Changed Type", {"Date", "CIF"}) , each Earlier[Date] > [Date] and [CIF] = Earlier[CIF] ) , "Date", Earlier )[Date] )Hope this helps,
- Ramnath
You need to follow the Complex Table example in the link I posted.
Please try pasting this code into a Blank Query in Power Query in the Advanced Editor (replace everything that's in there with this code)
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjA0MjYxNTO3sDy0QElHyUjfXN/IwMhAKVYHQ85Y3xSnnJG+EU45A0N9IALJArkgeaA0UNhQ3xChBSZkhClkiilkgikEc3YsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [CIF = _t, Date = _t]),
#"Changed Type" = Table.Buffer( Table.TransformColumnTypes(Source,{{"CIF", Int64.Type}, {"Date", type date}})),
#"Sorted Rows" = Table.Sort(#"Changed Type",{ {"CIF", Order.Ascending},{"Date", Order.Ascending}}),
#"Added Index" = Table.AddIndexColumn(#"Sorted Rows", "Index", 0, 1, Int64.Type),
#"Added Custom" = Table.AddColumn(#"Added Index", "Previous Date", each if [Index] =0 then [Date] else if #"Added Index"{[Index]-1} [CIF] = [CIF] then #"Added Index"{[Index]-1} [Date] else [Date])
in
#"Added Custom"
As mentioned by some of the others, this may not be the most efficient place to do this as in order to sort your data to get this to work properly it will dramatically slow the data load/refresh - Anonymous5 years ago
I am not clear if and how your problem was solved.
but in any case try if this is right for youlet Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bczBCcAwDEPRXXwOWJLTaUz2X6MtPgSHXD9PyjSSNkzhoAuCrZEm6Y+zxZKU4zklo8WS3xbzlFCLJQOXT3HH9QI=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [CIF = _t, DATE = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"CIF", Int64.Type}, {"DATE", type date}}), maxSmaller = (lst, el)=> let ls=List.Sort(lst) in ls{List.Max({List.PositionOf(ls,el)-1,0})}, ms = (tab)=> Table.AddColumn(tab, "maxSmaller", each maxSmaller(tab[DATE], _[DATE])), #"Grouped Rows" = Table.Group(#"Changed Type", {"CIF"}, {{"ms", each ms(_)}}), #"Expanded ms" = Table.ExpandTableColumn(#"Grouped Rows", "ms", {"DATE", "maxSmaller"}, {"DATE", "maxSmaller"}) in #"Expanded ms"
8 Replies
- ibarrauSuper User
Hi. This is not the best place to do it if you have a database as source because it has to query itself. Let's see. Add a custom column and insert the statement after "LastD", the final code should look like this:
= Table.AddColumn(#"Last Step", "LastD", (Earlier) => Table.Max( Table.SelectRows( Table.SelectColumns(#"Changed Type", {"Date", "CIF"}) , each Earlier[Date] > [Date] and [CIF] = Earlier[CIF] ) , "Date", Earlier )[Date] )Hope this helps,
- RamnathFrequent Visitor
This is almost close to what I want. But the only problem is it's giving me 4x4 =16 combinations. Instead, I want only the previous max date against all the CIFs. Is it possible for you to help?
- AllisonKennedyCommunity ChampionLooks like you're trying to reference a previous row in Power Query. Usually we use an Index column for this but you may be able to use your Date column as your Index.
You will also need to add a condition to check that CIF = previous CIF
With that in mind, see if this post helps you get what you need:
https://www.myonlinetraininghub.com/referencing-next-row-power-query- RamnathFrequent Visitor
Thank you Allison for the prompt response. I went through the link. But it doesn't help. I am looking for M Query formula to reference the next latest date for each of the CIF numbers. I have a database of 1 million records.
- AnonymousNot applicable
hi Ramnath
"I am looking for M Query formula to reference the next latest date for each of the CIF numbers. I have a database of 1 million records."
the "next latest date" is "local" by CIF?
or it is global?
The database is ordered by some column?