lunes, agosto 12, 2019

Power Query - Columnas por ejemplo

En el post anterior vimos como podemos usar Columna por ejemplo  del Power Query para realizar con facilidad tareas complicadas, como extraer números de una cadena alfa-numérica no ordenada.
En este post me voy a extender un poco más sobre esta herramienta tan útil.

Una de las características más sobresalientes de Power Query es que nos permite realizar transformaciones complicadas de datos utilizando la interfaz del usuario. Es decir, sin el más mínimo conocimiento del lenguaje M, el motor del Power Query. Sin embargo, tener conocimientos del lenguaje M, aún mínimos, es muy útil (les invito a leer este post donde cito las etapas del aprendizaje de Power Query según Gil Raviv).

Vamos a ver como Columna por ejemplo puede ayudarnos a aprender algo acerca de las funciones del lenguaje M.
Volvamos al ejemplo de la nota mencionada; nuestra tarea es crear, a partir de una columna con valores alfa-numéricos, dos columnas, una con los números y otra con las letras.
Comenzamos creando la conexión a la tabla y activando Agregar columna - Columna a partir de los ejemplos 



Vamos a fijarnos qué sucede en el área marcada con el rectángulo rojo cuando empezamos a aplicar los pasos para la transformación

A continuación de "Transformar" vemos Text.BetweenDelimiters([Valores],"C", "G") 
Lo que estamos viendo es la función Text.BetweenDelimiters (en castellano: texto entre delimitadores) donde el primer parámetro es el nombre de la columna donde vamos a aplicar la transformación; los restantes parámetros son los "delimitadores" entre los cuales se encuentran los caracteres que queremos extraer.
En la ventanilla de la derecha vemos que este ejemplo no es suficiente, así que vamos a poner otro ejemplo en la segunda fila


Ahora vemos que Power Query ha reemplazado la función anterior por una nueva: Text.Select([Valores],{"0".."9"}).  A partir del segundo ejemplo Power Query ha "entendido" que no queremos extraer los valores comprendidos entre "C" y "G" sino todos los valores numéricos del 0 al 9. Podemos ver en la ventanilla de la derecha que los valores en la siguientes filas son los requeridos.

Aplicamos un nuevo paso para generar la columna con las letras


En este caso Power Query utiliza la función Text.Remove (el significado es obvio).

En el Editor Avanzado podemos ver todo el código generado y el uso de las funciones (combinadas dentro de la función Table.AddColumn)



Veamos otro ejemplo donde Columna a partir de ejemplos hace que nuestra vida sea más placentera.
Supongamos que tenemos esta lista de nombres (senadores de la República Argentina)



Los senadores aparecen por apellido y nombre. Queremos crear una lista donde aparezcan primero por nombre propio y luego por apellido. Podemos ver que los nombres no siguen un patrón fijo así que vamos a echar mano a Columna por ejemplo. Empezamos, como siempre, creando una conexión e inmediatamente vamos a Agregar columna-Columna a partir de los ejemplos

En la primer fila escribimos el ejemplo, en nuestro caso "Eduardo Alberto Aguilar" y lo introducimos con Ctrl+Enter


En Columna1 vemos que Power Query no ha "entendido" nuestra intención así que vamos a agregar un segundo ejemplo (también podemos ver que en la ventana superior, en lugar de una fórmula, aparece el mensaje Escriba más valores de ejemplo).


Podemos ver que hemos avanzado algo, pero no lo suficiente. Vamos a introducir como ejemplo la tercera fila (no necesariamente hay que seguir este orden)



¡Aleluya! Como por arte de magia Power Query resuelve nuestro problema. Inclusive el caso de la fila 8, tan distinto al resto de los nombres. Si nos fijamos en la ventanilla superior podemos ver el grado de complejidad del paso aplicado automáticamente por Power Query


También podemos fijarnos en el editor avanzado


Cargamos la consulta en la hoja para ver el resultado final


2 comentarios:

  1. Buenos días,

    Comentarle que una vez escribo la tercera fila , y pulso Crtl+Enter el resto de filas me aparece null.

    Lo he repetido varias veces y me sigue saliendo lo mismo. A que es debido? Gracias.

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.