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


Выражения, значения и разрешить выражение

Языковой запрос формулы Power Query M состоит из шагов выражения формулы, создающих запрос mashup. Выражение формулы можно оценивать (вычислять), возвращая значение. Выражение let инкапсулирует набор значений, вычисляемых, назначенных имен, а затем используется в последующем выражении, которое следует инструкции. Например, выражение let может содержать исходную переменную, которая равна значению Text.Proper и дает текстовое значение в правильном случае.

Выражение Let

let
    Source = Text.Proper("hello world")
in
    Source

В приведенном выше Text.Proper("hello world") примере вычисляется "Hello World"значение .

В следующих разделах описываются типы значений на языке.

Примитивное значение

Примитивное значение — это однопартийное значение, например число, логический, текст или null. Значение NULL можно использовать для указания отсутствия любых данных.

Тип Пример значения
Binary 00 00 00 02 // число точек (2)
Дата 5/23/2015
Дата/время 5.23.2015 12:00:00
DateTimeZone 5.23.2015 12:00:00 AM -08:00
Длительность 15:35:00
Логический True и False
Null null
Число 0, 1, -1, 1,5 и 2.3e-5
Текст "abc"
Время 12:34:12 вечера

Значение функции

Функция — это значение, которое при вызове с аргументами создает новое значение. Функции записываются путем перечисления параметров функции в круглых скобках, за которыми следует символ перехода => и определяющее функцию выражение. Например, чтобы создать функцию с именем MyFunction , которая имеет два параметра и выполняет вычисление по параметру1 и параметр2:

let
    MyFunction = (parameter1, parameter2) => (parameter1 + parameter2) / 2
in
    MyFunction

Вызов MyFunction возвращает результат:

let
    Source = MyFunction(2, 4)
in
    Source

Этот код создает значение 3.

Структурированные значения данных

Язык M поддерживает следующие структурированные значения данных:

Примечание.

Структурированные данные могут содержать любое значение M. Чтобы просмотреть несколько примеров, перейдите к дополнительным структурированным примерам данных.

List

Список — это упорядоченная от нуля последовательность значений, заключенная в фигурные скобки { }. Фигурные фигурные скобки { } также используются для извлечения элемента из списка по позиции индекса. Дополнительные сведения см. в списке значений.

Примечание.

Power Query M поддерживает бесконечный размер списка, но если список написан как литерал, список имеет фиксированную длину. Например, {1, 2, 3} имеет фиксированную длину 3.

Ниже приведены некоторые примеры списка.

Значение Тип
{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}
Получите значение второго элемента из первого элемента List. Это выражение возвращает значение 2.

Запись

Запись — это набор полей. Поле — это пара "имя-значение", где имя является текстовым значением, уникальным в пределах текущей записи. Синтаксис для значений записей позволяет записывать имена без кавычки, форма также называется идентификаторами. Идентификатор может принимать следующие две формы:

  • identifier_name, например OrderID.

  • #"имя идентификатора", например, #"Сегодняшняя дата: ".

Ниже приведена запись, содержащая поля "OrderID", "CustomerID", "Item" и "Price" со значениями 1, 1, 1, "Рыболовный удочка" и 100,00. Квадратные фигурные скобки [] указывают начало и конец выражения записи и используются для получения значения поля из записи. В следующих примерах показана запись и получение значения поля Item.

Ниже приведен пример записи:

let Source =
        [
              OrderID = 1,
              CustomerID = 1,
              Item = "Fishing rod",
              Price = 100.00
        ]
in Source

Чтобы получить значение элемента, вы используете квадратные скобки как 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 lb. черви 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 lb. черви
Price 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 2 > 1 then
    2 + 2
else
    1 + 1

Первое выражение (2 + 2) выбирается, если логическое выражение (2 > 1) имеет значение true, а второй — (1 + 1) — значение false. Выбранное выражение (в данном случае 2 + 2) вычисляется и становится результатом выражения if (4).