Forum Discussion

sjh_au's avatar
sjh_au
Regular Visitor
8 years ago
Solved

Convert rows into columns when row header found

Hi,

 

I have some data from ADFind tool.  The data has headers rather than a separate column every time a new record is matched.  Any idea's how to convert something like this into rows/columns in Power BI:

 

Record : 1

Col1 : value

Col2 : value

Col3 : value

Record : 2

Col1 : value

Col4 : value

Record : 3

Col1 : value

 

Any suggestions appreciated.

 

  • sjh_au,

     

    You may refer to the code below.

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCkpNzi9KUbBSMFSK1YlWcs7PMQRyyhJzSlMN4UJGcCEjmJAxXMgYLAQ3xwjDHCO4OSZwIRNUTcYYmoyBmmIB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
        #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.StartsWith([Column1], "Record :") then [Column1] else null),
        #"Filled Down" = Table.FillDown(#"Added Custom",{"Custom"}),
        #"Filtered Rows" = Table.SelectRows(#"Filled Down", each not Text.StartsWith([Column1], "Record : ")),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Filtered Rows", "Column1", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),
        #"Pivoted Column" = Table.Pivot(#"Split Column by Delimiter", List.Distinct(#"Split Column by Delimiter"[Column1.1]), "Column1.1", "Column1.2")
    in
        #"Pivoted Column"

1 Reply

  • v-chuncz-msft's avatar
    v-chuncz-msft
    Community Support

    sjh_au,

     

    You may refer to the code below.

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCkpNzi9KUbBSMFSK1YlWcs7PMQRyyhJzSlMN4UJGcCEjmJAxXMgYLAQ3xwjDHCO4OSZwIRNUTcYYmoyBmmIB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
        #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.StartsWith([Column1], "Record :") then [Column1] else null),
        #"Filled Down" = Table.FillDown(#"Added Custom",{"Custom"}),
        #"Filtered Rows" = Table.SelectRows(#"Filled Down", each not Text.StartsWith([Column1], "Record : ")),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Filtered Rows", "Column1", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),
        #"Pivoted Column" = Table.Pivot(#"Split Column by Delimiter", List.Distinct(#"Split Column by Delimiter"[Column1.1]), "Column1.1", "Column1.2")
    in
        #"Pivoted Column"