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


Модель оценки

Модель оценки языка формул Power Query M моделиируется после того, как модель оценки обычно найдена в электронных таблицах, где порядок вычислений можно определить на основе зависимостей между формулами в ячейках.

Если вы написали формулы в электронной таблице, например Excel, вы можете распознать формулы слева, что приведет к значениям справа при вычислении:

Evaluation Model 1

Evaluation Model 2

В M выражение может ссылаться на предыдущие выражения по имени, и процесс оценки автоматически определяет порядок вычисления ссылочных выражений.

Воспользуемся записью, чтобы создать выражение, эквивалентное приведенному выше примеру электронной таблицы. При инициализации значения поля вы ссылаетесь на другие поля в записи по имени поля следующим образом:

[
    A1 = A2 * 2,
    A2 = A3 + 1,
    A3 = 1
]

Приведенное выше выражение оценивается в следующей записи:

[
    A1 = 4,
    A2 = 2,
    A3 = 1
]

Записи могут содержаться внутри или вложенными в других записях. Оператор подстановки ([ ]) можно использовать для доступа к полям записи по имени. Например, в следующей записи есть поле с именем Sales, содержащее запись, и поле с именем Total, которое обращается к полям FirstHalf и SecondHalf записи Продаж:

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = Sales[FirstHalf] + Sales[SecondHalf]
]

Приведенное выше выражение оценивается в следующей записи:

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = 2100
]

Оператор позиционного индекса ({ }) используется для доступа к элементу в списке по числовой индексе. Значения в списке ссылаются на использование отсчитываемого от нуля индекса с начала списка. Например, индексы 0 и 1 используются для ссылки на первые и второй элементы в списке ниже:

[
    Sales =
        {
            [
                Year = 2007,
                FirstHalf = 1000,
                SecondHalf = 1100,
                Total = FirstHalf + SecondHalf // equals 2100
            ],
            [
                Year = 2008,
                FirstHalf = 1200,
                SecondHalf = 1300,
                Total = FirstHalf + SecondHalf // equals 2500
            ]
        },
    #"Total Sales" = Sales{0}[Total] + Sales{1}[Total] // equals 4600
]

Ленивый и страстный анализ

Выражения членов List, Record и Table, как и выражения let (см. раздел Выражения, значения и выражение let), оцениваются с помощью отложенной оценки. Это означает, что они оцениваются по мере необходимости. Все остальные выражения оцениваются с помощью безотложной оценки. Это означает, что они оцениваются сразу же после обнаружения в ходе процесса оценки. Хороший способ думать об этом заключается в том, чтобы помнить, что оценка списка или выражения записи вернет значение списка или записи, которое знает, как его элементы списка или поля записи должны вычисляться при запросе (с помощью операторов поиска или индекса).