Al hilo de la publicación anterior sobre cómo anexar tablas sin repeticiones de registros (echa un vistazo), y donde mencionaba que debíamos tener cuidado de disponer de nuestras tablas en un orden concreto...
Y como me ha llegado algún correo preguntando por la manera de automatizar este orden de tablas, he decidido escribir al respecto.
El planteamiento es el siguiente...
Tenemos un conjunto de tablas, donde cada una de ellas muestra registros dispuestos en un intervalo de fechas.
Ocurre además que dichos intervalos entre tablas pueden solaparse, y generar registros duplicados (ya tratado en el post previo).
Para el correcto funcionamiento del código de dicho post, se requiere que las tablas se procesen en un orden temporal adecuado...
Y esto es lo que vamos a conseguir.
Para ordenar nuestras tablas vamos a emplear List.Sort, puesto que en realidad partimos de una lista de tablas.
Y como comparador para determinar el orden de cada tabla en el conjunto la función Value.Comparer, función que nos permitirá trabajar sobre el contenido de cada tabla de nuestra lista.
Una vez cargadas todas las tablas (en color azul a la izquierda de la imagen, con nombres: Tabla1, Tabla2, Tabla3, Tabla4, y Tabla5), accedemos al Editor de Power Query y creamos una Consulta en blanco con el siguiente código:
Fíjate especialmente en la segúnda línea:
la cual nos genera una nueva lista de Tablas pero ya ordenadas por las fechas contenidas en cada una de ellas.
Tablas ordenadas tal como necesitábamos.
El resto del proceso es el ya comentado, donde se trata a cada una de las tablas.
Muy interesante el uso de la Lista de tablas del inicio, y como la función List.Sort y su función de comparación:
(x, y) => Value.Compare(List.Min(x[Fecha]),List.Min(y[Fecha]) )
que nos ha permitido operar y comparar sobre las 'fechas' de cada tabla, con el fin de reordenarlas entre sí.
Fantástica combinación!!.
Y como me ha llegado algún correo preguntando por la manera de automatizar este orden de tablas, he decidido escribir al respecto.
El planteamiento es el siguiente...
Tenemos un conjunto de tablas, donde cada una de ellas muestra registros dispuestos en un intervalo de fechas.
Ocurre además que dichos intervalos entre tablas pueden solaparse, y generar registros duplicados (ya tratado en el post previo).
Para el correcto funcionamiento del código de dicho post, se requiere que las tablas se procesen en un orden temporal adecuado...
Y esto es lo que vamos a conseguir.
Para ordenar nuestras tablas vamos a emplear List.Sort, puesto que en realidad partimos de una lista de tablas.
Y como comparador para determinar el orden de cada tabla en el conjunto la función Value.Comparer, función que nos permitirá trabajar sobre el contenido de cada tabla de nuestra lista.
Una vez cargadas todas las tablas (en color azul a la izquierda de la imagen, con nombres: Tabla1, Tabla2, Tabla3, Tabla4, y Tabla5), accedemos al Editor de Power Query y creamos una Consulta en blanco con el siguiente código:
let //Lista con las tablas a trabajar LstTablas={Tabla1,Tabla2,Tabla3,Tabla4,Tabla5}, //aplicamos List.Sort para ordenar nuestras tablas LstOrdenada=List.Sort(LstTablas, (x, y) => Value.Compare(List.Min(x[Fecha]),List.Min(y[Fecha]) )), //Proceso que acumula registros de las distintas tablas //cuando los registros cumplan una condición //que su fecha sea posterior a la del acumulado anterior Combinada= List.Accumulate( LstOrdenada, //lista que recorremos LstOrdenada{0}, //inicio (acum,tbl)=> //transformación a aplicar let Fmax=List.Max(acum[Fecha]), rdo=Table.Combine({acum,Table.SelectRows(tbl, each [Fecha]>Fmax)}) in rdo) in Combinada
Fíjate especialmente en la segúnda línea:
... //aplicamos List.Sort para ordenar nuestras tablas LstOrdenada=List.Sort(LstTablas, (x, y) => Value.Compare(List.Min(x[Fecha]),List.Min(y[Fecha]) )), ...
la cual nos genera una nueva lista de Tablas pero ya ordenadas por las fechas contenidas en cada una de ellas.
Tablas ordenadas tal como necesitábamos.
El resto del proceso es el ya comentado, donde se trata a cada una de las tablas.
Muy interesante el uso de la Lista de tablas del inicio, y como la función List.Sort y su función de comparación:
(x, y) => Value.Compare(List.Min(x[Fecha]),List.Min(y[Fecha]) )
que nos ha permitido operar y comparar sobre las 'fechas' de cada tabla, con el fin de reordenarlas entre sí.
Fantástica combinación!!.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.