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