Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
1 year ago

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:

ABC
123
456

¿Cómo podemos lograrlo? Recibo un error debido a valores duplicados en Column1.

11 Replies

  • @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

  • 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

  • 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        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.

  • 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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)