Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

Make cross join in M code dynamically

Hello Everyone,    I have a table as below:  I would like to make rest api request to get the list of elements for each row and do cross join dynamically.   For example, '}zPBI_account' va...
  • artemus's avatar
    artemus
    6 years ago

    If you need to make a REST call you can do something like:

     

    let 
       Source = List.Select(DimensionName[Name], each [Name=_, Data=Web.Contents("https://myurl.com/GetDimensions?Dimension=" & _)]),
       JsonConvert = List.Select(Source, each Json.Document([Data])[<<Drill into Json here>>]),
       AddCOlumns= List.Accumulate(JsonConvert, each #table(type table [], {}), (current, next) => Table.AddColumn(current, next[Name], each next[Data])),
       CrossJoin = List.Accumulate(Table.ColumnNames(AddColumns), AddColumns, (current, next) => Table.ExpandListColumn(current, next))
    in
       CrossJoin

     

    Your results will depend on how the Rest call returns results.

  • Anonymous's avatar
    Anonymous
    6 years ago

    Hi artemus,

     

    Thanks for your reply.  Perfect Solution. 

     

    Its working as expected, but I did the below minor changes in your statement. 

     

     

    = List.Accumulate(JsonConvert, each #table(type table [], { }), (current, next) => Table.AddColumn(current, next[Name], each next[Elements]))
    
    >>>>>>>> removed each and added {} in table syntax>>>>>>>>>>>>>>
    
    = List.Accumulate(JsonConvert, #table(type table [], { {} }), (current, next) => Table.AddColumn(current, next[Name], each next[Elements]))

     

     

    Regards