Основные сведения о функциях Power Query M

На языке формул Power Query M функция — это сопоставление из набора входных значений с одним выходным значением. Функция записывается путем первого именования параметров функции, а затем предоставления выражения для вычисления результата функции. Текст функции следует символу (=>). При необходимости сведения о типе можно включить в параметры и возвращаемое значение функции. Функция определяется и вызывается в тексте инструкции let . Параметры и (или) возвращаемое значение могут быть неявными или явными. Неявные параметры и /или возвращаемое значение имеют тип. Тип любого типа аналогичен типу объекта на других языках. Все типы в M являются производными от любого типа.

Функция — это значение, аналогичное числу или текстовому значению, и может быть включено в строку так же, как и любое другое выражение. В следующем примере показана функция, которая является значением переменной Add, которая затем вызывается или выполняется из нескольких других переменных. При вызове функции указывается набор значений, которые логически заменяются необходимым набором входных значений в выражении тела функции.

Пример— явные параметры и возвращаемое значение

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

Пример: неявные параметры и возвращаемое значение

let  
    Add = (x, y) => x + y,  
    AddResults =   
        [  
            OnePlusOne = Add(1, 1),     // equals 2  
            OnePlusTwo = Add(1, 2)      // equals 3  
    ]  
in  
    AddResults  

Найдите первый элемент списка, превышающий 5, или значение 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  

Функции можно использовать рекурсивно. Чтобы рекурсивно сослаться на функцию, добавьте в идентификатор префикс @.

let   
    fact = (num) => if num = 0 then 1 else num * @fact (num-1)   
in   
    fact(5) // equals 120  

Каждая ключевое слово

Каждая ключевое слово используется для упрощения создания простых функций. "each ..." — это синтаксический сахар для сигнатуры функции, которая принимает параметр "(_) => ...".

Каждый из них полезен при сочетании с оператором подстановки, который применяется по умолчанию к _
Например, запись each [CustomerID], аналогичная записи each _[CustomerID], которая аналогичная записи (_) => _[CustomerID].

Пример. Использование каждого из фильтров строк таблицы

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"