Noções básicas sobre as funções do Power Query M
Na linguagem de fórmulas do Power Query M, uma função é um mapeamento de um conjunto de valores de entrada para um único valor de saída. Uma função é escrita nomeando primeiro os parâmetros da função e, em seguida, fornecendo uma expressão para calcular o resultado da função. O corpo da função segue o símbolo goes-to (=>). Opcionalmente, as informações de tipo podem ser incluídas nos parâmetros e no valor de retorno da função. Uma função é definida e invocada no corpo de uma instrução let . Os parâmetros e/ou o valor de retorno podem ser implícitos ou explícitos. Os parâmetros implícitos e/ou o valor de retorno são do tipo qualquer. O tipo any é semelhante a um tipo de objeto em outros idiomas. Todos os tipos em M derivam do tipo qualquer.
Uma função é um valor como um número ou um valor de texto e pode ser incluída em linha como qualquer outra expressão. O exemplo a seguir mostra uma função que é o valor de uma variável Add , que é então invocada, ou executada, a partir de várias outras variáveis. Quando uma função é invocada, um conjunto de valores é especificado que substituem logicamente o conjunto necessário de valores de entrada dentro da expressão do corpo da função.
Exemplo - Parâmetros explícitos e valor de retorno
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Exemplo - Parâmetros implícitos e valor de retorno
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
Localizar o primeiro elemento de uma lista maior que 5 ou null de outra forma
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
As funções podem ser usadas recursivamente. Para referenciar recursivamente a função, prefixe o identificador com @.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Cada palavra-chave
Cada palavra-chave é usada para criar facilmente funções simples. each ...
é açúcar sintático para uma assinatura de função que usa o _
parâmetro (_) => ...
.
Cada palavra-chave é útil quando combinada com o operador de pesquisa, que é aplicado por padrão ao _
.
Por exemplo, each [CustomerID]
é o mesmo each _[CustomerID]
que , que é o mesmo (_) => _[CustomerID]
que .
Exemplo - Usando cada filtro de linha na tabela
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"