Matriz diagonal a tabla: cómo transformar una tabla con una diagonal con datos en una tabla adecuada

Un usuario Pregunto ✅

Ander101

Perdón por el título extraño. Tengo un conjunto de datos formado por respuestas de personas en un formulario, y se ve así:

Conjunto de datos originalConjunto de datos original

Entonces, quiero fusionar todas esas filas con el mismo número de semana y eliminar esas celdas vacías para que se vea así:

Conjunto de datos de objetivosConjunto de datos de objetivos

¿Hay alguna manera de hacer esto? Tenga en cuenta que cada semana agregamos más datos.

Lo que probé por ahora:

A estas alturas, ya he intentado transponer la matriz, fusionar las columnas y luego transponer nuevamente, pero luego tengo los números de semana sumados y no creo que la consulta pueda saber que quiero fusionar grupos de 5 columnas después.

También traté de crear nuevas tablas usando SELECTCOLUMNS, pero luego no podré agregar las tablas porque las tablas creadas a partir de fórmulas DAX no aparecen en Power Query.

jimmy801

Hola @Ander101

puede usar Table.Group y aplicar una función allí que haga el trabajo. Considere que este código combinaría el contenido de la celda si encontrara 2 celdas para una persona en una semana.

Text.Combine(List.Transform(_, each Text.From(_)),",")

en caso de que pueda adaptar el código anterior. Aquí un ejemplo practicable.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMrFQ0lEyBGIQitWBCgCREboAEBlDBCyBTBNkLZYQjim6ABCZKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [week = _t, Tom = _t, Jelena = _t, Maria = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"week", Int64.Type}, {"Tom", Int64.Type}, {"Jelena", Int64.Type}, {"Maria", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"week"}, {{"AllRows", each Table.FromColumns(List.Transform(Table.ToColumns(Table.RemoveColumns(_, {"week"})), each {Text.Combine(List.Transform(_, each Text.From(_)),",")}), Table.ColumnNames(Table.RemoveColumns(_, {"week"}))  )}}),
    #"Expanded AllRows" = Table.ExpandTableColumn(#"Grouped Rows", "AllRows", Table.ColumnNames(Table.Combine(#"Grouped Rows"[AllRows])))
in
    #"Expanded AllRows"

Copie y pegue este código en el editor avanzado en una nueva consulta en blanco para ver cómo funciona la solución.

Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos

Divertirse

Palanqueta

Hola, @Ander101

Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

Tabla:

f1.png

Puede agregar un nuevo paso como se muestra a continuación.

= Table.Group(#"Changed Type", {"Week"}, {{"Tom", each List.Sum([Tom]), type nullable number}, {"Alice", each List.Sum([Alice]), type nullable number}, {"John", each List.Sum([John]), type nullable number}, {"Judd", each List.Sum([Judd]), type nullable number}, {"Thomas", each List.Sum([Thomas]), type nullable number}})

Resultado:

f2.png

Atentamente

Alano

Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Ander101

Hola a todos,

Gracias por la ayuda. No he usado el código mencionado. Pude resolver el problema usando el comando SUMMARIZE en una nueva tabla y luego agregando los números, lo cual fue mucho más intuitivo para mí.

Hola, @Ander101

Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

Tabla:

f1.png

Puede agregar un nuevo paso como se muestra a continuación.

= Table.Group(#"Changed Type", {"Week"}, {{"Tom", each List.Sum([Tom]), type nullable number}, {"Alice", each List.Sum([Alice]), type nullable number}, {"John", each List.Sum([John]), type nullable number}, {"Judd", each List.Sum([Judd]), type nullable number}, {"Thomas", each List.Sum([Thomas]), type nullable number}})

Resultado:

f2.png

Atentamente

Alano

Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

jimmy801

Hola @Ander101

puede usar Table.Group y aplicar una función allí que haga el trabajo. Considere que este código combinaría el contenido de la celda si encontrara 2 celdas para una persona en una semana.

Text.Combine(List.Transform(_, each Text.From(_)),",")

en caso de que pueda adaptar el código anterior. Aquí un ejemplo practicable.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMrFQ0lEyBGIQitWBCgCREboAEBlDBCyBTBNkLZYQjim6ABCZKcXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [week = _t, Tom = _t, Jelena = _t, Maria = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"week", Int64.Type}, {"Tom", Int64.Type}, {"Jelena", Int64.Type}, {"Maria", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"week"}, {{"AllRows", each Table.FromColumns(List.Transform(Table.ToColumns(Table.RemoveColumns(_, {"week"})), each {Text.Combine(List.Transform(_, each Text.From(_)),",")}), Table.ColumnNames(Table.RemoveColumns(_, {"week"}))  )}}),
    #"Expanded AllRows" = Table.ExpandTableColumn(#"Grouped Rows", "AllRows", Table.ColumnNames(Table.Combine(#"Grouped Rows"[AllRows])))
in
    #"Expanded AllRows"

Copie y pegue este código en el editor avanzado en una nueva consulta en blanco para ver cómo funciona la solución.

Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos

Divertirse

Palanqueta

Alba

@Ander101

Coloque el siguiente código M en una consulta en blanco para ver los pasos. #»Filas agrupadas» es crucial

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMrFQ0lHKK83JwU7F6kCVGBGQhwoaE5CHUoYE5OHKwPKWhJ1oicVudHl0u3HIQykjAvJwD4PkTQ0IOhGsBI8TkY1AD2wcVoCUEbAe6jx0P2Mx3hB/JCMbgS0EsVhhTEAe7ovYWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Week = _t, Alice = _t, John = _t, Judd = _t, Thomas = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Alice", Int64.Type}, {"John", Int64.Type}, {"Judd", Int64.Type}, {"Thomas", Int64.Type}, {"Week", Int64.Type}}),
    colNames_ = Table.ColumnNames(#"Changed Type"), 
    tableType_ = Value.Type(#"Changed Type"),    
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Week"}, {{"Res", each Table.FromColumns(List.Transform(Table.ToColumns(_), each {List.Max(_)}), colNames_) }}),
    #"Expanded Res" = Table.ExpandTableColumn(#"Grouped Rows", "Res", {"Alice", "John", "Judd", "Thomas"}, {"Alice", "John", "Judd", "Thomas"}),
    final_ = Value.ReplaceType(#"Expanded Res", tableType_)
in
    final_

Por favor marque la pregunta resuelta cuando termine y considere dando un pulgar hacia arriba si las publicaciones son útiles.

Comuníquese conmigo en privado para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Alba

@Ander101

¿Qué es esto? ¿Cómo meto eso en una tabla?

Yo estaba hablando de algo como:

Tomás Alicia
48 1
23 2

que es lo que obtiene simplemente pegando una tabla (copiada de Excel o PBI) aquí. De lo contrario comparte la tabla en un .xlsx o. pbix Tienes que compartir la URL del archivo alojado en otro lugar: Dropbox, Onedrive… o simplemente subir el archivo a un sitio como tinyupload.com (no es necesario registrarse).

Por favor marque la pregunta resuelta cuando termine y considere dando un pulgar hacia arriba si las publicaciones son útiles.

Comuníquese conmigo en privado para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Ander101

En respuesta a Alba

@AlB Intenté pegar la tabla pero decía que no era compatible con HTML, así que intenté convertirla a HTML.

De todos modos, aquí hay un enlace al archivo de Excel con la tabla. ENLACE

Alba

H @Ander101

¿Puede mostrar las tablas (especialmente la inicial) en formato de texto-tabular para que se pueda copiar el contenido? En lugar de en una tapa de pantalla

Por favor marque la pregunta resuelta cuando termine y considere dando un pulgar hacia arriba si las publicaciones son útiles.

Comuníquese conmigo en privado para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Ander101

En respuesta a Alba

@AlB Ahí tienes. Tomó un poco más de tiempo pero ya está listo:

[table]
[tr]
[th]Semana[/th]
[th]Tomás[/th]
[th]Alicia[/th]
[th]John[/th]
[th]Judd[/th]
[th]Tomás[/th]
[/tr]
[tr]
[td]48[/td]
[td]1[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]48[/td]
[td]nulo[/td]
[td]2[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]48[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]3[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]48[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]1[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]48[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]1[/td]
[/tr]
[tr]
[td]49[/td]
[td]3[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]49[/td]
[td]nulo[/td]
[td]3[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]49[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]1[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]49[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]2[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]49[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]3[/td]
[/tr]
[tr]
[td]50[/td]
[td]1[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]50[/td]
[td]nulo[/td]
[td]3[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]50[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]2[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]50[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]2[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]50[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]2[/td]
[/tr]
[tr]
[td]51[/td]
[td]3[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]51[/td]
[td]nulo[/td]
[td]2[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]51[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]1[/td]
[td]nulo[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]51[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]3[/td]
[td]nulo[/td]
[/tr]
[tr]
[td]51[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]nulo[/td]
[td]2[/td]
[/tr]
[/table]

greg_deckler

@ Ander101: ¿Parece que en Power Query podría seleccionar sus columnas a su vez y filtrar los espacios en blanco?

Ander101

En respuesta a greg_deckler

@Greg_Deckler ¿Puedes desarrollar un poco más? Si filtro los espacios en blanco, termino eliminando datos de otras columnas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *