cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
aurischa Frequent Visitor
Frequent Visitor

Multi-Dimensional Json file to Table

I have a Json file formatted like so:

{
    "items": [
        {
            "tableName": "incidents",
            "count": 20000,
            "columnNames": [
                "id",
                "subject",
                "category"
            ],
            "rows": [
                [
                    "61",
                    "Test",
                    null
                ],
                [
                    "65",
                    "TEST 2",
                    null
                ], ........Etc

I pull this Json file using a web call to an API (specifically Oracle Right Now).

 

*Note that the column names are listed as a separate entitie to the rows.

 

When I follow the suggestions on here to expand out the data I am unable to get the column headings and rows in a single table. start.pngI can navigate to the column names list OR the rows list. I can transpose the column names list to table headings like so:

  Transpose table.png

 

 But then there are no rows to fill in the columns as the rows are in a higher \ adjacent level. 

 

Navigating to the rows list simply gives me this:Rows.png

 

 

 

How do I manipulate this Json file using Power Bi to display a single table with the columns as the columns and the rows as the rows?   

 

I have spent probably too much time on this and as I'm new to M query language playing around in advanced editor has proven not very fruitful. 

 

Any help will be much appreciated. 

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Moderator v-yuezhe-msft
Moderator

Re: Multi-Dimensional Json file to Table

Hi @aurischa

Please follow the following steps to import your JSON file to Power BI.

1. Right click your lists and choose "Add as new query".
1.PNG

2.PNG

2. Convert your columnNames list to table and transpose the table.
3.PNG4.PNG

3.Convert your rows list to table and rename the column as follows
6.PNG

4.Add custom columns as follows, For more details, please review this similar blog.

7.PNG8.PNG9.PNG

5. Remove first column in rows table.
10.PNG

6. Append the two queries as shown in the following screenshots.
11.PNG

7. Select the first row in columnNames table and click the "Use first row as headers" button, then get expected result.
12.PNG13.PNG.


Thanks,
Lydia Zhang

Community Support Team _ Lydia Zhang
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
16 REPLIES 16
Moderator v-yuezhe-msft
Moderator

Re: Multi-Dimensional Json file to Table

Hi @aurischa

Please follow the following steps to import your JSON file to Power BI.

1. Right click your lists and choose "Add as new query".
1.PNG

2.PNG

2. Convert your columnNames list to table and transpose the table.
3.PNG4.PNG

3.Convert your rows list to table and rename the column as follows
6.PNG

4.Add custom columns as follows, For more details, please review this similar blog.

7.PNG8.PNG9.PNG

5. Remove first column in rows table.
10.PNG

6. Append the two queries as shown in the following screenshots.
11.PNG

7. Select the first row in columnNames table and click the "Use first row as headers" button, then get expected result.
12.PNG13.PNG.


Thanks,
Lydia Zhang

Community Support Team _ Lydia Zhang
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
aurischa Frequent Visitor
Frequent Visitor

Re: Multi-Dimensional Json file to Table

Hi Lydia,

 

Excellent solution, and thank you for your help. My only small qualm is that it may not be scalable should the json data set contain say 20 or 100 colums. However, before reading this I did recently come up with another way to achieve this solution. 

 

Fortunately I was able to use ROQL syntax in the REST API call meaning I was able to format the JSON file as such.

?query=SELECT%20ID,%27֍%27,subject,%27֍%27,category,%27֍%27%20from%20incidents

 

Where ֍ is the delimiter.

 

{
    "items": [
        {
            "tableName": "Table0",
            "count": 20000,
            "columnNames": [
                "id",
                "'֍'",
                "subject",
                "'֍'",
                "category",
                "'֍'"
            ],
            "rows": [
                [
                    "61",
                    "֍",
                    "Test",
                    "֍",
                    null,
                    "֍"
                ],
                [
                    "65",
                    "֍",
                    "TEST 2",
                    "֍",
                    null,
                    "֍"
                ],

1 nav.png

 

 

2 convert to table.png

 

 

3 Expand colmun.png

 

 

4 Expand column1 - n.png

 

 

5 removed columns.png

 

 

6 Transpose table.png

 

 

7 promote headers.png

 

 

8 Expand subject.png

 

 

9 extract values.png

 

 

10 removed columns1.png

 

 

11 split colums.png

 

 

12 changed type.png

 

 

 

Final step is to rename headings. 

 

 

Now that I look at it there are a few redundant steps in there. But I achieved a similar result using delimiters programmaticly which someone might find useful. 

It would be nice to be able to define the table structure of the json file for powerbi at the point of making the web calls instead of making the call importing the data and then trying to manipulate it. In PHP to achieve this I'd wrapping the data in an array of arrays and define the first element of all sub arrays as the ID field and wrtre out all the data in a for each loop. Having a UI to do this would be amazing. It just seems so many steps to convert what is already for the most part, structured data into a table. 

 

Regards,

 

Adam

 

 

 

 

aurischa Frequent Visitor
Frequent Visitor

Re: Multi-Dimensional Json file to Table

Hi Lydia,

 

Excellent solution, and thank you for your help. My only small qualm is that it may not be scalable should the json data set contain say 20 or 100 colums. However, before reading this I did recently come up with another way to achieve this solution. 

 

Fortunately I was able to use ROQL syntax in the REST API call meaning I was able to format the JSON file as such.

?query=SELECT%20ID,%27֍%27,subject,%27֍%27,category,%27֍%27%20from%20incidents

 

Where ֍ is the delimiter.

 

{
    "items": [
        {
            "tableName": "Table0",
            "count": 20000,
            "columnNames": [
                "id",
                "'֍'",
                "subject",
                "'֍'",
                "category",
                "'֍'"
            ],
            "rows": [
                [
                    "61",
                    "֍",
                    "Test",
                    "֍",
                    null,
                    "֍"
                ],
                [
                    "65",
                    "֍",
                    "TEST 2",
                    "֍",
                    null,
                    "֍"
                ],

1 nav.png

 

 

2 convert to table.png

 

 

3 Expand colmun.png

 

 

4 Expand column1 - n.png

 

 

5 removed columns.png

 

 

6 Transpose table.png

 

 

7 promote headers.png

 

 

8 Expand subject.png

 

 

9 extract values.png

 

 

10 removed columns1.png

 

 

11 split colums.png

 

 

12 changed type.png

 

 

 

Final step is to rename headings. 

 

 

Now that I look at it there are a few redundant steps in there. But I achieved a similar result using delimiters programmaticly which someone might find useful. 

It would be nice to be able to define the table structure of the json file for powerbi at the point of making the web calls instead of making the call importing the data and then trying to manipulate it. In PHP to achieve this I'd wrapping the data in an array of arrays and define the first element of all sub arrays as the ID field and wrtre out all the data in a for each loop. Having a UI to do this would be amazing. It just seems so many steps to convert what is already for the most part, structured data into a table. 

 

Regards,

 

Adam

 

 

 

 

Super User
Super User

Re: Multi-Dimensional Json file to Table

Like to share an easier solution here, as this seems to be quite a common scenario:

 

Table.Combine(List.Transform(items1[rows], each Table.FromRows({_}, items1[columnNames])))

No need to expand anything from the record ("items1") here: Just reference the field "rows" (which contains a list) and transform each item of the list (which is a list as well, holding the row-values of the tables) to a table with the column headers from record-field "columnNames". This will return a list of tables which you simply combine (append).

 

BUT if you ever find yourself in a situation where you cannot "navigate" your solution directly like this, you should use this function:

 

Table.FromRecords( { YourJsonRecord } )

 

This will do your multiple steps here in one go (don't forget the curly brackets around your record, as this function requires a list of records: Even if this list has just one item ) 

Did I answer your question? Mark my post as a solution!

Proud to be a Datanaut!

Imke Feldmann

How to integrate M-code into your solution -- Check out more PBI- learning resources here -- Performance Tipps for M-queries




Highlighted
Yggdrasill Member
Member

Re: Multi-Dimensional Json file to Table

@ImkeF : Do you know what to do if the result from calling the web service is this ?

eurostatres.PNG

 

 

I can't get the values to link with the dimensions

 

Thanks in advance

Super User
Super User

Re: Multi-Dimensional Json file to Table

Did you try Table.FromRecords( { MyJsonRecord } ) like I've described in the post above already? (or here: http://www.thebiccountant.com/2017/08/30/how-to-open-a-complex-json-record-in-power-bi-and-power-que... )

 

If so: How do you want the records to be linked exactly?

Did I answer your question? Mark my post as a solution!

Proud to be a Datanaut!

Imke Feldmann

How to integrate M-code into your solution -- Check out more PBI- learning resources here -- Performance Tipps for M-queries




Re: Multi-Dimensional Json file to Table

Thanks for taking your time looking into this. 

 

What I'm trying to do is to get some sense out of JSON-stat file from Eurostat (See here for the JSON-stat file and here for the table it self )

I've worked with JSON before and done some tricks here and there to create tables but this time I'm just stuck.

 

This is what I get from get data - Web - using this url: 

http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/tin00171?nace_r2=I551-I553&precision=1&last...

Capture1.PNG

 

 

 

 

 

 

 

 

 

 

 

After using the Table.FromRecords function and removing some columns I don't need I get this

 

Capture2.PNG

Result:

Capture3.PNG

 

when I click on the "cells" get this from the lower pane view 

 

Capture4.PNGbehind dimension recordsCapture5.PNGbehind value records

 

After going back and forth trying to attach the values to dimension I simply can't and that is possibly because of my lack of M-formula knowledge.

 

Is there a way I can get a table with the fields geo and time with correct values ? 

 

Kind regards and again, thanks for taking your time to look into this

Super User
Super User

Re: Multi-Dimensional Json file to Table

So you want to link the "unit"-record to the number 2504985?

How? As a new record? Which field name shall the number get?

Did I answer your question? Mark my post as a solution!

Proud to be a Datanaut!

Imke Feldmann

How to integrate M-code into your solution -- Check out more PBI- learning resources here -- Performance Tipps for M-queries




Re: Multi-Dimensional Json file to Table

 

Capture6.PNGI basically just want the output to be tabular - like this