Как импортировать этот JSON с вложенными объектами в Excel с помощью Power Query?

Вопрос или проблема

Мне нужно импортировать файл JSON в Excel в табличном формате. Файл JSON содержит вложенные объекты, которые я хочу отобразить как данные столбцов. Я посмотрел несколько видео, прочитал документацию и форумы, но не могу с этим разобраться – полное замешательство.

Вот JSON (только две записи (“строки”))

[{
        "records": [{
                "value": "C000087",
                "metadata": {
                    "colName": "CustID"
                }
            },
            {
                "value": "421444",
                "metadata": {
                    "colName": "JobNumber"
                }
            },
            {
                "value": 3.1367982079090906,
                "metadata": {
                    "colName": "TotalSalesTax"
                }
            }
        ]
    },
    {
        "records": [{
                "value": "C000087",
                "metadata": {
                    "colName": "CustID"
                }
            },
            {
                "value": "421447",
                "metadata": {
                    "colName": "JobNumber"
                }
            },
            {
                "value": 68.0271851016993,
                "metadata": {
                    "colName": "TotalSalesTax"
                }
            }
        ]
    }
]

В Excel я использую Данные > Получить данные > Из файла, предварительный просмотр загружается, и я нажимаю Преобразовать в таблицу, затем получаю это:

вставьте описание изображения сюда

Он показывает мои две записи в виде строк (хорошо), но только один столбец для верхнего уровня объекта. Мне нужно, чтобы было 3 столбца с этими путями в JSON:

Название столбца: records[0].metadata.colName, Значение: records[0].value
Название столбца: records[1].metadata.colName, Значение: records[1].value
Название столбца: records[2].metadata.colName, Значение: records[2].value

Или это:

CustID JobNumber TotalSalesTax
C000087 421444 3.1367982079090906
C000087 421447 68.0271851016993

Это возможно?

Вот один из способов:

  • Разверните списки записей в новые строки, чтобы создать таблицу с одним столбцом названий столбцов и другим – значениями
  • Сводите названия столбцов без агрегации, используя пользовательскую функцию

Пожалуйста, изучите примененные шаги, чтобы лучше понять алгоритм.

Пользовательская функция
переименуйте fnPivotAll

//кредит: Cam Wallace  https://www.dingbatdata.com/2018/03/08/non-aggregate-pivot-with-multiple-rows-in-powerquery/

//Переименовать:  fnPivotAll 

(Source as table,
    ColToPivot as text,
    ColForValues as text)=> 

let
     PivotColNames = List.Buffer(List.Distinct(Table.Column(Source,ColToPivot))),
     #"Pivoted Column" = Table.Pivot(Source, PivotColNames, ColToPivot, ColForValues, each _),
 
    TableFromRecordOfLists = (rec as record, fieldnames as list) =>
    
    let
        PartialRecord = Record.SelectFields(rec,fieldnames),
        RecordToList = Record.ToList(PartialRecord),
        Table = Table.FromColumns(RecordToList,fieldnames)
    in
        Table,
 
    #"Added Custom" = Table.AddColumn(#"Pivoted Column", "Values", each TableFromRecordOfLists(_,PivotColNames)),
    #"Removed Other Columns" = Table.RemoveColumns(#"Added Custom",PivotColNames),
    #"Expanded Values" = Table.ExpandTableColumn(#"Removed Other Columns", "Values", PivotColNames)
in
    #"Expanded Values"

Основной код

let
    Source = Json.Document(File.Contents("C:\Users\ron\Desktop\json.json")),
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"records"}, {"records"}),
    #"Expanded records" = Table.ExpandListColumn(#"Expanded Column1", "records"),
    #"Expanded records1" = Table.ExpandRecordColumn(#"Expanded records", "records", {"value", "metadata"}, {"value", "metadata"}),
    #"Expanded metadata" = Table.ExpandRecordColumn(#"Expanded records1", "metadata", {"colName"}, {"colName"}),
    pivot = fnPivotAll(#"Expanded metadata","colName", "value"),

//установите типы данных как вам нужно
//Я лениво установил их все как текст, но вы можете использовать текст / число / процент
    typeIt = Table.TransformColumnTypes(pivot, List.Transform(Table.ColumnNames(pivot), each {_, type text}))
in
    typeIt

Результаты
вставьте описание изображения сюда

Ответ или решение

Импортирование JSON данных с вложенными объектами в Excel с помощью Power Query может показаться сложной задачей, но, следуя определённой последовательности действий, вы сможете преобразовать ваши данные в нужный формат для дальнейшего анализа. В этом ответе мы пройдём через весь процесс, начиная с загрузки JSON и заканчивая созданием таблицы в Excel.

Шаги для импорта и преобразования JSON в Excel с помощью Power Query

  1. Загрузка JSON файла в Excel:

    • Откройте Excel.
    • Перейдите на вкладку "Данные" (Data).
    • Выберите "Получить данные" (Get Data) > "Из файла" (From File) > "Из JSON" (From JSON).
    • Выберите ваш JSON файл и нажмите "Импортировать".
  2. Преобразование загруженных данных:
    После загрузки в Power Query Editor:

    • Преобразование в таблицу:
      • Первая операция — это преобразование загруженных данных в таблицу. Обычно Power Query автоматически распознаёт структуру данных.
      • Вы должны увидеть единственную колонку с именем "Column1", содержащую вложенные записи.
  3. Расширение колонок:

    • Расширьте первую колонку:
      • Нажмите на иконку двойной стрелки в заголовке колонки ("Column1") и выберите опцию "records" для ее расширения. Это создаст новую колонку с именем "records".
    • Расширение списка записей:
      • После этого у вас будет колонка "records", которая содержит список. Вам нужно будет снова нажать на иконку двойной стрелки и выбрать "records" для расширения записей, чтобы получить доступ к значениям и метаданным.
    • Расширение метаданных:
      • Выберите новую колонку, которая содержит "metadata", и расширьте её, чтобы получить "colName". Это обеспечит доступ к именам колонок, которые вы хотите использовать.
  4. Пивотирование колонок:

    • На этом этапе, чтобы преобразовать "colName" и "value" в строчки таблицы, вам потребуется создать специальную функцию для пивота. Вставьте следующую функцию в редакторе запросов Power Query:
      (Source as table, ColToPivot as text, ColForValues as text) =>
      let
       PivotColNames = List.Buffer(List.Distinct(Table.Column(Source, ColToPivot))),
       #"Pivoted Column" = Table.Pivot(Source, PivotColNames, ColToPivot, ColForValues, each _)
      in
       #"Pivoted Column"
  5. Основной код для Power Query:
    В редакторе Power Query используйте следующий код для обработки ваших данных:

    let
       Source = Json.Document(File.Contents("C:\Users\ron\Desktop\json.json")),
       #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
       #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"records"}, {"records"}),
       #"Expanded records" = Table.ExpandListColumn(#"Expanded Column1", "records"),
       #"Expanded records1" = Table.ExpandRecordColumn(#"Expanded records", "records", {"value", "metadata"}, {"value", "metadata"}),
       #"Expanded metadata" = Table.ExpandRecordColumn(#"Expanded records1", "metadata", {"colName"}, {"colName"}),
       pivot = fnPivotAll(#"Expanded metadata", "colName", "value"),
       typeIt = Table.TransformColumnTypes(pivot, List.Transform(Table.ColumnNames(pivot), each {_, type text}))
    in
       typeIt

Завершение и результаты

  • После выполнения этих шагов ваши данные будут представлены в нужной табличной структуре, с правильными колонками "CustID", "JobNumber" и "TotalSalesTax".
  • Результат будет выглядеть примерно так:
CustID JobNumber TotalSalesTax
C000087 421444 3.1367982079090
C000087 421447 68.0271851016993

Заключение

Следуя этим шагам, вы сможете успешно импортировать JSON данные в Excel и представить их в виде таблицы с нужным вам форматом и структурой. Если возникнут какие-либо ошибки или несоответствия, внимательно проверяйте структуру вашего JSON файла и шаги преобразования в Power Query.

Оцените материал
Добавить комментарий

Капча загружается...