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
- Syndicate_Admin1 year agoAdministrator
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!