Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

¿Transpuesta? Consulta...

Hola a todos,

Estoy tratando de averiguar cómo obtener filas relacionadas de datos en columnas separadas. Para explicarlo, consulte la primera tabla a continuación. Así es como mis datos están estructurados actualmente.

Houshold refRef #PrimeroÚltimaEdadFecha en que el niño menor de 18 años comenzó la escuela
V18651865Padres 1Nombre33
V18651865Padre 2Nombre24
V18651865Niño 1Nombre330/01/2019 00:00
V18651865Niño 2Nombre804/02/2019 00:00

Lo que estoy tratando de hacer es estructurar estos datos para realizar una combinación de correspondencia para cada padre (no para los hijos). Así que pensé que necesito tener todos los datos relevantes para cada padre en la fila de ese padre. El problema es que los niños dentro de la familia son datos relevantes para cada padre, por lo que necesito transponer varias columnas. Por ejemplo, para cada padre necesito saber cuándo cada niño comenzó la escuela, así como su nombre y edad. Así que mi resultado (creo) tendrá que verse así:

Houshold refRef #PrimeroÚltimaEdadNombre del niño 1Nombre del niño 2Niño 1 EdadNiño 2 Ag2Fecha De inicio de la escuela del niño 1Fecha en que el niño 2 comenzó la escuela
V18651865Padres 1Nombre33Niño 1Niño 23830/01/2019 00:0004/02/2019 00:00
V18651865Padre 2Nombre24Niño 1Niño 23830/01/2019 00:0004/02/2019 00:00

Sin embargo, esto parece demasiado complicado.

Naturalmente, los hogares también pueden tener más de 2 niños....

¿Algún consejo sobre la mejor manera de que yo haga esto?

1 ACCEPTED SOLUTION
v-yingjl
Community Support
Community Support

Hola @dutifuldax ,

Todas las acciones son como los siguientes códigos en editores avanzados y te ayudaré a entenderlo:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCjO0MDNV0lGCUgGJRal5JcUKhkC2X2JuKpAyNgYSSrE6ONUaIdQameBQ65yRmZOCYioIG+gbGOobGRhaKhgYWBkY4NaIZIUFEBuY6BsYoWiMBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Houshold ref" = _t, #"Ref#" = _t, First = _t, Last = _t, Age = _t, #"Date child under 18 started school" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Houshold ref", type text}, {"Ref#", Int64.Type}, {"First", type text}, {"Last", type text}, {"Age", Int64.Type}, {"Date child under 18 started school", type text}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each [Age] > 18),
    #"Merged Queries" = Table.NestedJoin(#"Filtered Rows", {"Houshold ref"},Table.SelectRows(#"Changed Type", each [Age] <= 18), {"Houshold ref"}, "Child", JoinKind.LeftOuter),
    #"Added Custom" = Table.AddColumn(#"Merged Queries", "Custom", each let #"Removed Columns" = Table.RemoveColumns([Child],{"Houshold ref", "Ref#", "Last"}),
    #"Added Index" = Table.AddIndexColumn(#"Removed Columns", "Index", 0, 1),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
    #"Removed Columns1" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Index"}),
    #"Transposed Table" = Table.Transpose(#"Removed Columns1"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"First", type text}, {"Age", Int64.Type}, {"Date child under 18 started school", type text}, {"First_1", type text}, {"Age_2", Int64.Type}, {"Date child under 18 started school_3", type datetime}})
    in #"Changed Type1"),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"First", "Age", "Date child under 18 started school", "First_1", "Age_2", "Date child under 18 started school_3"}, {"Custom.First", "Custom.Age", "Custom.Date child under 18 started school", "Custom.First_1", "Custom.Age_2", "Custom.Date child under 18 started school_3"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Child"})
in
    #"Removed Columns"
  1. Filtrar los padres cuya edad es menor de 18 años:filter rows.png
  2. Filtre al niño cuya edad sea igual o inferior a 18 y combine la tabla con step1:Merge queries.png
  3. Cree columnas personalizadas y elimine algunas columnas repetidas:add custom columns.png
  4. Expanda las columnas personalizadas anteriores:expand column.png
  5. Eliminar columnas repetidas:Remove columns.png
  6. Cambiar el nombre de las nuevas columnas
  7. Obtendrá el resultado final esperado:final result.png

Todos los pasos se pueden ver en Pasos aplicados en el Editor de Power Query. En adición, aquí está el archivo de ejemplo espera ayudarle: PBIX

Mejores looks,
Yingjie Li

Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

5 REPLIES 5
v-yingjl
Community Support
Community Support

Hola @dutifuldax ,

Todas las acciones son como los siguientes códigos en editores avanzados y te ayudaré a entenderlo:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCjO0MDNV0lGCUgGJRal5JcUKhkC2X2JuKpAyNgYSSrE6ONUaIdQameBQ65yRmZOCYioIG+gbGOobGRhaKhgYWBkY4NaIZIUFEBuY6BsYoWiMBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Houshold ref" = _t, #"Ref#" = _t, First = _t, Last = _t, Age = _t, #"Date child under 18 started school" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Houshold ref", type text}, {"Ref#", Int64.Type}, {"First", type text}, {"Last", type text}, {"Age", Int64.Type}, {"Date child under 18 started school", type text}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each [Age] > 18),
    #"Merged Queries" = Table.NestedJoin(#"Filtered Rows", {"Houshold ref"},Table.SelectRows(#"Changed Type", each [Age] <= 18), {"Houshold ref"}, "Child", JoinKind.LeftOuter),
    #"Added Custom" = Table.AddColumn(#"Merged Queries", "Custom", each let #"Removed Columns" = Table.RemoveColumns([Child],{"Houshold ref", "Ref#", "Last"}),
    #"Added Index" = Table.AddIndexColumn(#"Removed Columns", "Index", 0, 1),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
    #"Removed Columns1" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Index"}),
    #"Transposed Table" = Table.Transpose(#"Removed Columns1"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"First", type text}, {"Age", Int64.Type}, {"Date child under 18 started school", type text}, {"First_1", type text}, {"Age_2", Int64.Type}, {"Date child under 18 started school_3", type datetime}})
    in #"Changed Type1"),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"First", "Age", "Date child under 18 started school", "First_1", "Age_2", "Date child under 18 started school_3"}, {"Custom.First", "Custom.Age", "Custom.Date child under 18 started school", "Custom.First_1", "Custom.Age_2", "Custom.Date child under 18 started school_3"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Child"})
in
    #"Removed Columns"
  1. Filtrar los padres cuya edad es menor de 18 años:filter rows.png
  2. Filtre al niño cuya edad sea igual o inferior a 18 y combine la tabla con step1:Merge queries.png
  3. Cree columnas personalizadas y elimine algunas columnas repetidas:add custom columns.png
  4. Expanda las columnas personalizadas anteriores:expand column.png
  5. Eliminar columnas repetidas:Remove columns.png
  6. Cambiar el nombre de las nuevas columnas
  7. Obtendrá el resultado final esperado:final result.png

Todos los pasos se pueden ver en Pasos aplicados en el Editor de Power Query. En adición, aquí está el archivo de ejemplo espera ayudarle: PBIX

Mejores looks,
Yingjie Li

Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Anonymous
Not applicable

Muchas gracias por tu apoyo, Yingjie.

Creo que puedo seguir la mayor parte de su solución, así que voy a tratar de replicar hoy. Buena razón para obtener más información sobre la codificación en el editor 🙂

luapdoniv
Resolver II
Resolver II

No está seguro de cómo está identificando al padre y al niño desde Name.
Si hay una manera de hacerlo, consideraría la posibilidad de crear un duplicado y filtrar una tabla para el padre y otra para el hijo.
Una tabla única de ref debe ayudar a crear la relación entre las tablas y puede colocarlas en un objeto visual de matriz.

Una vez más sólo un pensamiento rápido. Necesitará ver la muestra de datos para encontrar una solución.

Anonymous
Not applicable

Gracias por su respuesta.

Lo sentimos, debería haber mencionado - las familias están vinculadas con un número de referencia de la familia. Así que delinearé a los niños por edad. Probaré las dos mesas y veré si una matriz funcionará.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.