Выражения, значения и выражение let
Запрос на языке формул Power Query M состоит из шагов выражения формулы, составляющих гибридный запрос. Выражение формулы можно вычислить (оценить), возвратив значение. Выражение Let инкапсулирует набор значений, которые требуется вычислить, снабдить именами, а затем использовать в последующем выражении, которое следует за оператором in. Например, выражение let может содержать переменную Source, которая равна значению Text.Proper() и возвращает текстовое значение в правильном регистре.
Выражение let
let
Source = Text.Proper("hello world")
in
Source
В приведенном выше примере ext.Proper("hello world") вычисляется как "Hello World".
В следующих разделах описаны типы значений в языке.
Значение примитива
Примитив — это однокомпонентное значение, например число, логическое значение, текст или значение NULL. Значение NULL может использоваться для указания отсутствия каких-либо данных.
Type | Пример значения |
---|---|
Двоичные данные | 00 00 00 02 // число точек (2) |
Date | 5/23/2015 |
Дата и время | 5/23/2015 12:00:00 AM |
DateTimeZone | 5/23/2015 12:00:00 AM -08:00 |
Duration | 15:35:00 |
Логические | True и False |
NULL | null |
Число | 0, 1, –1, 1.5 и 2.3e-5 |
Текст | "abc" |
Время | 12:34:12 PM |
Значение функции
Функция — это значение, которое при вызове с аргументами создает новое значение. Функции записываются путем перечисления параметров функции в круглых скобках, за которыми следует символ перехода =>, за которым следует определяющее функцию выражение. Например, чтобы создать функцию MyFunction, которая имеет два параметра, parameter1 и parameter2, и выполняет вычисление по ним:
let
MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
MyFunction
Вызов MyFunction() возвращает результат:
let
Source = MyFunction(2, 4)
in
Source
Этот код выдает значение 3.
Значения структурированных данных
Язык M поддерживает следующие значения структурированных данных:
Примечание
Структурированные данные могут содержать любое значение M. Несколько примеров см. в разделе Дополнительные примеры структурированных данных.
Список
Список — это отсчитываемая от нуля упорядоченная последовательность значений, заключенная в фигурные скобки { }. Фигурные скобки { } также используются для получения элемента из списка по позиции индекса. См. раздел [Значение списка](#_List_value).
Примечание
Power Query M поддерживает неограниченный размер списка, но если список записывается как литерал, он имеет фиксированную длину. Например, {1, 2, 3} имеет фиксированную длину, равную 3.
Ниже приведены некоторые примеры списков.
Значение | Type |
---|---|
{123, true, "A"} | Список, содержащий число, логическое значение и текст. |
{1, 2, 3} | Список чисел. |
{ {1, 2, 3}, {4, 5, 6} } |
Список из списка чисел. |
{ [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"] } |
Список записей. |
{123, true, "A"}{0} | Возвращение значения первого элемента в списке. Это выражение возвращает значение 123. |
{ {1, 2, 3}, {4, 5, 6} }{0}{1} |
Возвращение значения второго элемента из первого элемента списка. Это выражение возвращает значение 2. |
Record
Запись представляет собой набор полей. Поле — это пара "имя-значение", где имя является текстовым значением, уникальным в пределах записи поля. Синтаксис значений записи позволяет записывать имена без кавычек, в такой форме они также называются идентификаторами. Идентификатор может принимать две следующие формы:
Имя_идентификатора, например OrderID.
#"имя идентификатора", например, #"Сегодняшняя дата: ".
Ниже приведена запись, содержащая поля "OrderID", "CustomerID", "Item" и "Price" со значениями 1, 1, "Fishing rod" и 100,00. Квадратные скобки [] обозначают начало и конец выражения записи и используются для получения значения поля из записи. В следующих примерах показана запись и получение значения поля "Item".
Ниже приведен пример записи:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source
Чтобы получить значение поля "Item", используйте квадратные скобки в формате Source[Item]:
let Source =
[
OrderID = 1,
CustomerID = 1,
Item = "Fishing rod",
Price = 100.00
]
in Source[Item] //equals "Fishing rod"
Таблица
Таблица — это набор значений, упорядоченных по именованным столбцам и строкам. Тип столбца может быть неявным или явным. #table можно использовать для создания списка имен столбцов и списка строк. Таблица значений представляет собой список в списке. Фигурные скобки { } также используются для извлечения строки из таблицы по позиции индекса (перейдите к примеру 3. Получение строки из таблицы по позиции индекса).
Пример 1. Создание таблицы с неявными типами столбцов
let
Source = #table(
{"OrderID", "CustomerID", "Item", "Price"},
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
})
in
Source
Пример 2. Создание таблицы с явными типами столбцов
let
Source = #table(
type table [OrderID = number, CustomerID = number, Item = text, Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
}
)
in
Source
Оба приведенных выше примера создают таблицу следующего вида:
OrderID | CustomerID | Элемент | Цена |
---|---|---|---|
1 | 1 | Удочка | 100,00 |
2 | 1 | Черви, 1 фунт | 5.00 |
Пример 3. Получение строки из таблицы по позиции индекса
let
Source = #table(
type table [OrderID = number, CustomerID = number, Item = text, Price = number],
{
{1, 1, "Fishing rod", 100.00},
{2, 1, "1 lb. worms", 5.00}
}
)
in
Source{1}
Это выражение возвращает следующую запись:
Поле | Значение |
---|---|
OrderID | 2 |
CustomerID | 1 |
Элемент | Черви, 1 фунт |
Цена | 5 |
Дополнительные примеры структурированных данных
Структурированные данные могут содержать любое значение M. Ниже приводится несколько примеров.
Пример 1. Список со значениями [Primitive](#_Primitive_value_1), [Function](#_Function_value) и [Record](#_Record_value)
let
Source =
{
1,
"Bob",
DateTime.ToText(DateTime.LocalNow(), "yyyy-MM-dd"),
[OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0]
}
in
Source
Наглядно вычисление этого выражения можно представить следующим образом:
Пример 2. Запись, содержащая значения примитивов и вложенные записи
let
Source = [CustomerID = 1, Name = "Bob", Phone = "123-4567", Orders =
{
[OrderID = 1, CustomerID = 1, Item = "Fishing rod", Price = 100.0],
[OrderID = 2, CustomerID = 1, Item = "1 lb. worms", Price = 5.0]
}]
in
Source
Наглядно вычисление этого выражения можно представить следующим образом:
Примечание
Хотя многие значения могут быть записаны буквально в виде выражения, значение не является выражением. Например, вычисление выражения 1 дает значение 1, а вычисление выражения 1+1 дает значение 2. Это неочевидное, но важное различие. Выражения являются наборами правил для вычисления, а значения — результатами вычисления.
Выражение if
Выражение if осуществляет выбор между двумя выражениями на основе логического условия. Пример:
if 2 > 1 then
2 + 2
else
1 + 1
Первое выражение (2 + 2) выбирается, если логическое выражение (2 > 1) истинно, а второе выражение (1 + 1) выбирается, если оно ложно. Выбранное выражение (в данном случае 2 + 2) вычисляется и становится результатом выражения if (4).