Compartilhar via


Modelo de avaliação

O modelo de avaliação da linguagem de fórmulas Power Query M é modelado após o modelo de avaliação normalmente encontrado em planilhas, em que a ordem dos cálculos pode ser determinada com base nas dependências entre as fórmulas nas células.

Se você tiver escrito fórmulas em uma planilha como o Excel, poderá reconhecer que as fórmulas à esquerda resultarão nos valores à direita quando calculadas:

Evaluation Model 1

Evaluation Model 2

Em M, uma expressão pode referenciar expressões anteriores por nome e o processo de avaliação determinará automaticamente a ordem na qual as expressões referenciadas serão calculadas.

Usaremos um registro para produzir uma expressão equivalente ao exemplo da planilha acima. Ao inicializar o valor de um campo, você faz referência a outros campos dentro do registro pelo nome do campo, da seguinte maneira:

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

A expressão acima é avaliada como o seguinte registro:

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

Os registros podem estar contidos ou aninhados em outros registros. É possível usar o operador de pesquisa ([ ]) para acessar os campos de um registro pelo nome. Por exemplo, o registro a seguir tem um campo chamado "Sales" com um registro e um campo chamado "Total" que acessa os campos "FirstHalf" e "SecondHalf" do registro "Sales":

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

A expressão acima é avaliada como o seguinte registro:

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

Use o operador de índice posicional ({ }) para acessar um item em uma lista por seu índice numérico. Os valores dentro de uma lista são referenciados usando um índice de base zero desde o início da lista. Por exemplo, os índices 0 e 1 são usados para referenciar o primeiro e o segundo itens na lista abaixo:

[
    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
]

Avaliação lenta e rápida

As expressões de membro List, Record e Table, bem como as expressões let (acesse Expressões, valores e expressão Let), são avaliadas por meio da avaliação lenta. Ou seja, elas são avaliadas quando necessário. Todas as outras expressões são avaliadas usando avaliação ansiosa. Ou seja, elas são avaliadas imediatamente quando são encontradas durante o processo de avaliação. Uma boa maneira de pensar sobre nisso é lembrar de que a avaliação de uma expressão de lista ou registro retornará um valor de lista ou registro que sabe como seus itens de lista ou campos de registro precisam ser computados, quando solicitado (por operadores de pesquisa ou índice).