Descripción de las funciones de M de Power Query
En el lenguaje de fórmulas M de Power Query, una función es una asignación de un conjunto de valores de entrada a un único valor de salida. Para escribir una función, primero se indican los parámetros de esa función y, después, se proporciona una expresión para calcular el resultado de la función. El cuerpo de la función va detrás del signo igual (=>). Opcionalmente, se puede incluir información de tipo en los parámetros y en el valor devuelto de la función. Una función se define y se invoca en el cuerpo de una instrucción let. Los parámetros y/o el valor devuelto pueden ser implícitos o explícitos. Los parámetros y/o valor devuelto implícitos son de tipo any. Escribir any es similar a un tipo de objeto en otros lenguajes. Todos los tipos de M se derivan del tipo any.
Una función es un valor, como un número o un valor de texto, y se puede incluir en línea, como cualquier otra expresión. En el siguiente ejemplo se muestra una función que corresponde al valor de una variable Add que se invoca, o se ejecuta, desde otras variables. Cuando una función se invoca, se especifica un conjunto de valores que se sustituyen lógicamente por el conjunto necesario de valores de entrada dentro de la expresión del cuerpo de la función.
Ejemplo: parámetros y valor devuelto explícitos
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Ejemplo: parámetros y valor devuelto implícitos
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
Hallar el primer elemento de una lista mayor que 5 o, en caso contrario, NULL
let
FirstGreaterThan5 = (list) =>
let
GreaterThan5 = List.Select(list, (n) => n> 5),
First = List.First(GreaterThan5)
in
First,
Results =
[
Found = FirstGreaterThan5({3,7,9}), // equals 7
NotFound = FirstGreaterThan5({1,3,4}) // equals null
]
in
Results
Las funciones se pueden usar de forma recursiva. Para hacer referencia de forma recursiva a una función, anteponga @ al identificador.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Palabra clave each
La palabra clave each se usa para crear funciones simples fácilmente. "each..." es el nivel sintáctico de una firma de función que toma el parámetro "(_) => ..."
Each resulta útil cuando se combina con el operador de búsqueda, que se aplica de forma predeterminada a _.
Por ejemplo, cada valor [CustomerID] es igual que cada valor _[CustomerID], que es lo mismo que (_) => _[CustomerID].
Ejemplo: usar each en un filtro de fila de tabla
Table.SelectRows(
Table.FromRecords({
[CustomerID = 1, Name = "Bob", Phone = "123-4567"],
[CustomerID = 2, Name = "Jim", Phone = "987-6543"] ,
[CustomerID = 3, Name = "Paul", Phone = "543-7890"] ,
[CustomerID = 4, Name = "Ringo", Phone = "232-1550"]
}),
each [CustomerID] = 2
)[Name]
// equals "Jim"
Comentarios
Enviar y ver comentarios de