Forum Discussion

M_Aird's avatar
M_Aird
Frequent Visitor
6 years ago
Solved

Dynamic data transformation with complex pivoted dataset

I have a data table taken from the Australian bureau of statistics (ABS) website which has multiple pivoted tables within it that have repeated rows and columns, that I'm trying to transform into som...
  • Anonymous's avatar
    Anonymous
    6 years ago

    the code per the proportion part.

    Only the second line is changed:

    from ->    colsNum=List.FirstN(Table.ColumnNames(Foglio2_Sheet),numCols),

    to ->        colsNum=List.RemoveRange(Table.ColumnNames(Foglio2_Sheet),1,numCols-1),

     

    And the name NUMBER to PC in the third last line.

     

     

     

        numCols=List.PositionOf(Record.FieldValues(Foglio2_Sheet{2}),"PROPORTION (%)"),
        colsNum=List.RemoveRange(Table.ColumnNames(Foglio2_Sheet),1,numCols-1),
        tabNum=Table.SelectColumns(Foglio2_Sheet,colsNum),
        #"Removed Top Rows" = Table.Skip(tabNum,3),
        #"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true]),
        tab = Table.AddColumn(#"Promoted Headers", "Offence", each let noNull=List.RemoveMatchingItems( Record.FieldValues(_),{null,""})   in   if List.Count(noNull)=1 then noNull{0} else null),
        cols=Table.ColumnNames(tab),
        supLoc = List.Accumulate(tab[Location],{},(s,c)=> if c="" or List.Last(s)= "" or c="Total" then s&{c} else s&{List.Last(s)}),
       tab1= Table.FromColumns( Table.ToColumns(tab)&{supLoc},cols&{"supLocation"}),
        #"Filled Down" = Table.FillDown(tab1,{"Offence"}),
        #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([supLocation] <> null and [supLocation] <>"")),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Filtered Rows", {"Offence", "supLocation", "Location"}, "Year", "Value"),
        #"Sorted Rows" = Table.Sort(#"Unpivoted Other Columns",{{"Year", Order.Ascending},{"Offence", Order.Ascending},{"supLocation", Order.Ascending}}),
        #"Added Custom" = Table.AddColumn(#"Sorted Rows", "Measure", each "PC"),
        #"Reordered Columns" = Table.ReorderColumns(#"Added Custom",{"Year", "supLocation", "Location", "Offence", "Measure", "Value"})
    in
        #"Reordered Columns"