Forum Discussion
Pivotar una tabla en Power Query
Hola equipo,
Tengo una tabla como la de abajo
Y quiero pivotar esta tabla con agregación, por lo que la tabla final que se requiere después de la transformación en Power Query es como se muestra a continuación:
| A | B | C |
| 1 | 2 | 3 |
| 4 | 5 | 6 |
¿Cómo podemos lograrlo? Recibo un error debido a valores duplicados en Column1.
11 Replies
- Syndicate_Admin
Administrator
@Nikhil_567 , Intente usar esta consulta
dejar
Source = YourTable, // Reemplácelo con el nombre real de su tabla
GroupedRows = Table.Group(Source, {"Column1"}, {{"AllData", cada _, tabla de tipo [Column1=texto que acepta valores NULL, Column2=número que acepta valores NULL]}}), ),
AddedIndex = Table.TransformColumns(GroupedRows, {"AllData", each Table.AddIndexColumn(_, "Index", 1, 1, Int64.Type)}),
ExpandedTable = Table.ExpandTableColumn(AddedIndex, "AllData", {"Column1", "Column2", "Index"}),
PivotedTable = Table.Pivot(ExpandedTable, List.Distinct(ExpandedTable[Column1]), "Column1", "Column2")
en
Tabla pivotante - Syndicate_Admin
Administrator
Pruebe esto
Crear 2 medidas
min amount = MIN(yourdata[Column2])max amount = MAX(yourdata[Column2])Cree un objeto visual de matriz con
Cambiar valores a filas
Eliminar totales
Cambiar el nombre de los valores a un solo espacio
Haga clic en los botones [aceptar solución] y pulgares hacia arriba, por favor
- Syndicate_Admin
Administrator
tienen que hacerlo en Power Query
- Syndicate_Admin
Administrator
Hola @Nikhil_567
Por favor, pruebe esto:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTJUitWJVnICsozALGcgyxjMAsmawGVN4bJmSrGxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", Int64.Type}}), #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type), IndexGrouping = Table.AddColumn(#"Added Index", "IndexGrouping", each Number.IntegerDivide([Index], 3), Int64.Type), #"Removed Columns" = Table.RemoveColumns(IndexGrouping,{"Index"}), PivotedTable = Table.Pivot( #"Removed Columns", List.Distinct(#"Removed Columns"[Column1]), "Column1","Column2" ), #"Removed Columns1" = Table.RemoveColumns(PivotedTable,{"IndexGrouping"}) in #"Removed Columns1"- Syndicate_Admin
Administrator
Hola @danextian ,
Ha utilizado el número 3 al agrupar índices.
En el ejemplo dado, había 3 columnas, sin embargo, en los datos PROD reales no es fijo, puede ser 30, 80 o así sucesivamente.
¿Alguna improvisación, por favor?
- Syndicate_Admin
Administrator
Hola @
Consulte el código actualizado a continuación
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTJUitWJVnICsozALGcgyxjMAsmawGVN4bJmSrGxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", Int64.Type}}), #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type), IndexGrouping = Table.AddColumn(#"Added Index", "IndexGrouping", each let DistinctRows = List.Count(List.Distinct(#"Added Index"[Column1])) in Number.IntegerDivide([Index], DistinctRows), Int64.Type), #"Removed Columns" = Table.RemoveColumns(IndexGrouping,{"Index"}), PivotedTable = Table.Pivot( #"Removed Columns", List.Distinct(#"Removed Columns"[Column1]), "Column1","Column2" ), #"Removed Columns1" = Table.RemoveColumns(PivotedTable,{"IndexGrouping"}) in #"Removed Columns1"La actualización se realiza en el paso aplicado IndexGrouping, con una variable adicional que cuenta los valores distintos de Column1 del paso anterior. Si esto no resuelve el problema, proporcione datos de muestra que representen con precisión los datos reales, en lugar de un ejemplo demasiado simplificado. Incluya cualquier otra información relevante.
- Syndicate_Admin
Administrator
Gracias por la preocupación de danextian, speedramps y bhanu_gautam sobre este tema.
Hola, @Nikhil_567
Tal vez puedas probar el siguiente código M, espero que te ayude:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTJUitWJVnICsozALGcgyxjMAsmawGVN4bJmSrGxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", Int64.Type}}), #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type), ColumnCount = Table.RowCount(Table.Distinct(Table.SelectColumns(#"Changed Type", {"Column1"}))), IndexGrouping = Table.AddColumn(#"Added Index", "IndexGrouping", each Number.IntegerDivide([Index], ColumnCount), Int64.Type), #"Removed Columns" = Table.RemoveColumns(IndexGrouping,{"Index"}), PivotedTable = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[Column1]), "Column1", "Column2"), #"Removed Columns1" = Table.RemoveColumns(PivotedTable,{"IndexGrouping"}) in #"Removed Columns1"Adjunto el archivo pbix correspondiente a continuación.
Espero que mis sugerencias le den buenas ideas, si tiene más preguntas, aclare en una respuesta de seguimiento.
Saludos
Fen Ling,
Si esta publicación Ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.- Syndicate_Admin
Administrator
Hola
Gracias por tomarse el tiempo y responderme una solución, sin embargo, esto no ayuda.
He adjuntado los datos reales en la ruta dada aquí
Tenga en cuenta que necesitamos pivotar la columna K (failed_record.1) para la cual los valores serán la columna L (failed_record.2)