Power Query: cambie el nombre de las columnas en tablas anidadas de la lista (sin errores)
Power Query es una pesadilla cuando queremos combinar datos con diferentes nombres de columnas, y peor aún cuando esas columnas no están en el mismo orden. ¿Podemos incluso combinar esos datos? ¡Puedes apostar que podemos! Estamos viendo eso hoy; usar Power Query para cambiar el nombre de las columnas en tablas anidadas según una lista, sin crear errores.
En publicaciones anteriores, utilicé el método de robo de código, pero hoy no; Escribiremos el código M nosotros mismos. No te preocupes; todo saldrá bien.
Tabla de contenido
- Ejemplo
- Solución
- Promocionar encabezados
- Cambiar el nombre de las columnas
- Cambiar el nombre de las columnas de una tabla
- Combinar datos
- Conclusión
Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.
Nombre de archivo: 0158 Cambiar nombre de columnas ejemplo.zip
Tener acceso
Ejemplo
En el archivo de ejemplo, hay dos consultas: EjemploWorkbook y FindReplace .
Libro de Excel
En la consulta de ExcelWorkbook , nos conectamos a un libro de Excel con 3 hojas de trabajo (Hoja1, Hoja2 y Hoja3).
Esas hojas de trabajo tienen diferentes nombres de columnas y están en diferentes órdenes.
- Hoja1 : nombres de columnas: elemento, región, valor
- Hoja 2 : nombres de columnas: producto, región, valor
- Hoja 3 : nombres de columnas: artículo, valor, división
Los nombres de las columnas de la hoja están resaltados en las capturas de pantalla siguientes.
Si las columnas estuvieran en el mismo orden, podríamos combinarlas usando los nombres predeterminados de Columna1, Columna2 y Columna3. Luego simplemente cambiaríamos el nombre de las columnas.
Pero nuestras columnas no están en el mismo orden; por lo tanto, esto no funcionará. Por lo tanto, necesitamos hacer algo de magia de Power Query para lograrlo.
BuscarReemplazar
La consulta FindReplace contiene una tabla que detalla los nombres de las columnas que deseamos cambiar de nombre. Usaremos esto más adelante en la publicación.
Solución
Bien, ahora abordemos este problema.
Promocionar encabezados
Debido a que los datos de ejemplo son una hoja de cálculo de Excel, los encabezados se promocionan automáticamente. Los encabezados son actualmente Columna1, Columna2 y Columna3.
Para promocionar los encabezados de una tabla anidada, haga clic en el icono fx en la barra de fórmulas y finalice la siguiente fórmula:
= Table.TransformColumns(Source, {{"Data", each Table.PromoteHeaders(_), type table}})
Analicemos esto un poco:
- Table.TransformColumns : la función para realizar transformaciones en columnas
- Fuente : Nombre de la tabla sobre la que realizar la transformación (es decir, el paso anterior)
- “Datos” : La columna para realizar la transformación
- cada Table.PromoteHeaders(_) : La transformación a realizar. La palabra clave each y el guión bajo ( _ ) se utilizan porque tenemos una tabla anidada.
- tipo tabla : la salida de la transformación es un tipo de datos de tabla.
Ahora, cada una de nuestras Tablas se ve así (encabezados promocionados, pero aún diferentes).
Cambiar el nombre de las columnas
Bien, ahora podemos cambiar el nombre de la columna. Haga clic en el icono de efectos ; en la barra de fórmulas, agregue la siguiente función:
= Table.TransformColumns(Custom1, {{"Data", each Table.RenameColumns(_,{{"Product","Item"}}), type table}})
Analicemos esto también:
- Table.TransformColumns : la función para realizar transformaciones en columnas
- Personalizado1 : Nombre de la tabla en la que realizar la transformación (es decir, el paso anterior)
- “Datos” : La columna para realizar la transformación
- each Table.RenameColumns(_ : La transformación a realizar. La palabra clave each y el guión bajo ( _ ) se utilizan porque tenemos una tabla anidada.
- {{“Product”,”Item”}} : el cambio de nombre que deseamos realizar (por ejemplo, cambiar el nombre de Producto a Artículo )
- tipo tabla : la salida de la transformación es un tipo de datos de tabla.
Ahora mire la ventana de vista previa en Power Query. Dos de las Tablas muestran errores.
Esto ocurre porque sólo una tabla tiene una columna llamada Producto. Las otras tablas no tienen una columna Producto, por lo que crea un error.
Pasemos al argumento mágico MissingField.Ignore . Este es un argumento opcional de la función Table.RenameColumns. Solo sabrá realmente que está ahí si consulta la documentación de Power Query o escribe fórmulas de código M usted mismo.
Cambie la transformación de la siguiente manera:
= Table.TransformColumns(Custom1, {{"Data", each Table.RenameColumns(_,{{"Product","Item"}}, MissingField.Ignore), type table}})
- MissingField.Ignore : configuración para ignorar los campos que faltan, evitando así un error
Descubra las opciones de MissingField aquí: https://learn.microsoft.com/en-us/powerquery-m/missingfield-type
Ahora, las Tablas no muestran errores.
Ahora agreguemos todas las columnas para cambiar el nombre del paso:
= Table.TransformColumns(Custom1, {{"Data", each Table.RenameColumns(_,{{"Product","Item"},{"Division","Region"}}, MissingField.Ignore), type table}})
- {{“Producto”,”Artículo”},{“División”,”Región”}} : Esta es una lista de listas. El nombre del producto cambia a Artículo y la División pasa a llamarse Región. Podemos seguir agregando pares de nombres con la misma sintaxis.
Ahora todas las tablas anidadas tienen los mismos encabezados de columna.
Cambiar el nombre de las columnas de una tabla
Puede resultar un poco engorroso seguir agregando pares de nombres de columnas. En su lugar, podemos usar una tabla separada. Para esto sirve la consulta FindReplace .
Para cambiar el nombre de las columnas según una tabla, reemplazamos la lista de cambios de nombre con la función List.Zip que contiene los nombres de la tabla y las columnas (vea el ejemplo a continuación).
= Table.TransformColumns(Custom1, {{"Data", each Table.RenameColumns(_,List.Zip({FindReplace[Find],FindReplace[Replace]}), MissingField.Ignore), type table}})
Combinar datos
Debido a que todas las tablas tienen los mismos nombres de columnas, podemos eliminar las columnas innecesarias, luego hacer clic en el ícono Expandir y combinar los datos.
¡¡¡MAGIA!!!
Conclusión
Tratar con tablas anidadas que contienen diferentes nombres de columnas puede resultar complicado en Power Query. Pero con las técnicas de esta publicación, debería poder obtener nombres de columnas consistentes en todas las tablas anidadas.
Artículos Relacionados:
- Cómo expandir columnas dinámicamente en Power Query
- Cambiar el nombre de las columnas en Power Query cuando cambian los nombres
- Power Query: Cómo combinar archivos basados en una lista
Deja una respuesta