Power Query permite la creación de funciones propias y su utilización tal y como podemos hacer con las funciones incorporadas al propio entorno. Como en todo lenguaje de programación es muy conveniente la utilización de funciones pues permiten reutilizar el código e incrementar la consistencia del proyecto. Esta entrada tiene por objetivo realizar una breve y simple introducción a la creación y uso de funciones.
Las funciones en Power Query tienen una sintaxis propia de expresiones lambda donde se describe primero los parámetros a la inzquierda y las expresiones a la derecha:
Parámetros de entrada => Expresión de la función
Para seguir estos ejemplos debemos ir a «Obtener datos» y escoger «Consulta en blanco» y seleccionar «Editor avanzado».
Ejemplo de raíz cuadrada:
let RaizCuadrada = (x) => x * x in RaizCuadrada(5)
En el caso de requerir parámetros opcionales podemos hacerlo con «optional»:
let Div = (x, optional y) => if y is null or y = 0 then null else x / y in Div(5)
Si las funciones requieren de diferentes pasos, cada uno de ellos se situará en una línea distinta (por claridad) y cada línea se separará de la siguiente con una coma.
let funcion = (x, y, z) => let multiplicacion = x * y, division = y / z, resultado = multiplicacion + division in resultado in funcion(1, 2, 3)
Hasta ahora hemos creado diferentes consultas y en ellas hemos definido funciones, pero estas solo están disponibles dentro de esas consultas. Estas funciones también las podemos crear para que cualquier otra consulta dentro del proyecto la puedan utilizar.
De esta manera crearemos la función del primer ejemplo y la denominaremos «RaizCuadrada»:
(x) => let calculo = x * x in calculo
Como hemos visto hasta ahora utilizamos variables sin tipo, aunque sería más correcto definirlos, por ello la función anterior debería ser
(x as number) => let calculo = x * x in calculo
Llamando a una función
Desde otra consulta podemos llamar a la función RaizCuadrada. Tomamos un ejemplo típico. Abrimos un archivo de Excel, escogemos la hoja «Hoja1», ponemos la primera fila como encabezado de la tabla, ponemos el campo Valor como entero y añadimos una columna nueva denominada «Al cuadrado» fruto de aplicar la función «RaizCuadrada» a la columna llamada «Valor»:
let Origen = Excel.Workbook(File.Contents("c:\Datos\MiExcel.xlsx"), null, true), Hoja = Origen{[Item="Hoja1",Kind="Sheet"]}[Data], Encabezados = Table.PromoteHeaders(Hoja1, [PromoteAllScalars=true]), TipoCorrecto = Table.TransformColumnTypes(Encabezados,{{"Valor", Int64.Type}}), Cuadrado = Table.AddColumn(TipoCorrecto, "Al cuadrado", each RaizCuadrada([Valor]) in Cuadrado
Los pasos mostrados en el anterior ejemplo pueden realizarse en el editor gráfico de Power Query sin necesidad de abrir el «Editor avanzado». El resultado es el mismo, aunque hay dos pasos que no realizamos (encabezados y poner el tipo correcto) puesto que lo hace automáticamente Power Query y si luego entramos en el editor avanzado veremos que el nombre de los pasos son distintos..
La secuencia:
Pingback: Reutilizar funciones en Power Query – Power BI y Business Intelligence