Forum Discussion
danielbacher
2 years agoFrequent Visitor
Transposing data from excel
I have a problem with a very difficult dataset. This dataset has year written over 4 columns and all the values are therefore written after as four different columns. (See Screenshot) "Nyeste år" = ...
danielbacher
1 year agoFrequent Visitor
Yes sry for the late respons. Here is an example file from the dataset I'm working on, with expected result.
https://fld365-my.sharepoint.com/:x:/g/personal/daniel_fld_dk/EYfXvXdoiUFNknz_FRR7OVEB4vC-t0VekYo93sYSHWWpvA?e=Tal5A3
The problem I'm having is I have to transpose some of the columns, but not all of them. The columns that should not be transposed doesn't matter if the values in them are duplicated to all rows for each company or they are a single value with the rest of the years blank.
I only have to transpose the years and all the values after that.
dufoq3
1 year agoCommunity Champion
Make the link public
- danielbacher1 year agoFrequent Visitor
Here we go
- dufoq31 year agoCommunity Champion
Try this:
let Source = Excel.Workbook(File.Contents("C:\Users\Downloads\PowerQueryForum\danielbacher\Example file.xlsx"), null, true), #"Sample Data_Sheet" = Source{[Item="Sample Data",Kind="Sheet"]}[Data], KeptFirstRows = Table.FirstN(#"Sample Data_Sheet", each [Column1] <> "Expected Result"), RemovedBlankRows = Table.SelectRows(KeptFirstRows, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null, "Data Sample"}))), PromotedHeaders = Table.PromoteHeaders(RemovedBlankRows, [PromoteAllScalars=true]), RemovedBlankColumns = List.Accumulate(Table.ColumnNames(PromotedHeaders), PromotedHeaders, (s,c)=> if List.IsEmpty(List.RemoveNulls(Table.Column(s, c))) then Table.RemoveColumns(s, c) else s), StepBack = RemovedBlankColumns, #"Demoted Headers" = Table.DemoteHeaders(StepBack), TransposedTable = Table.Transpose(#"Demoted Headers"), MergedColumns = Table.CombineColumns(Table.TransformColumnTypes(TransposedTable, {{"Column2", type text}}, "sk-SK"),{"Column1", "Column2"},Combiner.CombineTextByDelimiter("||", QuoteStyle.None),"Merged"), TransposedTable1 = Table.Transpose(MergedColumns), PromotedHeaders1 = Table.PromoteHeaders(TransposedTable1, [PromoteAllScalars=true]), AddedIndex = Table.AddIndexColumn(PromotedHeaders1, "Index", 0, 1, Int64.Type), UnpivotedOtherColumns = Table.UnpivotOtherColumns(AddedIndex, List.Select(Table.ColumnNames(AddedIndex), each not List.Contains({"-3", "-2", "-1", "Nyeste år"}, _, (x,y)=> Text.EndsWith(y, x))), "Attribute", "Value"), SplitColumnByDelimiter = Table.SplitColumn(UnpivotedOtherColumns, "Attribute", Splitter.SplitTextByDelimiter("||", QuoteStyle.Csv), {"Attribute", "Year"}), ExtractedTextBeforeDelimiter = Table.TransformColumns(SplitColumnByDelimiter, {{"Attribute", each if Text.Contains(_, "_") then Text.BeforeDelimiter(_, "_", {0, RelativePosition.FromEnd}) else _, type text}}), ReplacedValue = Table.ReplaceValue(ExtractedTextBeforeDelimiter,"N/A",null,Replacer.ReplaceValue,{"Value"}), PivotedColumn = Table.Pivot(ReplacedValue, List.Distinct(ReplacedValue[Attribute]), "Attribute", "Value"), ReplacedValue1 = Table.ReplaceValue(PivotedColumn,"Nyeste år","0",Replacer.ReplaceText,{"Year"}), ChangedType = Table.TransformColumnTypes(ReplacedValue1,{{"Year", Int64.Type}}), SortedRows = Table.Sort(ChangedType,{{"Index", Order.Ascending}, {"Year", Order.Ascending}}), RemovedColumns = Table.RemoveColumns(SortedRows,{"Index", "Year"}), RenamedColumns = Table.TransformColumnNames(RemovedColumns, each Text.Remove(_, "|")), // Set only number or text type ChangedTypeDynamic = List.Accumulate(Table.ColumnNames(RenamedColumns), RenamedColumns, (s,c)=> if List.AllTrue(List.Transform(List.RemoveNulls(Table.Column(s, c)), (x)=> try (Number.From(x, "en-US") is number) otherwise false)) then Table.TransformColumnTypes(s,{{c, type number}}, "en-US") else Table.TransformColumnTypes(s,{{c, type text}}) ) in ChangedTypeDynamic