Compartir a través de


Modelo de evaluación

El modelo de evaluación del lenguaje de fórmulas M de Power Query se modela después del modelo de evaluación que normalmente encontramos en las hojas de cálculo, donde el orden de los cálculos se puede determinar en función de las dependencias entre las fórmulas de las celdas.

Si ha escrito fórmulas en una hoja de cálculo como Excel, sabrá reconocer que, al calcularse, las fórmulas de la izquierda darán como resultado los valores de la derecha:

Evaluation Model 1

Evaluation Model 2

En M, una expresión puede hacer referencia a expresiones anteriores por su nombre, y el proceso de evaluación determinará automáticamente el orden en el que se calcularán las expresiones a las que se hace referencia.

Ahora se usará un registro para generar una expresión que sea equivalente al ejemplo de hoja de cálculo anterior. Al inicializar el valor de un campo, se hace referencia a otros campos del registro por el nombre del campo, como aquí:

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

La expresión anterior se evalúa como el siguiente registro:

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

Los registros pueden estar incluidos, o anidados en otros registros. Se puede usar el operador de búsqueda ([ ]) para acceder a los campos de un registro por sus nombres. Por ejemplo, el siguiente registro tiene un campo denominado Sales que contiene un registro y un campo denominado Total que tiene acceso a los campos FirstHalf y SecondHalf del registro Sales:

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

La expresión anterior se evalúa como el siguiente registro:

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

Usaremos el operador de índice posicional ({ }) para acceder a un elemento de una lista por su índice numérico. Para hacer referencia a los valores de una lista, se usa un índice de base cero desde el principio de la lista. Por ejemplo, los índices 0 y 1 se usan para hacer referencia al primer y segundo elemento de la siguiente lista:

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

Evaluación diferida y diligente

Las expresiones de miembro List, Record y Table, así como las expresiones let (vaya a Expresiones, valores y la expresión let), se evalúan con evaluación diferida. Es decir, se evalúan cuando es necesario. Las demás expresiones se evalúan mediante evaluación diligente. Es decir, se evalúan inmediatamente al encontrarlas durante el proceso de evaluación. Un modo adecuado de pensar en esto es recordar que evaluar una expresión de lista o de registro devolverá un valor de lista o registro que sabe cómo se deben calcular sus elementos de lista o campos de registro cuando se solicite (mediante operadores de búsqueda o de índice).