Как объединить строки с одинаковым идентификатором в список - PullRequest
1 голос
/ 16 апреля 2020

Как мне сделать приведенную ниже таблицу в виде списка.

Id   Name
1    Tim
1    George
2    Rachael
3    Mark
3    Blake

Я хочу, чтобы результат был таким

Id    Name
1     Tim,George
2     Rachael
3     Mark,Blake

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020

Это можно сделать за один шаг, заменив существующую статистическую функцию в Группе на на Text.Combine.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUQrJzFWK1YGw3VPzi9JTwVwjIDcoMTkjMTUHzDcG8n0Ti7LhHKecxGyg0lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Id = _t, Name = _t]),
    #"Grouped Rows" = Table.Group(Source, {"Id"}, {{"Names", each Text.Combine([Name],","), type text}})
in
    #"Grouped Rows"

. Чтобы получить это, я использовал GUI для группировки на Id столбца и сказал ему взять максимум столбца Name для моего нового Names агрегированного столбца.

Group By

Это генерирует шаг

= Table.Group(Source, {"Id"}, {{"Names", each List.Max([Name]), type text}})

и все, что вам нужно сделать, это поменять List.Max на Text.Combine.

2 голосов
/ 16 апреля 2020

попробуйте следующее, это может решить вашу проблему.

Допустим, имя вашей существующей таблицы равно yourTable, а создаваемая новая таблица - groupedNames. в представлении данных нажмите на новую таблицу и вставьте следующее:

groupedNames = calculatetable
(
    addcolumns(
        summarize(yourTable ,yourTable[Id ]),
        "Names",calculate(CONCATENATEX(yourTable,[ Name ],","))
    )   
)
1 голос
/ 16 апреля 2020

Мне нравится ответ DAX, это решение Power Query, немного более длинное, но я сделал все это с панели инструментов. Если вы вставите его, вы можете увидеть шаги аккуратно

let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUQrJzFWK1YGw3VPzi9JTwVwjIDcoMTkjNQfMNQZyfROLsuEcp5zEbKDKWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Id = _t, Name = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Id", Int64.Type}, {"Name", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Id"}, {{"allNames", each _, type table [Id=number, Name=text]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each [allNames][Name]),
#"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
#"Removed Columns" = Table.RemoveColumns(#"Extracted Values",{"allNames"}) 
in
#"Removed Columns"
...