Partilhar via


Modelo de avaliação

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

Se tiver escrito fórmulas numa folha de cálculo 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 fazer referência a expressões anteriores pelo nome, e o processo de avaliação determinará automaticamente a ordem na qual as expressões referenciadas são calculadas.

Vamos usar um registro para produzir uma expressão que seja equivalente ao exemplo de planilha acima. Ao inicializar o valor de um campo, você se refere 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 avalia o seguinte registro:

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

Os registros podem ser contidos ou aninhados em outros registros. Você pode usar o operador de pesquisa ([ ]) para acessar os campos de um registro por nome. Por exemplo, o registro a seguir tem um campo chamado Sales contendo 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 avalia 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 referidos usando um índice baseado em 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 preguiçosa e ansiosa

As expressões de membros List, Record e Table, bem como as expressões let (Go to Expressions, values e let expression), são avaliadas usando avaliação preguiçosa. Ou seja, são avaliados quando necessário. Todas as outras expressões são avaliadas por meio de uma avaliação ansiosa. Ou seja, são avaliados imediatamente quando encontrados durante o processo de avaliação. Uma boa maneira de pensar sobre isso é lembrar que avaliar uma lista ou expressão de registro retornará uma lista ou valor de registro que sabe como seus itens de lista ou campos de registro precisam ser calculados, quando solicitado (por operadores de pesquisa ou índice).