Power Query: cambie el nombre de las columnas en tablas anidadas de la lista (sin errores)

Índice
  1. Ejemplo
  2. Solución
    1. Promocionar encabezados
    2. Cambiar el nombre de las columnas
    3. Cambiar el nombre de las columnas de una tabla
    4. Combinar datos
  3. Conclusión

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).

Hoja de trabajo conectada

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.

Vistas de hoja: diferentes nombres de columnas

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.

Buscar reemplazar tabla

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).

Vistas de hojas después de promocionar encabezados

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.

Error después del primer cambio de nombre

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.

Mensaje de error después de cambiar el nombre

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.

Faltan tablas después de ignorar

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.

Columnas renombradas: todas iguales

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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...