Partilhar via


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 são logicamente substituídos pelo 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. "Cada ..." é açúcar sintático para uma assinatura de função que usa o parâmetro _ "(_) => ..."

Cada um é útil quando combinado com o operador de pesquisa, que é aplicado por padrão a _
Por exemplo, cada [CustomerID] é o mesmo que cada _[CustomerID], que é o mesmo que (_) => _[CustomerID]

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"