Skip to content

Instantly share code, notes, and snippets.

@bjulius
Created February 17, 2024 06:41
Show Gist options
  • Save bjulius/d39d1922a7c1b5a12cc77308856b927f to your computer and use it in GitHub Desktop.
Save bjulius/d39d1922a7c1b5a12cc77308856b927f to your computer and use it in GitHub Desktop.
Excel BI Power Query Challenge 157 - Brian Julius Solution
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
AddGlobalOrigOrder = Table.AddIndexColumn(Source, "GlobalOrigOrder", 0, 1, Int64.Type),
UnpivotOther = Table.UnpivotOtherColumns(AddGlobalOrigOrder, {"Group", "GlobalOrigOrder"}, "Attribute", "Value"),
SortNBuffer = Table.Buffer( Table.Sort(UnpivotOther,{{"Group", Order.Ascending}, {"Attribute", Order.Ascending}, {"GlobalOrigOrder", Order.Ascending}})),
Group = Table.Group(SortNBuffer, {"Group", "Attribute"}, {{"All", each _, type table [Group=number, GlobalOrigOrder=number, Attribute=text, Value=any]}}),
AddGlobalIdx1 = Table.AddColumn(Group, "GlobalIdx1", each Table.AddIndexColumn([All], "Global1", 1, 1)),
AddGlobalIdx0 = Table.SelectColumns( Table.AddColumn(AddGlobalIdx1, "GlobalIdx0", each Table.AddIndexColumn([GlobalIdx1], "Global0", 0, 1)), "GlobalIdx0"),
Expand = Table.ExpandTableColumn(AddGlobalIdx0, "GlobalIdx0", {"Group", "GlobalOrigOrder", "Attribute", "Value", "Global1", "Global0"}, {"Group", "GlobalOrigOrder", "Attribute", "Value", "Global1", "Global0"}),
Headers = Table.ColumnNames( Expand ),
HeadersB = List.Transform( Headers, each _ & "_B"),
TableB = Table.FromColumns( Table.ToColumns( Expand ), HeadersB ),
Join = Table.Join( Expand, {"Group", "Attribute", "Global0"}, TableB, {"Group_B", "Attribute_B", "Global1_B"}, JoinKind.LeftOuter ),
RemoveCol = Table.SelectColumns(Join,{"Group", "GlobalOrigOrder", "Attribute", "Value", "Value_B"}),
Sort = Table.Sort(RemoveCol,{{"Group", Order.Ascending}, {"Attribute", Order.Ascending}, {"GlobalOrigOrder", Order.Ascending}}),
AddPrevValue = Table.RemoveColumns( Table.AddColumn(Sort, "PrevValue", each if [Value_B] = null then [Value] else [Value_B]), "Value_B"),
AddChange = Table.AddColumn(AddPrevValue, "Change", each if Text.From( [Value] ) = Text.From([PrevValue]) then " " else [Value]),
RemCol2 = Table.RemoveColumns(AddChange,{"Value", "PrevValue"}),
Pivot = Table.Pivot(RemCol2, List.Distinct(RemCol2[Attribute]), "Attribute", "Change"),
Sort2 = Table.RemoveColumns( Table.ReorderColumns( Pivot, Table.ColumnNames( AddGlobalOrigOrder )), "GlobalOrigOrder")
in
Sort2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment