jueves, 26 de enero de 2023

Power Query: Table.Profile para eliminar columnas vacías

Uno de los problemas habituales con los que nos encontramos es eliminar las columnas sin datos, suele ser una tarea tediosa que requiere de recorridos por todas las columnas buscando, con distintos cálculos, cuáles de ellas no contienen información.

Hoy te presento, quizá no la conozcas, la función:
Table.Profile(table as table, optional additionalAggregates as nullable list) as table
la función inicialmente está pensada para devolver información estadística sobre el contenido de cada columna de nuestra tabla, tal como cálculos de valores:
-mínimo de la columna
-máximo de la columna
-media
-desviación estándar
-Cuenta de elementos (celdas no vacías)
-Cuenta de vacíos/nulos
-cuenta de elementos distintos

También nos ofrece opcionalmente la posibilidad de crear nuestros propios cálculos (lo que veremos en próximas entregas).

En el ejemplo de hoy nos centraremos en 'algo sencillo' como es eliminar columnas vacías.
Supongamos una fuente de datos como la de la imagen siguiente, sobre la cual queremos operar y 'limpiar'.
Power Query: Table.Profile para eliminar columnas vacías

Como siempre cargaremos el rango o tabla a nuestro Editor de consultas donde realizaremos la siguiente transformación:
let
    Origen = Excel.CurrentWorkbook(){[Name="ndtest"]}[Content],
    //Obtenemos estadísticas de la tabla
    //pero solo nos quedamos con tres aspectos relevantes:
    //Column: nombre de la columna
    //Count: número de filas de la columna
    //NullCount: número de elementos nulos/vacíos en la columna
    TP = Table.Profile(Origen)[[Column],[Count],[NullCount]],

    //filtramos para obtener únicamente las columnas donde
    //el número de vacíos/nulos es igual al total de elementos
    //i.e., cuando  TODOS son nulos/vacíos
    ColsVacias = Table.SelectRows(TP, each ([NullCount] = [Count]))[Column],

    //eliminamos dichas columnas con todos los elementos nulos
    //es decir, las columnas sin datos
    TablaLimpia=Table.RemoveColumns(Origen,ColsVacias)
in
    TablaLimpia

Power Query: Table.Profile para eliminar columnas vacías


La simplicidad del proceso es asombrosa... En un par de líneas se ha podido discriminar qué columnas no tienen datos y 'removerlas' empleando Table.RemoveColumns.
Un truco importante es la selección de las columnas que retorna Table.Profile y que vamos a necesitar:
TP = Table.Profile(Origen)[[Column],[Count],[NullCount]],
Si no hicieramos esta selección, por motivos desconocidos por mí, la tabla resultante de Table.Profile no admite que apliquemos 'filtros' sobre sus campos...

La magia de Power Query no deja de sorprender ;-)

No hay comentarios:

Publicar un comentario

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