Compartir a través de


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 ejemplo siguiente se muestra una función que es el valor de una variable Add , que luego se invoca o se ejecuta, desde otras variables. Cuando se invoca una función, se especifica un conjunto de valores que sustituye lógicamente por el conjunto necesario de valores de entrada dentro de la expresión del cuerpo de la función.

Ejemplo: parámetros explícitos y valor devuelto

let  
    AddOne = (x as number) as number => x + 1,  
    //additional expression steps  
    CalcAddOne = AddOne(5)  
in  
    CalcAddOne  

Ejemplo: parámetros implícitos y valor devuelto

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 azúcar sintáctica para una firma de función que toma el _ parámetro (_) => ....

La palabra clave each es útil cuando se combina con el operador de búsqueda, que se aplica de forma predeterminada a _. Por ejemplo, each [CustomerID] es igual each _[CustomerID]que , que es igual (_) => _[CustomerID]que .

Ejemplo: Uso de cada uno de los filtros 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"