Forum Discussion
tatmaninov
2 years agoFrequent Visitor
Calculate change in data - Is there a more efficient alternative to merge?
I am starting with data like this (data_tbl); And want to end up with data like this (Output); See here when applying a filter on BU, Dept and Team the Previous Value equals Value fr...
Anonymous
2 years agoNot applicable
Hi tatmaninov
This is my solution. Not sure if this would be more efficient but you may give it a try!
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jZY7awMxEIT/y9WG0/ukMm7Sp0piXBhykMIkweD8/ggkXSTv47aw1XzMzs2Ozj6dJj3r2SjjpsP0dP35vOTzNX9e1o/87dR0PpDM821dv/LpLUcdr/c1H2kRQJFi3rpxUXNUMR5FSomlmnH3CB1vl9/vEVqAUg+1eaxSMZ5Alo157yMAYfZU9eQrpPjIHUttUSUWK+Z9FGlFS2JdpFoEGZZqEzXt/j96BydiS/Q8Vo0ZEbXAFWHrToHFiv1ATxyqw2uN4Qe2Otax1KN7AivujRdpBVqri9WJqHb7CWqzT2fRXVs4EetOsCzWugNzRSitSKrfd4DBwu44+IxcdwislZo31tI3opGuYMbPubFkeywPbWKK56q1IMPqSxjFkKWTXG2QUM1qnhsu8EAhHYqex7ahiDnkt4uhhp3ucOM/hj1MK2Rd6Ngdrr6IkkxtyXfh/Ac=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, BU = _t, Dept = _t, Team = _t, Value = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"BU", type text}, {"Dept", type text}, {"Team", type text}, {"Value", Int64.Type}}, "en-GB"),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Date", "BU", "Dept", "Team"}, {{"Value", each List.Sum([Value]), type nullable number}}),
alldates = Table.Distinct(Table.SelectColumns(#"Grouped Rows", "Date")),
#"Grouped Rows1" = Table.Group(#"Grouped Rows", {"BU", "Dept", "Team"}, {{"All Data", each Table.NestedJoin(alldates, {"Date"}, _, {"Date"}, "DateTable", JoinKind.FullOuter)}}),
#"Expanded All Data2" = Table.ExpandTableColumn(#"Grouped Rows1", "All Data", {"Date", "DateTable"}, {"Date", "DateTable"}),
#"Expanded DateTable" = Table.ExpandTableColumn(#"Expanded All Data2", "DateTable", {"Value"}, {"Value"}),
#"Grouped Rows2" = Table.Group(#"Expanded DateTable", {"BU", "Dept", "Team"}, {{"All Data", each Table.AddIndexColumn(Table.Sort(_, {"Date", Order.Descending}), "Index", 0, 1)}}),
Custom1 = Table.TransformColumns(#"Grouped Rows2", {"All Data", each let vData = _ in Table.AddColumn(_, "Previous Date Value", each let vIndex = [Index] in try Text.From(vData[Date]{vIndex+1}) &","& Text.From(vData[Value]{vIndex+1}) otherwise null)}),
#"Removed Other Columns" = Table.SelectColumns(Custom1,{"All Data"}),
#"Expanded All Data" = Table.ExpandTableColumn(#"Removed Other Columns", "All Data", {"Date", "BU", "Dept", "Team", "Value", "Previous Date Value"}, {"Date", "BU", "Dept", "Team", "Value", "Previous Date Value"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Expanded All Data", "Previous Date Value", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Previous Date Value.1", "Previous Date Value.2"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Previous Date Value.1", type date}, {"Previous Date Value.2", Int64.Type}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{"Previous Date Value.1", "Previous Date"}, {"Previous Date Value.2", "Previous Value"}}),
#"Sorted Rows" = Table.Sort(#"Renamed Columns",{{"Date", Order.Descending}, {"BU", Order.Ascending}, {"Dept", Order.Ascending}, {"Team", Order.Ascending}, {"Previous Date", Order.Descending}}),
#"Grouped Rows3" = Table.Group(#"Sorted Rows", {"Date"}, {{"alldata", each Table.FillDown(_, {"Previous Date"})}}),
#"Expanded alldata" = Table.ExpandTableColumn(#"Grouped Rows3", "alldata", {"BU", "Dept", "Team", "Value", "Previous Date", "Previous Value"}, {"BU", "Dept", "Team", "Value", "Previous Date", "Previous Value"}),
#"Replaced Value" = Table.ReplaceValue(#"Expanded alldata",null,0,Replacer.ReplaceValue,{"Value"}),
#"Replaced Value1" = Table.ReplaceValue(#"Replaced Value",null,0,Replacer.ReplaceValue,{"Previous Value"}),
#"Added Custom" = Table.AddColumn(#"Replaced Value1", "Value Change", each [Value] - [Previous Value])
in
#"Added Custom"
Best Regards,
Jing
If this post helps, please Accept it as Solution to help other members find it. Appreciate your Kudos!