Forum Discussion
Previous Latest Date
- 5 years ago
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,
- 5 years agoRamnath
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"
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?
Yes. It's Local. Just to give you a background, it's the customer application data. So the customer can apply several times through different channels and in different months. We need to know when he has last applied and see whether it's within 30 days. If so, I need to make the current record inactive and make the previous record active.
- Anonymous5 years agoNot applicable
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"