Forum Discussion
Problema de Table.Group
Hola @newhopepdx,
Pruebe el siguiente código M de Power Query para crear la tabla que desee. Reemplace 'YourTable' en el paso de origen con su tabla de origen real:
let
Source = YourTable,
AddFullName = Table.AddColumn(Source, "FullName", each [FirstName] & " " & [LastName]),
Grouped = Table.Group(
AddFullName,
{"GrpId"},
{
{"GroupData", each _, type table [GrpId=number, PersonId=number, GrpLeader=number, FirstName=text, LastName=text, FullName=text]}
}
),
AddGroupName = Table.AddColumn(Grouped, "GroupName", each
let
groupTable = [GroupData],
leaderId = Record.Field(Table.First(groupTable), "GrpLeader"),
leaderRow = Table.SelectRows(groupTable, each [PersonId] = leaderId){0},
leaderFirst = leaderRow[FirstName],
leaderLast = leaderRow[LastName],
otherMembers = Table.SelectRows(groupTable, each [PersonId] <> leaderId),
otherFirsts = Table.ToList(Table.TransformColumns(otherMembers, {"FirstName", each _ & ""})),
lastNames = List.Distinct(Table.Column(groupTable, "LastName")),
groupName =
if List.Count(lastNames) = 1 then
Text.Combine({leaderFirst} & otherFirsts, " ") & " " & lastNames{0}
else
Text.Combine(List.Combine({{leaderRow[FullName]}, Table.Column(otherMembers, "FullName")}), " & ")
in
groupName
),
Final = Table.SelectColumns(AddGroupName, {"GrpId", "GroupName"})
in
Final
Si esto ayudó, márquelo como la solución para que otros también puedan beneficiarse. Y si lo encontró útil, siempre se agradecen las felicitaciones.
Gracias
Samson
Samson
¡Gracias por la rápida respuesta! Ya casi está ahí. La primera condición en la sección "if List.Count" es generar un error para los grupos 11 y 13.
groupName =
if List.Count(lastNames) = 1 then
Text.Combine({leaderFirst} & otherFirsts, " ") & " " & lastNames{0}Este es el error de la segunda fila.
- Syndicate_Admin1 year agoAdministrator
Hola @newhopepdx, disculpas por el retraso. Pruebe la solución revisada a continuación:
let Source = YourTable, AddFullName = Table.AddColumn(Source, "FullName", each [FirstName] & " " & [LastName]), Grouped = Table.Group( AddFullName, {"GrpId"}, { {"GroupData", each _, type table [GrpId=number, PersonId=number, GrpLeader=number, FirstName=text, LastName=text, FullName=text]} } ), AddGroupName = Table.AddColumn(Grouped, "GroupName", each let groupTable = [GroupData], leaderId = Record.Field(Table.First(groupTable), "GrpLeader"), leaderRow = Table.SelectRows(groupTable, each [PersonId] = leaderId){0}, leaderFirst = Text.From(leaderRow[FirstName]), leaderLast = Text.From(leaderRow[LastName]), otherMembers = Table.SelectRows(groupTable, each [PersonId] <> leaderId), otherFirsts = List.Transform(Table.Column(otherMembers, "FirstName"), Text.From), lastNames = List.Distinct(List.Transform(Table.Column(groupTable, "LastName"), Text.From)), groupName = if List.Count(lastNames) = 1 then Text.Combine({leaderFirst} & otherFirsts, " ") & " " & lastNames{0} else Text.Combine( List.Transform( List.Combine({{leaderRow[FullName]}, Table.Column(otherMembers, "FullName")}), Text.From ), " & " ) in groupName ), Final = Table.SelectColumns(AddGroupName, {"GrpId", "GroupName"}) in Final- Syndicate_Admin1 year agoAdministrator
Samson
Sí, eso funciona. Con su código como una GRAN ayuda, exploré lo que hacía cada línea y reemplaza la línea otherFirsts que proporcionó primero con esto: otherFirsts = Table.ToColumns(otherMembers){3}, y funcionó también.
¡Gracias!
- Syndicate_Admin1 year agoAdministrator
¡Impresionante, me alegro de saber que funcionó!