Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Excel power query - Tranform JSON data correctly

I have the issue that I do not know how to transform the data correctly to get it in a table. The data is coming from an API in JSON. I can transform the data into a table, but I get for each name a column.

 

What I did:

 

First I have the records in a column

 
 

Then I expand it into a table. Thats okay so far. I tried to group then the data, but that lead to the issue that I got the number 2 in the value column for each entry, instead of the acutal data.

So I tried to tranform the the data:

 

Switched lines with columns,

The first line is the descripiton.

Unfortunately, Power Query does not recognize that the data in the same named columns should go into that.

 

I expect to have a result like this in Power Query:

How can I do this?

  • Anonymous's avatar
    Anonymous
    5 years ago

    in this way (almost) all done by GUI

     

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUUpUitWJVjICspLALGMgKxnMMgGyUsAsQySFSCqRlELVxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [value = _t, name = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"value", Int64.Type}, {"name", type text}}),
        grp = Table.Group(#"Changed Type", {"name"}, {{"grp", each _[value]}}),
        #"Extracted Values" = Table.TransformColumns(grp, {"grp", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "grp", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"grp.1", "grp.2"}),
        #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"grp.1", Int64.Type}, {"grp.2", Int64.Type}}),
        #"Transposed Table" = Table.Transpose(#"Changed Type1"),
        #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
        #"Changed Type2" = Table.TransformColumnTypes(#"Promoted Headers",{{"a", Int64.Type}, {"b", Int64.Type}, {"c", Int64.Type}, {"d", Int64.Type}})
    in
        #"Changed Type2"

     

     

     

4 Replies

  • Jimmy801's avatar
    Jimmy801
    Community Champion

    Hello Anonymous 

     

    try to add a new step after your step of ExpandedList (first screenshot) like this:

    Table.FromRecords(YourStepOfExpandedList[Column1) 

     

    Hope it helps

     

    Jimmy

  • Anonymous's avatar
    Anonymous
    Not applicable

    try this scheme:

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUUpUitWJVjICspLALGMgKxnMMgGyUsAsQySFSCqRlELVxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [value = _t, name = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"value", Int64.Type}, {"name", type text}}),
        grp = Table.Group(#"Changed Type", {"name"}, {{"grp", each _[value]}}),
        tfc=Table.FromColumns(grp[grp],grp[name])
    in
        tfc

     

    if you have problem to adapt the code, post your table in a way that is easy to copy and some one will do it for you.

     

    • Anonymous's avatar
      Anonymous
      Not applicable

      in this way (almost) all done by GUI

       

       

      let
          Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUUpUitWJVjICspLALGMgKxnMMgGyUsAsQySFSCqRlELVxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [value = _t, name = _t]),
          #"Changed Type" = Table.TransformColumnTypes(Source,{{"value", Int64.Type}, {"name", type text}}),
          grp = Table.Group(#"Changed Type", {"name"}, {{"grp", each _[value]}}),
          #"Extracted Values" = Table.TransformColumns(grp, {"grp", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
          #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "grp", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"grp.1", "grp.2"}),
          #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"grp.1", Int64.Type}, {"grp.2", Int64.Type}}),
          #"Transposed Table" = Table.Transpose(#"Changed Type1"),
          #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
          #"Changed Type2" = Table.TransformColumnTypes(#"Promoted Headers",{{"a", Int64.Type}, {"b", Int64.Type}, {"c", Int64.Type}, {"d", Int64.Type}})
      in
          #"Changed Type2"

       

       

       

  • Icey's avatar
    Icey
    Community Support

    Hi Anonymous ,

     

    Is this problem solved?

     

    If it is solved, please always accept the replies making sense as solution to your question so that people who may have the same question can get the solution directly.

     

    If not, please let me know.

     

     

    Best Regards,

    Icey