Forum Discussion

rubenamn's avatar
rubenamn
New Member
4 years ago
Solved

Rotate mi data using power query

Hi I have this data set   Each Machine Number has two tests per peel, my goal is to rotate each peel test from columns into rows in the right order.   for example, the machine M2116 has a Peel1 r...
  • AlexisOlson's avatar
    4 years ago

    Is this (a subset of) what you're after?

     

    Here's the full code I used:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lVJBisMwDPxK8bkQy7Fs59jd7SVsoZAeCqGHfUP/DyuPzMq0WWghmggpGY/GWld3CkTJ7d3hS6AkP2TvJdtJkOeKaFMYgRmIegpAqsjoMuqxCJ5/7nd5fX8ILMPibvvVSaoPyMME9MDYHZTaF/9HJXvSzaYbFESTUYcCVK3oRhw8osvoJv+g+zJctnSzURHbDMhf0F2qrHlpqhObaqWMHbFW4O3YO5xsDn7Rbb1KtQEXR/kNt6+BfP1r/lROMXuIxXcrMZnNbQRUONp6RFTG/DdOL/t43TD7/diwmM3iNr9ePXfr0alsinVV4FTMTxaL1tsv", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Machine = _t, Tech = _t, #"Temp/Speed Wedge" = _t, #"Temp/Speed Extruder" = _t, Peel1 = _t, Peel2 = _t, Peel3 = _t, Peel4 = _t, Peel5 = _t, Shear1 = _t, Shear2 = _t, Shear3 = _t, Shear4 = _t, Shear5 = _t, #"P/F" = _t, QC = _t, Material = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Machine", type text}, {"Tech", type text}, {"Temp/Speed Wedge", type text}, {"Temp/Speed Extruder", type text}, {"Peel1", Int64.Type}, {"Peel2", Int64.Type}, {"Peel3", Int64.Type}, {"Peel4", Int64.Type}, {"Peel5", Int64.Type}, {"Shear1", Int64.Type}, {"Shear2", Int64.Type}, {"Shear3", Int64.Type}, {"Shear4", Int64.Type}, {"Shear5", Int64.Type}, {"P/F", type text}, {"QC", type text}, {"Material", type text}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
        #"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 2), Int64.Type}}),
        PeelColumns = List.Select(Table.ColumnNames(#"Integer-Divided Column"), each Text.StartsWith(_, "Peel")),
        OtherColumns = List.Select(Table.ColumnNames(#"Integer-Divided Column"), each not List.Contains(PeelColumns & {"Index"}, _)),
        PeelTransformations = List.Transform(PeelColumns, (col) => {col, each Text.Combine(List.Transform(List.Sort(List.Distinct(Table.Column(_, col))), Number.ToText),"-"), type text}),
        OtherTransformations = List.Transform(OtherColumns, (col) => {col, each List.Max(Table.Column(_, col))}),
        #"Grouped Rows" = Table.Group(#"Integer-Divided Column", {"Index"}, OtherTransformations & PeelTransformations ),
        #"Changed Type1" = Table.TransformColumnTypes(#"Grouped Rows",{{"Machine", type text}, {"Tech", type text}, {"Temp/Speed Wedge", type text}, {"Temp/Speed Extruder", type text}, {"Shear1", Int64.Type}, {"Shear2", Int64.Type}, {"Shear3", Int64.Type}, {"Shear4", Int64.Type}, {"Shear5", Int64.Type}, {"P/F", type text}, {"QC", type text}, {"Material", type text}, {"Peel1", type text}, {"Peel2", type text}, {"Peel3", type text}, {"Peel4", type text}, {"Peel5", type text}}),
        #"Reordered Columns" = Table.ReorderColumns(#"Changed Type1",{"Index", "Machine", "Tech", "Temp/Speed Wedge", "Temp/Speed Extruder", "Peel1", "Peel2", "Peel3", "Peel4", "Peel5", "Shear1", "Shear2", "Shear3", "Shear4", "Shear5", "P/F", "QC", "Material"})
    in
        #"Reordered Columns"

     

    I added an index to easily group the pairs of rows together. During the group by on the index column, I took the maximum over all of the non-index, non-Peel columns. For the Peel columns, I combined the distinct values using "-" as a separator.