martes, 24 de mayo de 2022

Power Query: Insertar una fila controlada

Hoy veremos con Table.InsertRows la forma de insertar filas de manera controlada.
Además veremos cómo añadirla con valores vacíos (o ceros o cualquier otro valor deseado) y cómo cambiar algunos de esos datos.
Un año atrás vimos un ejercicio similar donde cambiabamos ciertos valores de algunas columnas de una fila existente.
En nuestro ejercicio la fila saldrá de la 'nada'.

Partiremos de dos tablas:
1-Tabla 'TblPPAL' sobre la cual añadiremos una fila nueva, para modificar después algunos de sus columnas
2-Tabla auxiliar 'TblCambios' que recogerá, de forma flexible, qué campos o columnas de la nueva fila vamos a cambiar y con qué valores...
Power Query: Insertar una fila controlada


Como siempre, cargaremos al editor de Power Query ambas tablas.

En un primer paso trabajaremos sobre la 'TblCambios' para generar/convertirlo en un Record, donde usaremos los datos de la columna 'Campos' como nombre de los campos del futuro registro, y por otra parte los datos de la columna 'Valor' como los valores asociados a cada campo del registro...
Así pues el código quedaría:
let
    Origen = Excel.CurrentWorkbook(){[Name="TblCambios"]}[Content],
    TipoCambiado = Table.TransformColumnTypes(Origen,{{"Campos", type text}, {"Valor", type any}}),

    //generamos una lista de dos listas,
    // una con los nombres de los campos del futuro registro
    //y otra con los los valores del registro asociados...
    TablaaCols=Table.ToColumns(TipoCambiado),

    //creamos un registro a partir de los datos de las listas anteriores
    GeneraReg=Record.FromList(TablaaCols{1}, TablaaCols{0})
in
    GeneraReg

Power Query: Insertar una fila controlada


Ya tenemos una consulta capaz de generar un Record de tamaño variable, ajustado a lo dispuesto en la 'TblCambios'..

Vamos a trabajar ahora sobre la consulta de la 'TblPPAL' para añadir una nueva fila vacía, y posteriormente modificar los campos anteriores...
Usaremos Table.InsertRows
El código M sería el siguiente:
let
    Origen = Excel.CurrentWorkbook(){[Name="TblPPAL"]}[Content],
    TipoCambiado = Table.TransformColumnTypes(Origen,{{"Orden", Int64.Type}, {"Año", Int64.Type}, {"País", type text}, {"Unidades", Int64.Type}}),

    //añadimos una nueva fila
    // en la posición 0 de la tabla (la primera fila...)
    //Acabamos añadiendo en forma de registro elementos vacíos ""
    //para  finalizar combinando y cambiando los elementos vacíos anteriores
    //con los cargados en el Registro creado desde la TblCambios
    AddFilaVacia= Table.InsertRows(TipoCambiado, 
          0,
          {Record.FromList(List.Repeat({""},Table.ColumnCount(TipoCambiado)),
                           Table.ColumnNames(TipoCambiado)) 
          & TblCambio}   )
in
    AddFilaVacia

Power Query: Insertar una fila controlada


En definitiva, hemos conseguido crear una fila de la nada, controlando qué valores deseamos incorporar en ciertas columnas... :OO

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.