Генерация кода JSON в Power BI и Power Query
Текст представляет собой адаптированный перевод статьи Chris Webb (Крис Вебб),
оригинал — Generating JSON In Power BI And Power Query. Рассматривается англоязычный Power Query.
Крис Вебб (Chris Webb) — независимый эксперт, консультант по технологиям Analysis Services, MDX, Power Pivot, DAX, Power Query и Power BI. Его блог — это кладезь информации на тему перечисленных технологий. Вот уже более 10 лет он пишет про BI-решения от Microsoft. Количество его статей перевалило за 1000! Также Крис выступает на большом количестве различных конференций вроде SQLBits, PASS Summit, PASS BA Conference, SQL Saturdays и участвует в различных сообществах.
Крис любезно разрешил нам переводить его статьи на русский язык. И это одна из них.

Генерация кода JSON в Power BI и Power Query

Часто при вызове веб-сервисов из Power BI или Power Query требуется встроить в запрос код JSON. Язык М легко позволяет сделать это с помощью функции Json.FromValue(), но в справке приведён только один пример по этой функции.
В данной статье мы рассмотрим несколько примеров как работать с Json.FromValue().

Для начала, вот код функции, которую мы назвали GetJson(). Она принимает параметр – данные любого типа, передаёт их в Json.FromValue() и возвращает JSON представление входных данных в виде текста.
(InputData) =>  
let  
      JsonOutput = Json.FromValue(InputData),  
      OutputText = Text.FromBinary(JsonOutput)  
in  
      OutputText
Теперь давайте посмотрим, что возвращается для различных типов данных.

Таблицы

Возьмём следующую таблицу на листе, пусть она называется «Sales»:
Следующий запрос берёт данные из нашей таблицы и вызывает функцию GetJson(), определённую выше:
let  
      Source = Excel.CurrentWorkbook(){[Name="Sales"]}[Content],  
      #"Changed Type" = Table.TransformColumnTypes(  
      Source,  
      {{"Month", type text}, {"Sales", Int64.Type}}),  
      Output = GetJson(#"Changed Type")   
in  
      Output
Он возвращает JSON-массив объектов:
[  
{"Month":"January","Sales":1},  
{"Month":"February","Sales":2},  
{"Month":"March","Sales":3}  
]
Списки

Списки языка М представлляются как JSON-массивы, arrays, поэтому запрос:
GetJson({"Apples", "Oranges", "Pears"})
…возвращает
["Apples","Oranges","Pears"]
и
GetJson({{1,"Apples"}, {2,"Oranges"}, {3,"Pears"}})
…возвращает
[[1,"Apples"],[2,"Oranges"],[3,"Pears"]]
Записи

Записи языка М представляются как JSON-объекты, поэтому:
GetJson([month="January", product="Apples", sales=1])
…возвращает
{"month":"January","product":"Apples","sales":1}
Вложенные Данные

Наконец, в языке М возможны вложенные структуры данных: списки таблиц, записи, содержащие списки и т.д. Они также могут быть преобразованы в формат JSON.
В нижепредставленном примере запись содержит текстовое значение, список и таблицу (созданную с помощью #table):
GetJson(  
[  
   product="Apples",  
   colours={"Red","Green"},  
   sales=  
      #table({"Month", "Sales"},  
         {  
            {"January", 1},  
            {"February", 2}  
         }  
      )  
   ]  
)
…JSON-код:
{  
   "product":"Apples",  
   "colours":[  
      "Red",  
      "Green"  
   ],  
   "sales":[  
      {  
         "Month":"January",  
         "Sales":1  
      },  
      {  
         "Month":"February",  
         "Sales":2  
      }  
   ]  
}