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