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
AVH_Tech
Frequent Visitor

Necesita ayuda para pivotar varias columnas

Tengo un origen de datos con 44 conjuntos de datos de columna (Nombre y Valor) que quiero pivotar para tener todos los nombres como columnas y los valores correctos en cada columna.

Sé que esto suena confuso, así que aquí hay un pequeño ejemplo que muestra 3 pares (tengo 44):

Así que digamos que mis datos se ven así (na dimaging mi x_Name y x_Value coumns van hasta 44!):

Boleto0_Name0_Value1_Name1_Value2_Name2_Value
123EstadoCompletadoResoluciónFijoActivoAbc
456Zip33487ActivoDefResoltuionFijo
789EstadoCompletadoNullNullResoltuciónFijo

Los mismos valores de nombre podrían aparecer en diferentes columnas "x_Value" en otras filas.

Desencendí todas las columnas seleccionadas para proporcionar el follwowing veiw:

Table.Unpivot(Source, ?"2_Value", "2_Name", "1_Value", "1_Name", "0_Value", "0_Name", "Attribute", "Value")

BoletoAtributoValores
1230_NameEstado
1230_ValueCompletado
4560_NameZip
4560_Value33487
7890_NameEstado
7890_ValueCompletado
1231_NameResolución
1231_ValueFijo
4561_NameActivo
4561_ValueDef
7891_NameNull
7891_ValueNull
1232_NameActivo
1232_ValueAbc
4562_NameResoltuion
4562_ValueFijo
7892_NameResoltución
7892_ValueFijo

A continuación, eliminé el prefijo 0_, 1_ y 2_ para que solo se muestre "Value" y "Name".

BoletoAtributoValores
123NombreEstado
123ValorCompletado
456NombreZip
456Valor33487
789NombreEstado
789ValorCompletado
123NombreResolución
123ValorFijo
456NombreActivo
456ValorDef
789NombreNull
789ValorNull
123NombreActivo
123ValorAbc
456NombreResoltuion
456ValorFijo
789NombreResoltución
789ValorFijo

Aquí es donde entra en mi problema. Ahora quiero pivotar esta información para que termine con la vista de abajo:

Básicamente tener todos los nombres como columnas y los valores en la columna correcta.

BoletoEstadoZipResoluciónActivo
123CompletadoFijoAbc
456 33487FijoDef
789CompletadoFijo

Recibo el siguiente error: "Expression.Error: Había demasiados elementos en la enumeración para completar la operación"

Supongo que tiene algo que ver con los mismos nombres y valores que aparecen en diferentes columnas.

¿Estoy usando el enfoque correcto? ¿Qué estoy haciendo mal?

Miré manualmente agregando columnas personalizadas y usando instrucciones if para encontrar el valor de cada columna, pero replicando que más de 44 conjuntos de datos serán imposibles.

Cualquier ayuda será apreciada.

PS. estos son datos de ejemplo y no los datos reales con los que estoy trabajando.

1 ACCEPTED SOLUTION
camargos88
Community Champion
Community Champion

Hola @AVH_Tech ,

Pruebe este código m:

Dejar
Fuente: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCslMzk4tUdJRMoj3S8xNBTPCEnNKQSxDmJAhXMgIJmQEFYrViVYyNDIGigSXJJaUFgMZzvm5BTmpJakpQHZQanF+TJMlZn4ekOWWuBluZmJQM1m9iagbkRWUWAEljYxMLcyQ1Kalp2I0BaTS3sMRlcV5pTG6CwqY/FgA-", BinaryEncoding.Base64), Compression.Deflate)), deje que _t ((texto que no acepta valores NULL) [Serialized.Text ? true]) en la tabla de tipos [""blank _t) "(en blanco).1" - _t, "(en blanco).2" - _t, "(en blanco).3" á _t, "(en blanco).4" á _t, "(en blanco).5" á _t, "(en blanco).6" a _t]),
"Tipo cambiado" ? Tabla.TransformColumnTypes(Fuente,"(en blanco)", escriba text, á"(en blanco).1", escriba text, "(blank).2", escriba text,"(blank).3", escriba text,", escriba text,",4", escriba text,",5", escriba text, ?"
"Encabezados promocionados" ? Table.PromoteHeaders("Changed Type", [PromoteAllScalars-true]),
"Changed Type1" ? Table.TransformColumnTypes('''Encabezados promocionados''''''''''''''''''''''''''''''2_Value 2_Name 1_Value 1_Name 0_Value 0_Name'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Otras columnas no pivotadas" á Table.UnpivotOtherColumns('Changed Type1', '''Ticket'', 'Attribute', 'Value' y 'Value', ''Valor'' y ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Dividir columna por delimitador" - Tabla.SplitColumn('Unpivoted Other Columns', "Attribute", Splitter.SplitTextByDelimiter("_", QuoteStyle.Csv), á"Attribute.1", "Attribute.2"-),
"Changed Type2" á Table.TransformColumnTypes("Split Column by Delimiter",-"Attribute.1", Int64.Type,,"Attribute.2", escriba text?),
"Filas agrupadas" - Tabla.Grupo('Changed Type2", ''Ticket','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Añadido personalizado" - Tabla.AddColumn("Filas agrupadas", "Personalizado", cada Tabla.PromoteHeaders(Tabla.Transpose(Table.SelectColumns([Filas], "Atributo.2", "Valor")))),
"Columnas eliminadas" - Tabla.RemoveColumns('Añadido Personalizado',''Atributo.1", "Filas''),
"Personalizado Expandido" ? Tabla.ExpandTableColumn("Columnas Eliminadas", "Personalizado", "Nombre", "Valor", "Nombre", "Nombre", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Nombre", "Valor", "Valor", "Valor", "Nombre",
"Columna pivotada" á Table.Pivot("Expanded Custom", List.Distinct(?"Expanded Custom"[Name]), "Name", "Value")
En
"Columna pivotada"

Capture.PNG



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



View solution in original post

3 REPLIES 3
mahoneypat
Employee
Employee

Esto parecía divertido de hacer en la consulta, así que lo hice también. Probablemente muy similar al post anterior, pero FYI en caso de que sea útil.

Dejar
Fuente: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQyVtJRCi5JLCktBjKc83MLclJLUlOA7KDU4vyc0pLM/Dwgxy2zAizoWFycWgKkE5OSlWJ1opVMVM TM2AvKjMAiBpbGxiYYY6kJiU1DbsxII3mFpa4LM4rzclBUNj0xwIA", BinaryEncoding.Base64), Compression.Deflate)), let _t ((texto de tipo) meta [Serialized.Text ? true]) en la tabla de tipos [Ticket ? _t, "0_Name" - _t, "0_Value" - _t, "1_Name" á _t, "1_Value" , "_t" , "2_Name" _t, "2_Value" _t]),
"Tipo modificado" ? Tabla.TransformColumnTypes(Fuente, "Ticket", Int64.Type, "0_Name", texto de tipo, "0_Value", texto de tipo, "1_Name", texto de tipo, "1_Value", texto de tipo, "2_Name", escriba text, "2_Value", texto de tipo),
"Otras columnas no pivotadas" á Table.UnpivotOtherColumns("Changed Type", "Ticket", "Attribute", "Value"),
"Columnas combinadas" ? Table.CombineColumns(Table.TransformColumnTypes(?"Unpivoted Other Columns", "Ticket", escriba text, "en-US"), "Ticket", "Attribute",Combiner.CombineTextByDelimiter("&", QuoteStyle.None),"Merged"),
"Dividir columna por delimitador" - Tabla.SplitColumn(?"Columnas combinadas", "Combinado", Splitter.SplitTextByEachDelimiter('"_"', QuoteStyle.Csv, false), ''Merged.1', 'Merged.2'',
"Changed Type1" ? Table.TransformColumnTypes("Split Column by Delimiter","Merged.1", escriba text,"Merged.2", escriba text?), escriba text,),
"Columna pivotada" á Table.Pivot('Changed Type1", List.Distinct('Changed Type1"[Merged.2]), "Merged.2", "Value"),
"Texto extraído antes del delimitador" - Tabla.TransformColumns("Columna pivotada", "Combinado.1", cada Text.BeforeDelimiter(_, "&"), texto de tipo, texto de tipo, texto de tipo, texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto, escriba texto
"Columnas renombradas" - Table.RenameColumns(?"Texto extraído antes del delimitador", "Fusionado.1", "Ticket"-),
"Filas filtradas" - Table.SelectRows(?"Columnas renombradas", cada una ([Nombre] <> "null")),
"Columna pivote1" á Table.Pivot("Filas filtradas", List.Distinct("Filas filtradas"[Nombre]), "Nombre", "Valor")
En
"Columna pivotada1"

Si esto funciona para usted, por favor márquelo como solución. Los felicitaciones también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


camargos88
Community Champion
Community Champion

Hola @AVH_Tech ,

Pruebe este código m:

Dejar
Fuente: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCslMzk4tUdJRMoj3S8xNBTPCEnNKQSxDmJAhXMgIJmQEFYrViVYyNDIGigSXJJaUFgMZzvm5BTmpJakpQHZQanF+TJMlZn4ekOWWuBluZmJQM1m9iagbkRWUWAEljYxMLcyQ1Kalp2I0BaTS3sMRlcV5pTG6CwqY/FgA-", BinaryEncoding.Base64), Compression.Deflate)), deje que _t ((texto que no acepta valores NULL) [Serialized.Text ? true]) en la tabla de tipos [""blank _t) "(en blanco).1" - _t, "(en blanco).2" - _t, "(en blanco).3" á _t, "(en blanco).4" á _t, "(en blanco).5" á _t, "(en blanco).6" a _t]),
"Tipo cambiado" ? Tabla.TransformColumnTypes(Fuente,"(en blanco)", escriba text, á"(en blanco).1", escriba text, "(blank).2", escriba text,"(blank).3", escriba text,", escriba text,",4", escriba text,",5", escriba text, ?"
"Encabezados promocionados" ? Table.PromoteHeaders("Changed Type", [PromoteAllScalars-true]),
"Changed Type1" ? Table.TransformColumnTypes('''Encabezados promocionados''''''''''''''''''''''''''''''2_Value 2_Name 1_Value 1_Name 0_Value 0_Name'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Otras columnas no pivotadas" á Table.UnpivotOtherColumns('Changed Type1', '''Ticket'', 'Attribute', 'Value' y 'Value', ''Valor'' y ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Dividir columna por delimitador" - Tabla.SplitColumn('Unpivoted Other Columns', "Attribute", Splitter.SplitTextByDelimiter("_", QuoteStyle.Csv), á"Attribute.1", "Attribute.2"-),
"Changed Type2" á Table.TransformColumnTypes("Split Column by Delimiter",-"Attribute.1", Int64.Type,,"Attribute.2", escriba text?),
"Filas agrupadas" - Tabla.Grupo('Changed Type2", ''Ticket','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Añadido personalizado" - Tabla.AddColumn("Filas agrupadas", "Personalizado", cada Tabla.PromoteHeaders(Tabla.Transpose(Table.SelectColumns([Filas], "Atributo.2", "Valor")))),
"Columnas eliminadas" - Tabla.RemoveColumns('Añadido Personalizado',''Atributo.1", "Filas''),
"Personalizado Expandido" ? Tabla.ExpandTableColumn("Columnas Eliminadas", "Personalizado", "Nombre", "Valor", "Nombre", "Nombre", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Valor", "Nombre", "Valor", "Valor", "Valor", "Nombre",
"Columna pivotada" á Table.Pivot("Expanded Custom", List.Distinct(?"Expanded Custom"[Name]), "Name", "Value")
En
"Columna pivotada"

Capture.PNG



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



Gracias, tuve que hacer algunos ajustes, pero está haciendo lo que necesitaba. Mi mayor lucha es ahora el rendimiento.

Gracias por la ayuda.

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.