Sam_85
Hola,
tengo diferentes clientes [Column] en diferentes años [Column]. Ahora quiero crear una nueva tabla, supongo, con el cliente y una matriz que incluya los años como este «2017, 2018, 2019» o «2017, 2019». Solo si el cliente estuvo activo en un año, quiero obtener los años en una fila.
¿Es algo así posible?
Gracias un cordial saludo.
Sam
Anónimo
En respuesta a Sam_85
Coloque este código M en el Editor avanzado en PQ y ejecútelo. Verás cómo se hace.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wci4tLjFU0lEyMjAwUIrVgQgYoQtAVBiiq0ASMEbXYoxdhRG6ocYIAROIGUboAsZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Customer = _t, Year = _t]),
#"Grouped Rows" = Table.Group(Source, {"Customer"}, {{"AllCustYears", each _, type table [Customer=text, Year=text]}}),
#"Added Custom2" = Table.AddColumn(#"Grouped Rows", "OnlyYears", each [AllCustYears][Year]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"AllCustYears"}),
#"Added Custom" = Table.AddColumn(#"Removed Columns", "Years", each Text.Combine([OnlyYears], ",")),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"OnlyYears"})
in
#"Removed Columns1"
Mejor
D
Anónimo
¿No es un trabajo fácil para Power Query?
Mejor
D
Sam_85
En respuesta a Anónimo
Hola cariño,
Supongo que es fácil con M, pero no para un simple usuario como yo :). ¿Qué fórmula debo usar para realizar la salida en power query?
Anónimo
En respuesta a Sam_85
Coloque este código M en el Editor avanzado en PQ y ejecútelo. Verás cómo se hace.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wci4tLjFU0lEyMjAwUIrVgQgYoQtAVBiiq0ASMEbXYoxdhRG6ocYIAROIGUboAsZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Customer = _t, Year = _t]),
#"Grouped Rows" = Table.Group(Source, {"Customer"}, {{"AllCustYears", each _, type table [Customer=text, Year=text]}}),
#"Added Custom2" = Table.AddColumn(#"Grouped Rows", "OnlyYears", each [AllCustYears][Year]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"AllCustYears"}),
#"Added Custom" = Table.AddColumn(#"Removed Columns", "Years", each Text.Combine([OnlyYears], ",")),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"OnlyYears"})
in
#"Removed Columns1"
Mejor
D
Sam_85
En respuesta a Anónimo
Hola @Anonimo,
Traté de entrar en esto
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wci4tLjFU0lEyMjAwUIrVgQgYoQtAVBiiq0ASMEbXYoxdhRG6ocYIAROIGUboAsZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Customer = _t, Year = _t]),
pero necesito esto en su totalidad?
¿De dónde viene ese «AllCustYears»?
#"Grouped Rows" = Table.Group(Source, {"Customer"}, {{"AllCustYears", each _, type table [Customer=text, Year=text]}}),
#"Added Custom2" = Table.AddColumn(#"Grouped Rows", "OnlyYears", each [AllCustYears][Year]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"AllCustYears"}),
#"Added Custom" = Table.AddColumn(#"Removed Columns", "Years", each Text.Combine([OnlyYears], ",")),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"OnlyYears"})
Anónimo
En respuesta a Sam_85
Amigo, esta es una demostración de cómo debería funcionar en M. Tomas esto, lo inspeccionas, lo entiendes y luego lo aplicas a tu modelo.
Mejor
D
Sam_85
En respuesta a Anónimo
@Anónimo
gracias, supongo que me meto en eso. Quedan 2 preguntas.
para evitar que se eliminen todas las demás columnas, ¿debo agregarlas a {«KundeID»}?
#"Group" = Table.Group(#"Add Column 2", {"KundeID"}, {{"GroupYear", each _, type table [KundeID=text, Jahr=text]}}),
Y hasta ahora todo bien. ¿Hay alguna forma de reducir el resultado por fila a un valor distinto?
Gracias de antemano.
saludos sam
Anónimo
En respuesta a Sam_85
Hola.
No. Debe crear una referencia a la tabla original, eliminar los duplicados de acuerdo con sus reglas, luego realizar la agregación como se indicó anteriormente y luego volver a unirse a la tabla original seleccionando las columnas que desee.
Lo mejor es aprender algo sobre Power Query.
Mejor
D
Sam_85
En respuesta a Anónimo
@Anónimo
Jeah, lo hice, creé una segunda tabla (en Excel, necesitaba hacer otra consulta), eliminé todas las columnas excepto Cliente y Año, distinguí con ambas columnas. Entonces use su fórmula y funcionó perfectamente (no olvide establecer una relación).
#"Andere entfernte Spalten" = Table.SelectColumns(#"Add Column 2",{"KundeID", "Jahr"}),
#"Entfernte Duplikate" = Table.Distinct(#"Andere entfernte Spalten"),
#"Group" = Table.Group(#"Entfernte Duplikate", {"KundeID"}, {{"GroupYear", each _, type table [KundeID=text, Jahr=text]}}),
#"Add Custom 1" = Table.AddColumn(#"Group", "OnlyYears", each [GroupYear][Jahr]),
#"Removed Column 1" = Table.RemoveColumns(#"Add Custom 1",{"GroupYear"}),
#"Add Custom 2" = Table.AddColumn(#"Removed Column 1", "Jahre", each Text.Combine([OnlyYears], ",")),
#"Removed Column 2" = Table.RemoveColumns(#"Add Custom 2",{"OnlyYears"})
Muchas gracias por esos consejos :).
mariusz
Hola @Sam_85
Puedes usar CONCATINATEX()
CONCATENATEX( <table>, <expression>, [delimiter] )
https://docs.microsoft.com/en-us/dax/concatenatex-function-dax
mariusz
Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución.
Por favor, siéntase libre de conectarse conmigo.
LinkedIn
Sam_85
En respuesta a mariusz
Hola @Mariusz,
probé esta fórmula pero con 4 millones de filas, funciona muy, muy lento (no terminó en absoluto después de 30 minutos). ¿Qué está pasando en esta fórmula? ¿Y es más capaz que la Fórmula M cuando se trata de rendimiento?
mariusz
En respuesta a Sam_85
Hola @Sam_85
Puedo imaginar que será, la solución de consulta de energía @Anonymous probablemente será una mejor opción
mariusz
Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución.
Por favor, siéntase libre de conectarse conmigo.
LinkedIn