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
Syndicate_Admin
Administrator
Administrator

Combinar archivos pero reemplazar el nombre de la columna antes de expandirlos

Hola a todos,

Estoy usando la función Combinar archivos (binarios) en Flujos de datos para anexar varios archivos de Excel (con la misma estructura) en una sola tabla. El archivo de ejemplo que estoy utilizando es un archivo que contiene los nombres de columna y la estructura correctos.

Desafortunadamente, hay raras ocasiones en que uno de los archivos de Excel tiene un nombre de columna ligeramente diferente. Por ejemplo, la mayoría de los archivos de Excel tienen un encabezado de columna llamado "Task_Name", pero en raras ocasiones el encabezado de columna podría ser "Nombre". Esto hace que Power Query quite ese archivo de la función Combinar.

Example 1.PNG

Este es un problema común planteado en los foros, pero parece que no puedo encajar ninguna de las soluciones sugeridas en mi ejemplo.

https://community.powerbi.com/t5/Power-Query/How-can-I-replace-table-column-names-before-expanding-d...

A continuación se muestra la consulta M generada automáticamente por Power Query:

let
  Source = SharePoint.Files("https://networkrail.sharepoint.com/sites/IntelligentInfrastructure-PlanningCoE", [ApiVersion = 15]),
  #"Filtered rows" = Table.SelectRows(Source, each [Folder Path] = "https://networkrail.sharepoint.com/sites/IntelligentInfrastructure-PlanningCoE/Shared Documents/Planning CoE/Imran Temp WIP/"),
  #"Filtered hidden files" = Table.SelectRows(#"Filtered rows", each [Attributes]?[Hidden]? <> true),
  #"Invoke custom function" = Table.AddColumn(#"Filtered hidden files", "Transform file", each #"Transform file"([Content])),
  #"Renamed columns" = Table.RenameColumns(#"Invoke custom function", {{"Name", "Source.Name"}}),
  #"Removed other columns" = Table.SelectColumns(#"Renamed columns", {"Source.Name", "Transform file"}),
  #"Removed errors" = Table.RemoveRowsWithErrors(#"Removed other columns", {"Transform file"}),
  #"Expanded table column" = Table.ExpandTableColumn(#"Removed errors", "Transform file", Table.ColumnNames(#"Transform file"(#"Sample file")))
in
  #"Expanded table column"

Supongo que necesito aplicar un cambio de nombre de columna antes del paso "Errores eliminados", y estaba pensando algo en la línea del código a continuación, pero esto no ha funcionado, posiblemente porque colocar "Transformar archivo" en la sintaxis no es correcto.

#"Change Name" = Table.TransformColumns(#"Removed other columns", {{"Transform file", each Table.RenameColumns(_,{{"Name", "Task_Name"}}, MissingField.Ignore)}}),

Cualquier dirección sería apreciada.

Saludos

1 ACCEPTED SOLUTION

Gracias Pat. Sospecho que las cosas funcionan de manera un poco diferente cuando se usan flujos de datos. Afortunadamente he identificado una solución. Pasos a continuación en caso de que alguien más tenga un problema similar:

Instrucciones:

  1. Cree un archivo de Excel de plantilla que contenga solo las columnas que necesita con los nombres de encabezado correctos. Esta será la consulta de ejemplo que realiza todos los pasos de extracción necesarios
  2. Ejecute la función combinar archivos (binarios) como de costumbre
  3. Seleccione la consulta de salida y cambie el nombre de la columna. A continuación, copie la sintaxis de columna cuyo nombre se ha cambiado (omita este paso si ya conoce la sintaxis)
  4. Actualice la sintaxis de este paso agregando "MissingField.Ignore" (este es un argumento MissingField opcional en la función Table.RenameColumns). Por ejemplo:

#"Renamed columns" = Table.RenameColumns(#"Promoted headers",{{"Name", "Task_Name"}}, MissingField.Ignore)​

  • Quitar el paso Cambiar nombre de columnas
  • Seleccione la consulta de la función "Transformar archivo"

Capture.PNG

  • Seleccione Editor avanzado y elimine/ deshabilite el paso "Tipo de columna cambiado".
  • Inserte el paso Columnas renombradas: tenga en cuenta que esto no diferencia entre mayúsculas y minúsculas y Data Flow M-Query utiliza un caso diferente al de Escritorio. Además, actualice el nombre del paso anterior (en este caso, el nombre del paso anterior es "Encabezados promocionados"). También tenga en cuenta que a continuación se muestra un ejemplo de cambio de nombre de varias columnas.

let
  Source = (Parameter as binary) => let
  Source = Excel.Workbook(Parameter, null, true),
  Navigation = Source{[Item = "Planning_Task_Export_Table", Kind = "Sheet"]}[Data],
  #"Promoted headers" = Table.PromoteHeaders(Navigation, [PromoteAllScalars = true]),
  #"Renamed columns" = Table.RenameColumns(#"Promoted headers",{{"II__Project", "II_Project"}, {"Name", "Task_Name"}, {"Text28", "Commentary"}, {"Text5", "Solution_Increment"}, {"Text6", "Project_Increment"}}, MissingField.Ignore)
  //#"Changed column type" = Table.TransformColumnTypes(#"Renamed columns", {{"ID", Int64.Type}, {"Unique_ID", Int64.Type}, {"Task_Name", type text}, {"Start_Date", type datetime}, {"Finish_Date", type datetime}, {"Percent_Complete", Int64.Type}, {"Baseline_Start", type datetime}, {"Baseline_Finish", type datetime}, {"Milestone", type text}, {"Solution_Increment", type number}, {"Project_Increment", type date}, {"Milestone_ID", type text}, {"Milestone_Level", type text}, {"II_Project", type text}, {"Commentary", type text}, {"Unique_ID_Successors", Int64.Type}})
in
  #"Renamed columns"
in
  Source

Referencias:

https://www.excelguru.ca/blog/2017/07/26/merge-files-different-column-headers/

https://community.powerbi.com/t5/Power-Query/How-can-I-replace-table-column-names-before-expanding-d...

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

Hola @mahoneypat, ¿alguna idea sobre este? ¿Quizás esto funciona de manera diferente en los flujos de datos?

Syndicate_Admin
Administrator
Administrator

Gracias Pat. Pensé que había seguido los pasos correctamente, pero desafortunadamente aparece el mismo error ("No se encontró la columna 'Task_Name' de la tabla".

Example 2.PNG

A continuación se muestra la M-Query revisada aplicada a la tabla de archivos Transform Sample:

let
  Source = Excel.Workbook(Parameter, null, true),
  Navigation = Source{0}[Data],
  #"Promoted headers" = Table.PromoteHeaders(Navigation, [PromoteAllScalars = true]),
  #"Renamed columns" = Table.RenameColumns(#"Promoted headers", {{Table.ColumnNames(#"Promoted headers"){2}, "Task_Name"}})
in
  #"Renamed columns"

Su sintaxis parece correcta y ese paso parece estar funcionando (los datos se muestran en la ventana de vista previa, no un error). ¿Ha intentado cambiar el archivo de ejemplo al que causa el error para que funcione directamente?

Además, ¿tiene Permitir actualización de fondo sin marcar (lo que debería) y solo necesita Actualizar vista previa (lamento preguntar lo obvio).

Palmadita

Syndicate_Admin
Administrator
Administrator

Gracias Pat. Sospecho que las cosas funcionan de manera un poco diferente cuando se usan flujos de datos. Afortunadamente he identificado una solución. Pasos a continuación en caso de que alguien más tenga un problema similar:

Instrucciones:

  1. Cree un archivo de Excel de plantilla que contenga solo las columnas que necesita con los nombres de encabezado correctos. Esta será la consulta de ejemplo que realiza todos los pasos de extracción necesarios
  2. Ejecute la función combinar archivos (binarios) como de costumbre
  3. Seleccione la consulta de salida y cambie el nombre de la columna. A continuación, copie la sintaxis de columna cuyo nombre se ha cambiado (omita este paso si ya conoce la sintaxis)
  4. Actualice la sintaxis de este paso agregando "MissingField.Ignore" (este es un argumento MissingField opcional en la función Table.RenameColumns). Por ejemplo:

#"Renamed columns" = Table.RenameColumns(#"Promoted headers",{{"Name", "Task_Name"}}, MissingField.Ignore)​

  • Quitar el paso Cambiar nombre de columnas
  • Seleccione la consulta de la función "Transformar archivo"

Capture.PNG

  • Seleccione Editor avanzado y elimine/ deshabilite el paso "Tipo de columna cambiado".
  • Inserte el paso Columnas renombradas: tenga en cuenta que esto no diferencia entre mayúsculas y minúsculas y Data Flow M-Query utiliza un caso diferente al de Escritorio. Además, actualice el nombre del paso anterior (en este caso, el nombre del paso anterior es "Encabezados promocionados"). También tenga en cuenta que a continuación se muestra un ejemplo de cambio de nombre de varias columnas.

let
  Source = (Parameter as binary) => let
  Source = Excel.Workbook(Parameter, null, true),
  Navigation = Source{[Item = "Planning_Task_Export_Table", Kind = "Sheet"]}[Data],
  #"Promoted headers" = Table.PromoteHeaders(Navigation, [PromoteAllScalars = true]),
  #"Renamed columns" = Table.RenameColumns(#"Promoted headers",{{"II__Project", "II_Project"}, {"Name", "Task_Name"}, {"Text28", "Commentary"}, {"Text5", "Solution_Increment"}, {"Text6", "Project_Increment"}}, MissingField.Ignore)
  //#"Changed column type" = Table.TransformColumnTypes(#"Renamed columns", {{"ID", Int64.Type}, {"Unique_ID", Int64.Type}, {"Task_Name", type text}, {"Start_Date", type datetime}, {"Finish_Date", type datetime}, {"Percent_Complete", Int64.Type}, {"Baseline_Start", type datetime}, {"Baseline_Finish", type datetime}, {"Milestone", type text}, {"Solution_Increment", type number}, {"Project_Increment", type date}, {"Milestone_ID", type text}, {"Milestone_Level", type text}, {"II_Project", type text}, {"Commentary", type text}, {"Unique_ID_Successors", Int64.Type}})
in
  #"Renamed columns"
in
  Source

Referencias:

https://www.excelguru.ca/blog/2017/07/26/merge-files-different-column-headers/

https://community.powerbi.com/t5/Power-Query/How-can-I-replace-table-column-names-before-expanding-d...

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.

Top Solution Authors