POWERQUERY: FUNCIONES PERSONALIZADAS (Caso Práctico)
Conocer cómo crear tus propias funciones te permite conseguir transformaciones imposibles utilizando la UI de PowerQuery. Adéntrate en una de las partes más interesantes del código M!
Crear funciones personalizadas en Power Query suele intimidar porque no es una opción precargada en la interfaz: hay que escribirla a mano en el editor avanzado. En esta sesión partimos de lo más sencillo (una función que calcula el trimestre) y vamos subiendo la dificultad hasta resolver un caso real que surgió en el grupo: consolidar varios ficheros cuya información viene partida en dobles cabeceras dentro de cada registro. La idea es trabajar paso a paso, como quien levanta una pared ladrillo a ladrillo, para no perderse en el camino.
La sintaxis de una función personalizada
Toda función en Power Query empieza con una estructura let ... in, muy parecida a la función LET de Excel. En let vamos generando las variables que necesitamos y en in elegimos qué devuelve la función.
Para convertir una consulta en función, se empieza declarando los parámetros entre paréntesis, seguidos de =>:
- Abrir un nuevo origen: Otros orígenes → Consulta en blanco.
- Entrar al editor avanzado.
- Escribir los parámetros, por ejemplo
(mes as number) =>. - Dentro de
let, calcular el resultado en una variable (por convención,output). - En
in, devolver esa variable.
Indicar el tipo de dato del parámetro (as number, as table) no es obligatorio, pero ayuda a prevenir errores.
Primeras funciones: trimestre e IVA
La función trimestre toma el número de mes y lo convierte en su trimestre. La fórmula es redondear hacia arriba el mes dividido entre tres con Number.RoundUp(mes / 3). Así, los meses 1, 2 y 3 devuelven el primer trimestre, el 4 ya devuelve el segundo, etc. Una vez creada, se puede invocar desde una columna personalizada con función trimestre pasándole el campo periodo, en lugar de repetir la fórmula completa cada vez.
La función tax calcula el impuesto sobre un importe: Number.Round(importe * 0.21, 2), multiplicando por el 21 % y redondeando a dos decimales. Igual que antes, se invoca desde una columna personalizada pasándole los euros.
La ventaja es clara: tener una serie de cálculos ya hechos de forma fácil y reutilizable, igual que haríamos con una función LAMBDA en Excel.
Funciones que imitan a las dinámicas de Excel
Las funciones de Power Query no solo manejan datos sueltos: también trabajan con tablas, columnas y listas. Aprovechando esto, recreamos varias funciones dinámicas de Excel:
tomar: Excel tieneTOMAR, que con un número positivo coge las primeras filas y con uno negativo las últimas. Power Query no tiene una única función equivalente, sino dos separadas (Table.FirstNyTable.LastN). La solución es una función con dos parámetros (tablayfilas) y un condicional:if filas > 0 then Table.FirstN(tabla, filas) else Table.LastN(tabla, filas * -1). El signo negativo se invierte para pasar siempre un número positivo aTable.LastN.listar: convierte una tabla en una lista de listas, donde cada columna pasa a ser una lista independiente. Usa la función nativaTable.ToColumns(tabla).apilarV: simula la funciónAPILARVde Excel, poniendo una lista debajo de otra. UsaList.Combine({lista1, lista2}); las listas en Power Query se escriben entre llaves{}.controlT: a partir de una lista de columnas genera una tabla, el equivalente alCtrl+Tde Excel. UsaTable.FromColumns(columnas).
Acotar funciones nativas que tienen muchos parámetros a nuestro uso habitual (uno o dos argumentos) nos permite trabajar de forma más ágil y construir nuestra propia librería.
El caso práctico: consolidar ficheros con doble cabecera
El reto real eran varios ficheros con una estructura incómoda: cada registro venía partido en dos pares de filas (nombre de campo / valor). El objetivo: consolidarlos en una tabla plana. Combinando las funciones anteriores, el tratamiento de cada fichero queda así:
tomar(datos, 2)para quedarse con las dos primeras filas ytomar(datos, -2)para las dos siguientes, generando dos bloques.listarsobre cada bloque para convertirlos en listas de columnas.apilarVpara unir ambas listas en una sola.controlT(Table.FromColumns) para reconstruir una tabla con todos los pares alineados.Table.PromoteHeaderspara usar la primera fila como encabezado.- Anular dinamización de otras columnas (
unpivot), dejando fija la referencia (el número de albarán) para que se repita en cada fila.
Un truco para depurar: el registro de pasos
En lugar de encadenar variables secuenciales, se puede envolver todo el bloque let en un registro usando corchetes [ ... ], separando cada paso con comas. Al devolver ese registro completo, Power Query muestra todos los pasos a la vez y se puede inspeccionar el resultado de cada uno por separado. Es muy útil mientras se desarrolla y para localizar dónde está fallando algo. Cuando la función ya está lista, basta con devolver solo el último paso (output[tabla_formateada]).
De consulta a función reutilizable
Todo ese tratamiento se encapsula en una función formateo(archivo as binary) que recibe el binario de cada fichero, lo interpreta como un libro de Excel (Excel.Workbook) y aplica todos los pasos. Después, al obtener datos de una carpeta, en lugar de consolidar directamente se añade una columna personalizada que invoca formateo sobre la columna de binarios. Cada fichero queda transformado y ya se puede expandir y consolidar en una única tabla. Si llega un fichero nuevo a la carpeta, basta con actualizar para que se incorpore automáticamente.
Conclusión
Crear funciones personalizadas en Power Query es más sencillo de lo que parece: paréntesis, parámetros, => y a trabajar los datos. Desde cálculos básicos como el trimestre o el IVA hasta recrear funciones dinámicas de Excel y combinarlas para resolver una consolidación compleja, la clave está en avanzar paso a paso. Construir tu propia librería de funciones reduce el coste de mantenimiento, te da confianza en cada paso y te permite resolver casos que las opciones estándar de Power Query no cubren de forma directa.
Más contenido de Excel en InflueXcel
- Conciliaciones en Excel con Copilot: Lo ponemos a prueba TutorialConciliaciones en Excel con Copilot: pongo a prueba la aptitud (skill) de conciliación que Copilot trae encendida de serie, con tres casos d
- Tablas en Excel: 5 problemas, 5 soluciones TutorialLos 5 problemas que más veo al trabajar con tablas en Excel y cómo resolverlos: arrastras una fórmula y salen ceros, el acumulado deja de cu
- Un gráfico que crece solo a partir de un PIVOTARPOR, sin DESREF (y sin depender del orden alfabético) CasoLuis lleva el control de unas certificaciones en una tabla: cada cliente tiene un aliado asignado (o ninguno todavía) y un estado, que puede
- Nueva skill Get-Data de Copilot en Excel: Power Query con IA, pruebas reales TutorialCopilot en Excel ya hace consultas de Power Query: Microsoft acaba de estrenar la skill Get-Data. La pongo a prueba en directo con tres caso
- Calendario de varios años en una sola fórmula: una tira por mes, una fila por año y el nombre de cada día CasoTodo empezó con una pregunta sobre formato condicional: ¿es mejor una regla para todo el rango o una regla por tabla? Para probarlo, Miki mo
- 5 errores de los canvas interactivos de Copilot en Excel (y cómo evitarlos) TutorialLos canvas interactivos de Copilot en Excel montan un dashboard con una sola frase. Funcionan, pero hay cinco errores que se repiten y casi
- Listas desplegables en cascada de n niveles con una sola validación y filas independientes CasoJuan planteó un reto que muchos hemos sufrido: un formulario en forma de rejilla con listas desplegables en cascada. Al elegir la familia en
- Interactive Canvas en Excel: dashboards interactivos con Copilot (Gantt, Sankey y más) TutorialInteractive Canvas es la nueva función de Copilot en Excel que crea dashboards interactivos dentro de tu libro con una sola frase: desde una
- Contar valores únicos respetando filtros manuales: SUBTOTALES + MAP al rescate CasoMiki lanza una pregunta que parece sencilla pero esconde un buen reto: ¿cómo contar valores únicos en una columna cuando hay filtros manuale
- Timeline chart dinámico en Excel con etiquetas que no se pisan TutorialUn timeline en Excel se ve muy bien hasta que añades el cuarto evento y las etiquetas empiezan a solaparse. Colocarlas a mano funciona una v