Я создаю пользовательский соединитель для PowerBI с помощью PowerQuery SDK, его целью будет считывание данных из JSON через HTTP API и преобразование их в табличное представление.
Я могу читать JSONответ, ответ представляет собой массив объектов JSON.Я использую эту функцию PowerQuery для чтения этого результата в таблицу:
responseJson = Get30DaysHistory(),
#"TestTable" = Table.FromRecords(responseJson)
in
#"TestTable";
Это работает до тех пор, пока все объекты содержат одинаковые поля, но если поля в записи различаются, возникает ошибка.Я пытаюсь понять, как применить эту функцию к моему приведенному выше коду, я просто хочу, чтобы в пропущенных полях были добавлены нулевые значения:
https://docs.microsoft.com/en-us/powerquery-m/missingfield-usenull
вот пример вывода JSON,для добавленного контекста рассматриваемое поле, которое выдает ошибку с этим образцом данных, является "pageId", поскольку оно присутствует в первой записи, но не во второй:
[
{
"type": "page",
"uri": "://test/url": {
"name": "Chrome",
"version": "69.0.3497",
"os": "Windows"
},
"appId": -323232,
"pageId": "nVTd9XqSEy1mPhaWGNlW9GWw5gU",
"ts": 1538768760000,
"lastTs": 1538768809248,
"duration": 49248
},
{
"type": "feature",
"uri": "://test/url",
"parsedUserAgent": {
"name": "Chrome",
"version": "69.0.3497",
"os": "Windows"
},
"appId": -323232,
"featureId": "diOobYRaY56e191qW2a7_pXGIzk",
"ts": 1538768802811
},
{
"type": "feature",
"uri": "://test/url",
"parsedUserAgent": {
"name": "Chrome",
"version": "69.0.3497",
"os": "Windows"
},
"appId": -323232,
"featureId": "_Net3QEcQ2mmg4z9wV95Gqkvx0k",
"ts": 1538768803809
},
{
"type": "page",
"uri": "://test/url",
"parsedUserAgent": {
"name": "Chrome",
"version": "69.0.3497",
"os": "Windows"
},
"appId": -323232,
"pageId": "cQIxuputqop_FYvfM9ehhd2CUvI",
"ts": 1538768809248,
"lastTs": 1538768840412,
"duration": 31164
}
]
Обновленос решением:
shared Testamun.Contents = (optional message as text) =>
let
responseJson = Get30DaysHistory("testval"),
headers =
let
allHeaders = List.Combine(List.Transform(responseJson, Record.FieldNames)),
uniqueHeaders = List.Distinct(allHeaders)
in
uniqueHeaders,
testTable = Table.FromRecords(responseJson, headers, MissingField.UseNull)
in
testTable;