1
votes

Comment combiner des lignes avec le même ID dans une liste

Comment puis-je faire du tableau ci-dessous une liste.

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

Je veux que le résultat soit comme ceci

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

Toutes les idées ?


2 commentaires

Salut, pouvez-vous confirmer que le modèle consiste à regrouper les noms toutes les deux lignes? Pouvez-vous fournir plus d'informations?


Recherchez-vous une mesure DAX pour un visuel ou une solution M dans l'éditeur de requêtes ou autre chose?


3 Réponses :


2
votes

Essayez ce qui suit, cela peut résoudre votre problème.

Disons que votre nom de table existant est yourTable et que la nouvelle table à créer est groupedNames . dans la vue des données, cliquez sur un nouveau tableau et collez ce qui suit:

groupedNames = calculatetable
(
    addcolumns(
        summarize(yourTable ,yourTable[Id ]),
        "Names",calculate(CONCATENATEX(yourTable,[ Name ],","))
    )   
)


0 commentaires

1
votes

J'aime la réponse DAX, c'est la solution Power Query, un peu plus longue, mais j'ai tout fait depuis la barre d'outils. Si vous le collez, vous pouvez voir les étapes proprement

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"


0 commentaires

3
votes

Cela peut être fait en une seule étape en remplaçant une fonction d'agrégation existante dans un Group By par Text.Combine.

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

Pour obtenir cela, j'ai utilisé l'interface graphique de regrouper sur la colonne Id et lui a dit de prendre le maximum de la colonne Name pour ma nouvelle colonne agrégée Names . p >

 Group By

Cela génère l'étape

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"

et tout ce que vous avez à faire est d'échanger List.Max pour Text.Combine.


1 commentaires

Hé Alexis, j'allais réduire ma solution, mais je pensais m'en tenir à ce que j'avais réalisé à partir de la barre d'outils. Si je devais continuer, je le ferais comme vous, je savais qu'il y avait là une solution en une seule ligne!