Forum Discussion
Combinar datos y despivotar
Hi , @Chrisjr
He descargado su archivo de Excel y lo he cargado en mi lado, veo que el código de error se produce en la fumction personalizada 'Transform 5'.
Para esto, tengo alguna pregunta sobre esto:
(1) En su código M, veo el [ReferenceCarVersion], pero no puedo encontrarlo en su excel, ¿puede explicar qué es?
(2) En su función, veo que usa Table.ReorderColumns en él y usa el Hard-coded para reordenarlo, y en mi lado en este paso, se ha devuelto un código de error.
Y para esto, ¿por qué necesita reordenar las columnas de la tabla?
(3) Al final, veo que el excel que me proporcionaste tiene el mismo recuento de columnas y tiene los mismos nombres de fila. ¿Necesita despivotar la tabla de Excel y unir estos archivos de Excel en uno? Y me parece el paso, juzgas la primera columna: cuando es un número entonces le devuelves un nombre fijo, ¿verdad?
Entonces, según tengo entendido, la necesidad final para usted es que necesita crear una función dinámicamente despivotar una tabla en excel y el excel tiene la misma estructura, ¿verdad?
Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.
Saludos
Aniya Zhang
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola @v-yueyunzh-msft gracias por su respuesta.
Para responderle:
(1) (2): La columna ReferenceCarVersion es la segunda columna de cada archivo de Excel. Se ha cambiado el nombre a ReferenceCarVersion. Luego lo moví al principio (para poder compararlo con otras columnas). Después de eso, creé una columna personalizada basada en la referenceCarVersion para devolver un valor nulo cuando es un número para que pueda llenar la columna ganada.
(3) Sí, necesitan ser despivotados y unidos entonces sabiendo que hay muchos archivos y cada mes se agregan más archivos al archivo.
Con respecto a la primera columna del conjunto de datos inicial, creé una columna personalizada basada en esta para devolver un texto cuando es un número para obtener el nombre de la fila que se convertirá en una columna antes de votar.
El resultado final se vería así:
¿Necesitas que te envíe una nueva centralita con el resultado final?
Gracias
- Syndicate_Admin3 years ago
Administrator
Hi , @Chrisjr
Gracias por la rápida respuesta!
Revisé el archivo .pbix, cambia el nombre de la columna [SKODA # (lf) Enyaq] a [ReferenceCarVersion].
= Table.RenameColumns(#"Reordered Columns",{{"SKODA#(lf)Enyaq", "ReferenceCarVersion"}})Pero en el excel, no encontré la columna [SKODA # (lf) Enyaq].
¿Puedes decir dónde está la columna [SKODA#(lf)Enyaq]?
Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.
Saludos
Aniya Zhang
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
- Syndicate_Admin3 years ago
Administrator
Hola @v-yueyunzh-msft, creo que ha habido una confusión en los enlaces que obtuviste y obtuviste el pbx equivocado.
En el archivo de Excel, la columna que se ha renombrado es la colonía B.
A partir de los archivos de Excel, el resultado final sería:
dejar
Origen = Excel.Workbook(Parámetro1, null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kend="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
#"Columnas reordenadas" = Table.ReorderColumns(#"Encabezados promocionados",{"BikeAAAA", "Column1", "BikeBCB", "BikecDC", "BikeD", "BikeEE", "BikeFF", "BikeGf", "BikeIM", "BikeLM", "BikeMM", "BikeNF", "BikeMF", "BikeFF_1", "BikeLL", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25"}),
#"Filas filtradas" = Table.SelectRows(#"Columnas reordenadas", cada una ([BikeBCB] <> nula y [BikeBCB] <> 0) y ([Columna1] <> nula y [Columna1] <> "Índice ajustado final solo con paquete" y [Columna1] <> "Índice final ajustado" y [Columna1] <> "Índice final ajustado sin características técnicas" y [Columna1] <> "Solo ajuste del índice final" y [Columna1] <> "Precio de lista del índice final" y [Columna1] <> "Índice promocional final" y [Columna1] <> "Final Índice promocional con impuestos anuales" y [Columna1] <> "Índice promocional final con consumo" y [Columna1] <> "Índice promocional final con Ecobonus" y [Columna1] <> "Índice promocional final con financiamiento" y [Columna1] <> "Índice promocional final con impuestos de lanzamiento" y [Columna1] <> "Índice promocional final con paquetes y en la opción 1" y [Columna1] <> "Índice promocional final con paquetes y en la opción 2" y [Columna1] <> "Índice promocional final con bonificación de acciones" y [Columna1] <> "Índice de transacción final con paquetes e impuestos anuales" y [Columna1] <> "Índice de transacción final con paquetes y consumo" y [Columna1] <> "Índice de transacción final con paquetes y ecobonus" y [Columna1] <> "Índice de transacción final con paquetes y financiamiento" y [Columna1] <> "Índice de transacción final con paquetes e impuestos de lanzamiento" y [Columna1] <> "Índice de transacción final con paquetes y bonificación de acciones" y [Columna1] < > "Índice de transacciones finales con paquetes y en la opción 1" y [Columna 1] <> "Índice de transacciones finales con paquetes y en la opción 2" y [Columna 1] <> "Índice de precios de transacción final")),
#"Added Custom" = Table.AddColumn(#"Filas filtradas", "Personalizado", cada uno si intenta Value.Is(Number.From([#"Column1"]), escriba number) de lo contrario false then "CarVerson" else [#"Column1"]),
#"Reordenado Columns1" = Table.ReorderColumns(#"Added Custom",{"BikeAAAA", "Custom", "Column1", "BikeBCB", "BikecDC", "BikeD", "BikeEE", "BikeFF", "BikeGf", "BikeIM", "BikeLM", "BikeMM", "BikeNF", "BikeMF", "BikeFF_1", "BikeLL", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25"}),
#"Columnas eliminadas" = Table.RemoveColumns(#"Columnas reordenadas1",{"Columna1", "Columna16", "Columna17", "Columna18", "Columna19", "Columna20", "Columna21", "Columna22", "Columna23", "Columna24", "Column25"}),
#"Changed Type" = Table.TransformColumnTypes(#"Columnas eliminadas",{{"BikeAAAA", type text}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type", "Custom.1", each try (if Number.FromText([BikeAAAA]) > 0 then null else null) else [BikeAAAA]),
#"Reordenado columnas2" = Table.ReorderColumns(#"Añadido personalizado1",{"Custom.1", "BikeAAAA", "Personalizado", "BikeBCB", "BikecDC", "BikeD", "BikeEE", "BikeFF", "BikeGf", "BikeIM", "BikeLM", "BikeMM", "BikeNF", "BikeMF", "BikeFF_1", "BikeLL"}),
#"Renamed Columns" = Table.RenameColumns(#"Reorder Columns2",{{"Custom.1", "ReferenceCar"}}),
#"Filled Down" = Table.FillDown(#"Renamed Columns",{"ReferenceCar"}),
#"Columnas eliminadas1" = Table.RemoveColumns(#"Rellenado",{"BikeAAAA"}),
#"Agregado índice" = Table.AddIndexColumn(#"Columnas eliminadas1", "Índice", 0, 1, Int64.Type),
Custom1 = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 24), Int64.Type}}),
#"Renamed Columns1" = Table.RenameColumns(Custom1,{{"Custom", "Brand"}}),
#"Trimmed Text" = Table.TransformColumns(#"Renamed Columns1",{{"Brand", Text.Trim, type text}}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Trimmed Text", {"ReferenceCar", "Brand", "Index"}, "Attribute", "Value"),
#"Added Index1" = Table.AddIndexColumn(#"Unpivoted Other Columns", "Index.1", 0, 1, Int64.Type),
#"Added Conditional Column" = Table.AddColumn(#"Added Index1", "Custom", each if [Brand] = "CarVerson" then [Value] else null),
#"Sorted Rows" = Table.Sort(#"Added Conditional Column",{{"Index", Order.Ascending}, {"Attribute", Order.Ascending}, {"Index.1", Order.Ascending}}),
#"Filled Down1" = Table.FillDown(#"Sorted Rows",{"Custom"}),
#"Filas filtradas1" = Table.SelectRows(#"Filled Down1", each ([Brand] <> "CarVerson")),
#"Columnas eliminadas2" = Table.RemoveColumns(#"Filas filtradas1",{"Índice"}),
#"Renamed Columns2" = Table.RenameColumns(#"Columnas eliminadas2",{{"Brand", "IndexType"}, {"Attribute", "BikeModel"}}),
#"Reordenar columnas3" = Table.ReorderColumns(#"Renamed Columns2",{"ReferenceCar", "IndexType", "BikeModel", "Custom", "Value", "Index.1"}),
#"Columnas renombradas3" = Table.RenameColumns(#"Reorder Columns3",{{"Custom", "BikeVersion"}})
in
#"Renamed Columns3"Por favor, hágamelo saber si necesita más información.
- Syndicate_Admin3 years ago
Administrator
Hi , @Chrisjr
Hola, gracias por su paciente explicación de su necesidad, actualizo la función Table.ReorderColumns() en su código M, y la hago dinámica para obtener los nombres de columna, puede intentar usar este código M en el "Editor avanzado" para probar.
let Source = Excel.Workbook(Folder.Files("C:\Users\admin\OneDrive - Contoso\zyy")[Content]{1}, null, true), Sheet1_Sheet = Source[Data]{0}, #"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]), #"Reordered Columns" = Table.ReorderColumns(#"Promoted Headers", {Table.ColumnNames(#"Promoted Headers"){1}} & {Table.ColumnNames(#"Promoted Headers"){0}} & List.Skip(Table.ColumnNames(#"Promoted Headers"),2) ), #"Filtered Rows" = Table.SelectRows(#"Reordered Columns", each (Table.ColumnNames(#"Promoted Headers"){2} <> null and Table.ColumnNames(#"Promoted Headers"){2} <> 0) and ([Column1] <> null and [Column1] <> "Final Adjusted Index only with Pack" and [Column1] <> "Final Index adjusted" and [Column1] <> "Final Index adjusted without technical features" and [Column1] <> "Final Index adjustment only" and [Column1] <> "Final Index list price" and [Column1] <> "Final Promo Index" and [Column1] <> "Final Promo Index with Annual Taxes" and [Column1] <> "Final Promo Index with Consumption" and [Column1] <> "Final Promo Index with Ecobonus" and [Column1] <> "Final Promo Index with Financing" and [Column1] <> "Final Promo Index with Launch Taxes" and [Column1] <> "Final Promo Index with Packs & at choice 1" and [Column1] <> "Final Promo Index with Packs & at choice 2" and [Column1] <> "Final Promo Index with Stock Bonus" and [Column1] <> "Final Transaction Index W/ Packs & Annual Taxes" and [Column1] <> "Final Transaction Index W/ Packs & Consumption" and [Column1] <> "Final Transaction Index W/ Packs & Ecobonus" and [Column1] <> "Final Transaction Index W/ Packs & Financing" and [Column1] <> "Final Transaction Index W/ Packs & Launch Taxes" and [Column1] <> "Final Transaction Index W/ Packs & Stock Bonus" and [Column1] <> "Final Transaction Index with Packs & at choice 1" and [Column1] <> "Final Transaction Index with Packs & at choice 2" and [Column1] <> "Final Transaction Price Index")), #"Added Custom" = Table.AddColumn(#"Filtered Rows", "Custom", each if try Value.Is(Number.From([#"Column1"]), type number) otherwise false then "CarVerson" else [#"Column1"]), #"Reordered Columns1" = Table.ReorderColumns(#"Added Custom",List.InsertRange(Table.ColumnNames(#"Reordered Columns"),1,{"Custom"})), #"Removed Columns" = Table.RemoveColumns(#"Reordered Columns1",{"Column1", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25"}), #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{Table.ColumnNames(#"Removed Columns"){0}, type text}}), #"Renamed Columns4" = Table.RenameColumns(#"Changed Type",{{Table.ColumnNames(#"Changed Type"){0}, "Column1"}}), #"Added Custom1" = Table.AddColumn(#"Renamed Columns4", "Custom.1", each try (if Number.FromText([Column1]) > 0 then null else null) otherwise [Column1]), #"Reordered Columns2" = Table.ReorderColumns(#"Added Custom1",{"Custom.1"} & List.RemoveLastN(Table.ColumnNames(#"Added Custom1"))), #"Renamed Columns" = Table.RenameColumns(#"Reordered Columns2",{{"Custom.1", "ReferenceCar"}}), #"Filled Down" = Table.FillDown(#"Renamed Columns",{"ReferenceCar"}), #"Removed Columns1" = Table.RemoveColumns(#"Filled Down",{"Column1"}), #"Added Index" = Table.AddIndexColumn(#"Removed Columns1", "Index", 0, 1, Int64.Type), Custom1 = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 24), Int64.Type}}), #"Renamed Columns1" = Table.RenameColumns(Custom1,{{"Custom", "Brand"}}), #"Trimmed Text" = Table.TransformColumns(#"Renamed Columns1",{{"Brand", Text.Trim, type text}}), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Trimmed Text", {"ReferenceCar", "Brand", "Index"}, "Attribute", "Value"), #"Added Index1" = Table.AddIndexColumn(#"Unpivoted Other Columns", "Index.1", 0, 1, Int64.Type), #"Added Conditional Column" = Table.AddColumn(#"Added Index1", "Custom", each if [Brand] = "CarVerson" then [Value] else null), #"Sorted Rows" = Table.Sort(#"Added Conditional Column",{{"Index", Order.Ascending}, {"Attribute", Order.Ascending}, {"Index.1", Order.Ascending}}), #"Filled Down1" = Table.FillDown(#"Sorted Rows",{"Custom"}), #"Filtered Rows1" = Table.SelectRows(#"Filled Down1", each ([Brand] <> "CarVerson")), #"Removed Columns2" = Table.RemoveColumns(#"Filtered Rows1",{"Index"}), #"Renamed Columns2" = Table.RenameColumns(#"Removed Columns2",{{"Brand", "IndexType"}, {"Attribute", "BikeModel"}}), #"Reordered Columns3" = Table.ReorderColumns(#"Renamed Columns2",{"ReferenceCar", "IndexType", "BikeModel", "Custom", "Value", "Index.1"}), #"Renamed Columns3" = Table.RenameColumns(#"Reordered Columns3",{{"Custom", "BikeVersion"}}) in #"Renamed Columns3"Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.
Saludos
Aniya Zhang
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
- Syndicate_Admin3 years ago
Administrator
Muchas gracias por su tiempo @v-yueyunzh-msft