PowerQuery для преобразования списка записей в строку с разделителями - PullRequest
1 голос
/ 21 июня 2019

Учитывая приведенный ниже JSON, я пытаюсь загрузить его в Excel.Раздел «Рейтинги» я бы хотел отформатировать в одну строку / ячейку с разделителями.Я довольно новичок в PowerQuery, поэтому я изо всех сил пытаюсь это сделать.Мне удалось отформатировать список записей в его собственную таблицу, но я объединяю это в строку и добавляю обратно в исходную таблицу, где я рисую пробел.Буду признателен за любую помощь.

PowerQuery

let
    Source = Json.Document(File.Contents("C:\filename.json")),
    Ratings1 = Source[Ratings],
    #"Converted to Table" = Table.FromList(Ratings1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    LastStep = Table.ExpandRecordColumn(#"Converted to Table", "Column1", { "Source", "Value" })
in
    LastStep

JSON

{
    "Title": "Iron Man",
    "Year": "2008",
    "Rated": "PG-13",
    "Ratings": [{
            "Source": "Internet Movie Database",
            "Value": "7.9/10"
        }, {
            "Source": "Rotten Tomatoes",
            "Value": "93%"
        }, {
            "Source": "Metacritic",
            "Value": "79/100"
        }
    ]
}

В конечном итоге, что-то вроде ниже будет идеальным.

enter image description here

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Как насчет этого?

let
    Source = Json.Document(File.Contents("C:\filename.json")),
    #"Converted to Table" = Record.ToTable(Source),
    #"Transposed Table" = Table.Transpose(#"Converted to Table"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Title", type text}, {"Rated", type text}, {"Year", Int64.Type}}),
    #"Expanded Ratings" = Table.ExpandListColumn(#"Changed Type", "Ratings"),
    #"Expanded Ratings1" = Table.ExpandRecordColumn(#"Expanded Ratings", "Ratings", {"Source", "Value"}, {"Source", "Value"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Ratings1", "Custom", each [Source] & "=" & [Value]),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Title", "Year", "Rated"}, {{"Ratings", each Text.Combine([Custom],"#(lf)"), type text}})
in
    #"Grouped Rows"

Result

Большинство шагов здесь достаточно понятны из их названия и производятся через элементы управления графическим интерфейсом. Один хитрый шаг - когда я использую собственный агрегатор при группировании. Если вы используете графический интерфейс, Text.Combine не является опцией в диалоговом окне Group By, поэтому я выбрал Max (который становится List.Max в коде) и заменил его на Text.Combine, чтобы объединить с символом перевода строки в качестве сепаратор.

0 голосов
/ 21 июня 2019

Объединяется с символом трубы в столбец. Это то, что вы хотите?

let
Source = Json.Document(File.Contents("C:\temp\filename.json")),
Ratings1 = Source[Ratings],
#"Converted to Table" = Table.FromList(Ratings1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
LastStep = Table.ExpandRecordColumn(#"Converted to Table", "Column1", { "Source", "Value" }),
#"Added Custom" = Table.AddColumn(LastStep, "Concat", each [Source]&"|"&[Value]),
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Concat"})
in #"Removed Other Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...