Power Query es una herramienta potente para extracción de datos que viene incluída desde Excel 2016 en adelante, así como en Office 365 y Power BI. Una de sus mayores ventajas es su interfaz intuitiva que lo hace fácil de usar para usuarios de Excel, en especial con el editor de consultas; lo que nos permite transformar y alterar nuestros datos sin necesidad de conocer sobre código de programación pero con sus mismas ventajas.
Esto es posible ya que Excel se encarga de traducir cada paso del proceso en el lenguaje M de Power Query. En este post vamos a ver las bases del lenguaje M, por lo que se recomienda ya saber las bases de Power Query de antemano.
Si te quedan dudas puedes empezar aqui.
Primero que nada…
¿Qué es el código M?
La M es inicial para mezcla de datos (o «data Mash-up» en inglés), pues Power Query se encarga de conectar datos de diferentes medios para poder mezclarlos. El código M es el lenguaje que opera tras Power Query. Cuando se crea una transformación de datos en la interfaz del editor en Power Query, Excel escribe el código M correspondiente para la consulta.
La funcionalidad del lenguaje en código M lo hace eficaz a la hora de evaluar datos y arrojar resultados. Este código cuenta con una gran librería de funciones predefinidas disponibles y con la opción para poder crear las propias. Si te interesa aprender a escribir en código M o aprender a editar uno ya existente, hará falta saber dónde hay que hacer los cambios. Para esto hay dos lugares en donde es posible: en la barra de fórmulas o en el editor avanzado.
Barra de fórmulas.
Por cada paso que se haga en la interfaz del editor se puede ver el código correspondiente en la barra de fórmulas. Si no está activada, esto se puede cambiar en la pestaña «Vista»:
Se puede editar el código M por cada paso en una consulta dándole click a la fórmula y editando el código ya existente. Una vez hayas terminado, los cambios deberán guardarse dando click a la palomita o presionando Enter. Para descartarlos hay que seleccionar la cruz o presionando la tecla Esc:
De la misma forma se pueden crear pasos totalmente nuevos en tu consulta con la barra de formulas si se le da click al símbolo «fx» a un lado de la barra de fórmulas. Esto creará un nuevo paso que haga referencia al paso anterior por nombre y así será posible crear un nuevo código según convenga.
Editor Avanzado
La barra de fórmulas solo muestra el código M para un solo paso dentro de toda una consulta, pero el editor avanzado nos permite ver y editar el código M de toda la consulta. El editor lo podemos encontrar tanto como en la pestaña «Inicio» o igual que la barra de fórmulas, en la pestaña «Vista»:
A pesar de su nombre, el editor avanzado es realmente un editor de código bastante básico y no cuenta con funciones como resaltado de síntaxis, auto completado u opciones ded auto formato. Lo que sí nos muestra el editor es el nombre de nuestra consulta, el cuerpo del código M para la misma y una advertencia sobre cualquier violación de síntaxis en el código M.
Función de Librerías Estándar
Debido a que el código M es un lenguaje funcional, su base de funcionamiento son las funciones y como se dijo anteriormente, el código M cuenta con una extensa librería de funciones ya predefinidas, la cual es llamada librería estándar. Detalles sobre todas las funciones incluídas se pueden encontrar directamente en la página de Microsoft, que también incluye funciones de síntaxis y ejemplos.
Esta librería estándar también puede ser explorada en el editor de Power Query usando la palabra clave «#shared»
Cuidado con las mayúsculas
Una de las primeras cosas que uno necesita saber a la hora de escribir en código M es que es un lenguaje sensible al uso de mayúsculas, por lo que «X» no será lo mismo que «x», así que es importante a tener en cuenta pues aplica tanto como para valores, variables y funciones.
Expresiones y valores en Power Query.
Una expresión es algo que puede ser evaluado y arroja un valor en Power Query. Por ejemplo, «2×2» sería una expresión que es evaluada al valor «4». Un valor es un pedazo de información, y pueden ser números, texto, logicos, nulls, binario, hora, fecha, duración; siempre siendo valores individuales.
Los valores también pueden ser estructuras más elaboradas que valores ingulares, como pueden ser listas, tablas o registros. También listas de listas, tablas de tablas o combinaciones de los anteriores son todos posibles valores estructurales.
Valores literales únicos
Estos son los bloques de construcción básicos de todos los otros valores:
- «Ejemplo» siendo un valor de texto.
- 123.45 siendo un valor numérico.
- true siendo un valor lógico.
- null siendo la ausencia de un valor.
Valores intrínsecos únicos
Estos están construídos usando varias funciones intrínsecas:
- #time (horas, minutos, segundos)
- #date (años, meses, días)
- #datetime (años, meses, días, horas, minutos, segundos)
- #datetimexone (años, meses, días, horas, minutos, segundos, desplazamiento de horas, desplazamiento de minutos)
- #duration (días, horas, minutos, segundos)
Si, por ejemplo, quisieramos construir la fecha de hoy (2020-04-28), se necesitaría usar la función intrínseca «#date».
Valores estructurados
Empezando con las listas, estas son secuencias ordenadas de valores. Se puede definir una lista usando llaves «{}». {1, 2, 3} es una lista que contiene los números de uno al tres. Puesto que el órden es importante, «{1, 2, 3}» no sería lo mismo que «{3, 2, 1}». {«Excel», «Cute»} es una lista que contiene dos palabras.
Listas de listas son posibles, por lo que «{{1, 2, 3}, {4, 5}}» sería una lista conformada por dos listas. La primera lista teniendo números del uno al tres, y la segunda conteniendo los números cuatro y cinco.
Se pueden crear listas secuenciales si se usa el formato {x..y}. Por ejemplo, «{2..5}» crearía la lista {2, 3, 4, 5}, y esto funciona también para carácteres de texto ({«a»..»z»} produciría una lista con todo el abecedario).
También se puede tener una lista vacía si se deja sin elementos, siendo «{}».
Dado que las listas están ordenadas, podemos referenciar objetos en la lista con un número de índice basado en zero, por lo que una lista que sea «{1, 2, 3}{2}» va a evaluar hasta el tercer puesto que este sería el segundo objeto en la lista basado en un índice cero.
Registros
Un registro es una secuencia ordenada de campos. Cada campo cuenta con un nombre que lo identifica como un único y un valor que puede ser de cualquier tipo. Los campos se pueden definir usando llaves cuadradas «[]».
[Nombre = «Jorge», Edad = 33] es un registro con dos campos. El primer campo en el registro tiene un nombre que le identifica con un valor al que corresponde, y lo mismo ocurre con el segundo campo. De la misma forma, los registros de registros son posibles:
[Persona = [Nombre = «Jorge», Edad = 33]] es un registro con un campo que contiene un campo perteneciente a «Nombre» y un segundo campo perteneciente a «Edad». Los registros vacíos son posibles si se deja las llaves vacías, siendo «[]».
Se puede referenciar el valor del campo en un registro si se usa el nombre del campo. [Nombre = «Jorge», Edad = 33][Nombre] será evaluado como «Jorge».
Tablas
Una tabla es una secuencia ordenada de columnas en donde cada fila es una lista. Las tablas solo pueden ser construídas si se usa una función intrínseca. Para hacer una tabla podemos usar la función «#table()».
Para definirla mejor, hará falta introducir valores dentro del paréntesis: de ser #table({«Letras», «Números»}, {{«A», 1}, {«B», 2}, {«C», 3}}) se crearía una tabla con dos columnas, tres filas y los encabezados de columnas para Letras y Números.
Es posible crear una tabla vacía usando listas vacías en la función intrínseca #table(). De ser #table({}, {}) se nos crearía una tabla vacías.
Se puede referenciar cualquier valor en una tabla con el índice de fila basado en cero y el encabezado de columna. El valor #table({«Letras», «Números»}, {{«A», 1}, {«B», 2}, {«C», 3}}){2}[Letras] evaluará a «C» dado que es la segunda columna basada en un índice cero de la columna «Letras».
Esta introducción parece extensa, pero aún hay mucho de que hablar sobre Power Query y las M Formulas. dejémoslo para otro día.
Cualquier duda nos leemos abajo.