Habitualmente, a la hora de trabajar con columnas que contienen libros binarios, listas o sencillamente Tablas, optamos por trabajar agregando una columna nueva, y realizar la transformación en el contexto de la función Table.AddColumn.
Nos acostumbramos a emplear técnicas que nos resultan cómodas...
Sin embargo, tenemos alternativas igual de interesantes, como Table.TransformColumns... incluso más, ya que no requiere agregar nuevas columnas.
La función Table.TransformColumns(table as table, transformOperations as list, optional defaultTransformation as nullable function, optional missingField as nullable number) as table
la cual transforma table mediante la aplicación de cada operación de columna enumerada en transformOperations (donde el formato es { nombre de la columna, transformación } o { nombre de columna, transformación, nuevo tipo de columna }). .
Planteemos el siguiente ejercicio. Tenemos tres tablas en nuestro fichero, una tabla por país.
Nuestro objetivo será consolidar/anexar dichas tablas en una hoja nueva... añadiendo una columna extra con el nombre de la tabla correspondiente.
Veamos nuestro código creado en una Consulta en blanco dentro del editor de Power Query.
TRUCO. En lugar de añadir una columna de Índice para determinar posiciones de cada fila, empleamos List.PositionOf para buscar cada elemento recorrido en la columna sobre esa columna....
Observa como la expresión each nos permite recorrer la/s columna/s que indiquemos, aplicándoles algún tipo de acción. En nuestro ejemplo, el proceso de transformación consiste en ordenar cada tabla y además incoporarle una nueva columna.
Para los amantes de lo simple, siempre es posible utilizar el método clásico de expandir columna.
Mucho más sencillo... pero limitado por la definición de nombres de columnas.
Que en todo caso no hay que despreciar, al contario... en muchos casos, con un volumen alto de datos, la rapidez de ejecución es un punto a su favor.
Nos acostumbramos a emplear técnicas que nos resultan cómodas...
Sin embargo, tenemos alternativas igual de interesantes, como Table.TransformColumns... incluso más, ya que no requiere agregar nuevas columnas.
La función Table.TransformColumns(table as table, transformOperations as list, optional defaultTransformation as nullable function, optional missingField as nullable number) as table
la cual transforma table mediante la aplicación de cada operación de columna enumerada en transformOperations (donde el formato es { nombre de la columna, transformación } o { nombre de columna, transformación, nuevo tipo de columna }). .
Planteemos el siguiente ejercicio. Tenemos tres tablas en nuestro fichero, una tabla por país.
Nuestro objetivo será consolidar/anexar dichas tablas en una hoja nueva... añadiendo una columna extra con el nombre de la tabla correspondiente.
Veamos nuestro código creado en una Consulta en blanco dentro del editor de Power Query.
let //recuperamos todas las tablas del libro actual que empiecen con 'Tbl" Origen = Table.SelectRows( Excel.CurrentWorkbook(), each Text.StartsWith([Name],"Tbl")), //aplicamos la trasnformación a la columna de Contenido 'Content' Transformacion= Table.TransformColumns(Origen, {{"Content", each let pos= List.PositionOf(Origen[Content], _), //identifico el número de fila nombre=Origen[Name]{pos}, //recupero el Nombre desde el campo 'Name' ordeno=Table.Sort(_, {"Fechas"}), //ordeno cada tabla por Fechas //y añado a cada tabla un campo nuevo con el nombre anterior AddCol=Table.AddColumn(ordeno, "País", each nombre) in AddCol }}), //acabamos Combinando (anexando) las distintas tablas de la columna 'Content' Consolidado=Table.Combine(Transformacion[Content]) in Consolidado
TRUCO. En lugar de añadir una columna de Índice para determinar posiciones de cada fila, empleamos List.PositionOf para buscar cada elemento recorrido en la columna sobre esa columna....
Observa como la expresión each nos permite recorrer la/s columna/s que indiquemos, aplicándoles algún tipo de acción. En nuestro ejemplo, el proceso de transformación consiste en ordenar cada tabla y además incoporarle una nueva columna.
Para los amantes de lo simple, siempre es posible utilizar el método clásico de expandir columna.
let Origen = Table.SelectRows( Excel.CurrentWorkbook(), each Text.StartsWith([Name],"Tbl")), ExpandeContent = Table.ExpandTableColumn(Origen, "Content", {"Fechas", "Artículos", "Unidades"}, {"Fechas", "Artículos", "Unidades"}) in ExpandeContent
Mucho más sencillo... pero limitado por la definición de nombres de columnas.
Que en todo caso no hay que despreciar, al contario... en muchos casos, con un volumen alto de datos, la rapidez de ejecución es un punto a su favor.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.