Поделиться через


Основные сведения о функциях 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"