Forum Discussion
Split row into multiple rows, while combining columns
Apologies Ashish, I am probably not using the right terminology.
Here is how the table looks before applying my code. I have removed some columns that get dropped in the first steps. This is due to character limits on the post.
Here is my current code:
>>>>>
let
Source = source
#"Changed Type" = Table.TransformColumnTypes(#"6657447898179460",{{"RowNumber", Int64.Type}, {"Director Approved", type logical}, {"Project", type any}, {"Reporting Cycle Date", type any}, {"OverallStatus1", type any}, {"CostStatus2", type any}, {"TimeStatus3", type any}, {"ResourceStatus4", type any}, {"ScopeStatus5", type any}, {"StakeholderStatus6", type any}, {"GovStatus7", type any}, {"BenefitsStatus8", type any}, {"QualityStatus9", type any}, {"Monthly Summary", type any}, {"Activity 1", type any}, {"Activity 2", type any}, {"Activity 3", type any}, {"Activity 4", type any}, {"Activity 5", type any}, {"Activity 6", type any}, {"Activity 7", type any}, {"Activity 8", type any}, {"Activity 9", type any}, {"Activity 10", type any}, {"Activity 11", type any}, {"Issue1", type any}, {"Issue2", type any}, {"Risk1", type any}, {"Risk2", type any}, {"Risk3", type any}, {"Risk4", type any}, {"Risk5", type any}, {"Risk6", type any}}),
#"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"RowNumber", "Program", "Project", "Project phase", "Target phase completion date", "Funding source",
"Reporting Cycle Date", "OverallStatus1", "CostStatus2", "TimeStatus3"}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Removed Other Columns", {"RowNumber", "Program", "Project", "Project phase", "Target phase completion date", "Funding source",
"Reporting Cycle Date"}, "Attribute", "Value"),
#"Insert text" = Table.AddColumn(#"Unpivoted Other Columns", "Text After Delimiter",
each if [Attribute] = "OverallStatus1" then "Overall Status"
else if [Attribute] = "CostStatus2" then "Cost Status"
else if [Attribute] = "TimeStatus3" then "Time Status"
else ""),
#"Inserted Text Range" = Table.AddColumn(#"Insert text", "Text Range", each Text.End([Attribute], 1), type text),
#"Removed Columns" = Table.RemoveColumns(#"Inserted Text Range",{"Attribute"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns", "Value", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Value.1", "Value.2", "Value.3"}),
#"Removed Columns3" = Table.RemoveColumns(#"Split Column by Delimiter",{"Value.3"}),
#"Concat Status" = Table.AddColumn(#"Removed Columns3", "Concat Status", each Text.Combine({[Text After Delimiter],[Value.1], [Value.2]},":" ), type text),
#"Overall Status" = Table.AddColumn(#"Concat Status", "Overall Status", each Text.Combine({[Text After Delimiter],[Value.1], [Value.2]},":" ), type text),
#"Overall Status Clean" = Table.ReplaceValue( #"Overall Status" ,each [Overall Status],each if Text.Contains([Overall Status], "Overall") then [Overall Status] else "",Replacer.ReplaceValue,{"Overall Status"}),
#"Cost Status" = Table.AddColumn(#"Overall Status Clean", "Cost Status", each Text.Combine({[Text After Delimiter],[Value.1], [Value.2]},":" ), type text),
#"Cost Status Clean" = Table.ReplaceValue( #"Cost Status" ,each [Cost Status],each if Text.Contains([Cost Status], "Cost") then [Cost Status] else "",Replacer.ReplaceValue,{"Cost Status"}),
#"Time Status" = Table.AddColumn(#"Cost Status Clean", "Time Status", each Text.Combine({[Text After Delimiter],[Value.1], [Value.2]},":" ), type text),
#"Time Status Clean" = Table.ReplaceValue( #"Time Status" ,each [Time Status],each if Text.Contains([Time Status], "Time") then [Time Status] else "",Replacer.ReplaceValue,{"Time Status"}),
#"Removed Columns4" = Table.RemoveColumns(#"Time Status Clean",{"Value.1", "Value.2", "Text After Delimiter", "Concat Status"}),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Removed Columns4", "Overall Status", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Overall Status.1", "Overall Status.2", "Overall Status.3"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Overall Status.1", type text}, {"Overall Status.2", type text}, {"Overall Status.3", type text}}),
#"Split Column by Delimiter2" = Table.SplitColumn(#"Changed Type1", "Cost Status", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Cost Status.1", "Cost Status.2", "Cost Status.3"}),
#"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter2",{{"Cost Status.1", type text}, {"Cost Status.2", type text}, {"Cost Status.3", type text}}),
#"Split Column by Delimiter3" = Table.SplitColumn(#"Changed Type2", "Time Status", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Time Status.1", "Time Status.2", "Time Status.3"}),
#"Changed Type3" = Table.TransformColumnTypes(#"Split Column by Delimiter3",{{"Time Status.1", type text}, {"Time Status.2", type text}, {"Time Status.3", type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type3",{{"Overall Status.2", "Overall Status last month"},{"Overall Status.3", "Overall Status this month"},{"Cost Status.2", "Cost Status last month"},{"Cost Status.3", "Cost Status this month"},{"Time Status.2", "Time Status last month"},{"Time Status.3", "Time Status this month"}}),
#"Removed Columns1" = Table.RemoveColumns(#"Renamed Columns",{"Overall Status.1", "Cost Status.1", "Time Status.1"})
in
#"Removed Columns1"
>>>>>
And here is what the table looks like after I run the code (truncated):
What this results in is a table with three rows per project.
All three rows contain duplicate values for every column except for the status columns ("Overall Status last month", "Overall Status this month", "Cost Status last month", "Cost Status this month", "Time Status last month", "Time Status this month").
What I need to do is combine the three rows so that each project will change from this:
To this:
Apologies, I know that this is an excessive amount of text
Hi KyleFurner ,
You can achieve it by appling the below codes in your Advanced Editor, please find the attachment for the details.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("7Zhba8IwFID/SsmzoL1YHX3yUnWbqVIrTEofxIWN4SZ0G/v7W6po6EkvaVGmnIdeTo/x5fuSnJwwJDppkMBfun+Pebx7Y5svrbd/f4nX7xpPz1/Xnyx5M1oGfyx23/GGJb8z9WbLbB6+++zZWbHtdvfjDGaUul7Q81da4D4FtZKOk3ejMy+YTFfaYkkpHwTHL3p0PnUxihohMSDuvhS3UQ43v+Q45ZkD5GzW8mHOOGbsQymBllS3xISWDHBRuMmI47Yg7uHlce9nctZ8zs8WLSuFyw7qU12fNtTHvbw+hwT6c1UR98eG/oxwt7nJiOPuQNzjOrhVS9DsjHpZmvEZ9aiuRxfqMRH0MI56mECPfnk9ihb0HEkKmSvLhZKoSnIHJbkXJDGPklhAkkFakrMWDqVGZ6W5SHi+PYM+egv68yD4Y6X9sU7+DNP+1Dm31MmmDKjzV2iPkj2SnumjYE+bpJpo3UpbVGG1qlzeHF2p0Z/DxUZZF0nPdUpyCl77pAueb64rSnhLuqdU4G2TVAUr8HarbC4FxQdCvwR0C0L3BOidnEk+Kr8nVD+24Lbwj6Io+gU=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [RowNumber = _t, #"Director Approved" = _t, Project = _t, Program = _t, #"Project phase" = _t, #"Target phase completion date" = _t, #"Funding source" = _t, #"Reporting Cycle Date" = _t, OverallStatus1 = _t, CostStatus2 = _t, TimeStatus3 = _t, ResourceStatus4 = _t, ScopeStatus5 = _t, StakeholderStatus6 = _t, GovStatus7 = _t, BenefitsStatus8 = _t, QualityStatus9 = _t, #"Monthly Summary" = _t, #"Activity 1" = _t, #"Activity 2" = _t, #"Activity 3" = _t, #"Activity 4" = _t, #"Activity 5" = _t, #"Activity 6" = _t, #"Activity 7" = _t, #"Activity 8" = _t, #"Activity 9" = _t, #"Activity 10" = _t, #"Activity 11" = _t, Issue1 = _t, Issue2 = _t, Risk1 = _t, Risk2 = _t, Risk3 = _t, Risk4 = _t, Risk5 = _t, Risk6 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"RowNumber", Int64.Type}, {"Director Approved", type logical}, {"Project", type text}, {"Program", type text}, {"Project phase", type text}, {"Target phase completion date", Int64.Type}, {"Funding source", type text}, {"Reporting Cycle Date", type text}, {"OverallStatus1", type text}, {"CostStatus2", type text}, {"TimeStatus3", type text}, {"ResourceStatus4", type text}, {"ScopeStatus5", type text}, {"StakeholderStatus6", type text}, {"GovStatus7", type text}, {"BenefitsStatus8", type text}, {"QualityStatus9", type text}, {"Monthly Summary", type text}, {"Activity 1", type text}, {"Activity 2", type text}, {"Activity 3", type text}, {"Activity 4", type text}, {"Activity 5", type text}, {"Activity 6", type text}, {"Activity 7", type text}, {"Activity 8", type text}, {"Activity 9", type text}, {"Activity 10", type text}, {"Activity 11", type text}, {"Issue1", type text}, {"Issue2", type text}, {"Risk1", type text}, {"Risk2", type text}, {"Risk3", type text}, {"Risk4", type text}, {"Risk5", type text}, {"Risk6", type text}}),
#"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"RowNumber", "Program", "Project", "Project phase", "Target phase completion date", "Funding source",
"Reporting Cycle Date", "OverallStatus1", "CostStatus2", "TimeStatus3"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Other Columns", "OverallStatus1", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"OverallStatus1.1", "OverallStatus1.2", "OverallStatus1.3"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"OverallStatus1.1", type text}, {"OverallStatus1.2", type text}, {"OverallStatus1.3", type text}}),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Changed Type1", "CostStatus2", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"CostStatus2.1", "CostStatus2.2", "CostStatus2.3"}),
#"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"CostStatus2.1", type text}, {"CostStatus2.2", type text}, {"CostStatus2.3", type text}}),
#"Split Column by Delimiter2" = Table.SplitColumn(#"Changed Type2", "TimeStatus3", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"TimeStatus3.1", "TimeStatus3.2", "TimeStatus3.3"}),
#"Changed Type3" = Table.TransformColumnTypes(#"Split Column by Delimiter2",{{"TimeStatus3.1", type text}, {"TimeStatus3.2", type text}, {"TimeStatus3.3", type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type3",{{"OverallStatus1.1", "Overall Status last month"}, {"OverallStatus1.2", "Overall Status this month"},{"CostStatus2.1", "Cost Status last month"}, {"CostStatus2.2", "Cost Status this month"},{"TimeStatus3.2", "Time Status this month"}, {"TimeStatus3.1", "Time Status last month"}}),
#"Removed Columns" = Table.RemoveColumns(#"Renamed Columns",{"OverallStatus1.3", "CostStatus2.3", "TimeStatus3.3"})
in
#"Removed Columns"
Best Regards