martes, 31 de agosto de 2021

Power Query: Agregar Múltiples Columnas a la Vez

Revisaremos en el día de hoy dos opciones para poder crear columnas (vacías, con null) en nuestras consultas, de manera fácil y dinámica.
Con bastante frecuencia se hace necesaria, antes de realizar, por ejemplo, un anexado 'especial' entre dos tablas, una acción de 'homogeneización' del número y nombre de las columnas... por supuesto, podemos emplear el clásico: Table.AddColumn que permite incorporar de una en una cuantas columnas necesitemos...
pero esto puede resultar una labor larga y tediosa si el número de columnas es elevado.
Tengamos claro que el objetivo es añadir columnas sin valores!!!, solo para igualar estructura de columnas.

Veamos en primer lugar los dos métodos comentados sobre una tabla 'TblORIGEN' con campos: Id, Año, País y Unidades. Tabla que hemos cargado a nuestro editor de Power Query solo como conexión.

Dentro del editor accederemos al editor avanzado y escribiremos, dentro de una consulta en blanco, el siguiente código M donde emplearemos una función recursiva:
let
    origen = TblORIGEN,

    //lista con las nuevas columnas a incorporar
    Lst={"Nueva columna 1","Nueva columna 2"},
    //contamos el número de elementos/columnas de la lista
    NumCols = List.Count( Lst ),

    //creamos una función recursiva
    AddColumns = ( tabla as table, contador as number ) as table =>
        let
            //agregamos a una tabla con datos vacíos en este caso (each null)
            //con el nombre tomado de nuestra lista
            AgregoCol = Table.AddColumn( tabla, 
                                Text.From(Lst{contador}), 
                                each null ),
            //montamos el bucle y salida de este
            //mientras que el contador no supere el número de columnas a incorporar
            //OJO!!, listas en base 0
            ColAgregada = if ( contador < NumCols ) then @AddColumns( AgregoCol, contador + 1 ) else tabla
        in
            ColAgregada,

    //para finalmente aplicar nuestra función recursiva sobre la TblORIGEN
    TablaFinal = AddColumns( origen, 0 )
in
    TablaFinal

Power Query: Agregar Columnas de forma dinámica

Este método recursivo tiene la ventaja que permitiría personalizar qué datos añadimos a las columnas nuevas...
aunque como desventaja diremos que bajo ciertas condiciones puede ralentizar la ejecución de nuestras consultas :-(

El siguiente método es muchísimo más rápido, ágil y fácil de implementar... pero por contra, solo permite añadir columnas sin valores...

Añadamos desde el editor de Power Query una nueva consulta en blanco con el siguiente código M.
Donde emplearemos nuestra conocida Table.SelectColumns, con una 'faceta' desconocida...
let
    origen = TblORIGEN,

    //lista con las nuevas columnas a incorporar
    Lst={"Nueva columna 1","Nueva columna 2"},

    //creamos una nueva lista resultado de unir las columnas ya existentes
    //con las nuevas descritas en la lista previa
    LstCompleta=List.Union({Table.ColumnNames(origen),Lst}),

    //la función Table.SelectColumns aporta en su tercer argumento opcional la alternativa necesaria
    TablaCompleta=Table.SelectColumns(origen, LstCompleta, MissingField.UseNull)

in 
    TablaCompleta

Con idéntico resultado al código anterior!!.

Que nos aporta la función:
Table.SelectColumns(table as table, columns as any, optional missingField as nullable number) as table
Los dos argumentos primeros son los clásicos:
-table: la tabla sobre la que trabajamos
-columns: lista de columnas que deseamos seleccionar
Y normalmente al omitir el tercero opcional, si se da el caso que entre el listado de columnas hubiera alguna que no existiera, el resultado predeterminado sería un error.
Para eso tenemos el tercer argumento:
-missingField: argumento opcional con dos posibilidades:
+ MissingField.Ignore: hará que no aparezca mensaje de error alguno... simplemente no se incluirá esa columna no existente.
+ MissingField.UseNull: cuando alguna/s de las columnas incluidas en la lista no exista, la opción MissingField.UseNull creará una columna de valores NULL.

Lo que necesitábamos!!... más fácil imposible ;-)

Un punto importante... incluye y cambia el tipo de datos de esas columnas para asentar el agregado.. sobre todo si quieres volcar el resultado sobre la hoja de cálculo!!!.

No hay comentarios:

Publicar un comentario

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