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.
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!):
Boleto | 0_Name | 0_Value | 1_Name | 1_Value | 2_Name | 2_Value |
123 | Estado | Completado | Resolución | Fijo | Activo | Abc |
456 | Zip | 33487 | Activo | Def | Resoltuion | Fijo |
789 | Estado | Completado | Null | Null | Resoltución | Fijo |
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")
Boleto | Atributo | Valores |
123 | 0_Name | Estado |
123 | 0_Value | Completado |
456 | 0_Name | Zip |
456 | 0_Value | 33487 |
789 | 0_Name | Estado |
789 | 0_Value | Completado |
123 | 1_Name | Resolución |
123 | 1_Value | Fijo |
456 | 1_Name | Activo |
456 | 1_Value | Def |
789 | 1_Name | Null |
789 | 1_Value | Null |
123 | 2_Name | Activo |
123 | 2_Value | Abc |
456 | 2_Name | Resoltuion |
456 | 2_Value | Fijo |
789 | 2_Name | Resoltución |
789 | 2_Value | Fijo |
A continuación, eliminé el prefijo 0_, 1_ y 2_ para que solo se muestre "Value" y "Name".
Boleto | Atributo | Valores |
123 | Nombre | Estado |
123 | Valor | Completado |
456 | Nombre | Zip |
456 | Valor | 33487 |
789 | Nombre | Estado |
789 | Valor | Completado |
123 | Nombre | Resolución |
123 | Valor | Fijo |
456 | Nombre | Activo |
456 | Valor | Def |
789 | Nombre | Null |
789 | Valor | Null |
123 | Nombre | Activo |
123 | Valor | Abc |
456 | Nombre | Resoltuion |
456 | Valor | Fijo |
789 | Nombre | Resoltución |
789 | Valor | Fijo |
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.
Boleto | Estado | Zip | Resolución | Activo |
123 | Completado | Fijo | Abc | |
456 | 33487 | Fijo | Def | |
789 | Completado | Fijo |
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.
Solved! Go to Solution.
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"
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
To learn more about Power BI, follow me on Twitter or subscribe on YouTube.
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"
Gracias, tuve que hacer algunos ajustes, pero está haciendo lo que necesitaba. Mi mayor lucha es ahora el rendimiento.
Gracias por la ayuda.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |