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 ?
3 Réponses :
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 ],",")) ) )
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"
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 >
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
.
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!
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?