Forum Discussion

MaryF's avatar
MaryF
Advocate II
10 years ago
Solved

Help needed to transform data via M

Hi all   I'm hoping someone can help me get past a big hurdle.. I have the following issue   My data is coming in as a single column     . Can anyone let me know if this is doable e...
  • Anonymous's avatar
    Anonymous
    10 years ago

    I don't know if this is the optimal solution, but I did it this way:

     

    1. Added a custom column that repeats a sequence of the numbers 1 - 8 down the series so there is something to pivot on
    2. Repeated the account name or whatever you call that first row in each set in your sample
    3. Removed those first rows
    4. Removed the index column because it will be meaningless after this
    5. Pivoted on the column header number thing from step 2
    6. The next steps would probably be to rename all these columns and maybe add a new index column, but I didn't bother.

     

    let
        Source = Excel.Workbook(File.Contents("M:\Reports\test.xlsx"), null, true),
        Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data],
        #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"Index", Int64.Type}}),
        #"Added Sorter" = Table.AddColumn(
    		#"Changed Type",
    		"Sorter",
    		each Number.From(
    			List.Min(
    				List.Range(
    					List.Repeat(
    						{1, 2, 3, 4, 5, 6, 7, 8},
    						Int32.From(
    							(List.Count(#"Changed Type"[Index]) / 8),
    							null,
    							RoundingMode.Up
    						)		
    					),
    					[Index] - 1,
    					1
    				)
    			)
    		)
    	),
        #"Added Name" = Table.AddColumn(
    		#"Added Sorter",
    		"Name",
    		each Text.From(
    			List.Last(
    				List.FirstN(
    					#"Added Sorter"[Column1],
    					[Index] - ([Sorter] - 1)
    				),
    				1
    			)
    		)
    	),
        #"Reordered Columns" = Table.ReorderColumns(
    		#"Added Name",
    		{"Index", "Sorter", "Name", "Column1"}
    	),
        #"Removed Rows" = Table.SelectRows(
    		#"Reordered Columns",
    		each [Sorter] > 1
    	),
        #"Removed Columns" = Table.RemoveColumns(#"Removed Rows",{"Index"}),
        #"Pivoted Column" = Table.Pivot(
    		Table.TransformColumnTypes(
    			#"Removed Columns",
    			{{"Sorter", type text}},
    			"en-US"
    		),
    		List.Distinct(Table.TransformColumnTypes(#"Removed Columns", {{"Sorter", type text}}, "en-US")[Sorter]),
    		"Sorter",
    		"Column1"
    	)
    in
        #"Pivoted Column"
  • ImkeF's avatar
    ImkeF
    10 years ago

    This is very similar, but a bit shorter:

     

    let
        Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
        #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1),
        RowNumber = Table.AddColumn(#"Added Index", "Custom", each Number.RoundUp([Index]/8)),
        PivotCols = Table.AddColumn(RowNumber, "Pivot", each Number.Mod([Index], 8)),
        RemoveIndex = Table.RemoveColumns(PivotCols,{"Index"}),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(RemoveIndex, {{"Pivot", type text}}, "de-DE"), List.Distinct(Table.TransformColumnTypes(RemoveIndex, {{"Pivot", type text}}, "de-DE")[Pivot]), "Pivot", "Spalte1")
    in
        #"Pivoted Column"