Compartir vía


Modelo de evaluación

El modelo de evaluación del lenguaje de fórmulas M de Power Query se modela después de que el modelo de evaluación se encuentre normalmente en 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, puede reconocer que las fórmulas de la izquierda darán lugar a los valores de la derecha cuando se calculen:

Modelo de

Modelo de evaluación 2

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

Vamos a usar un registro para generar una expresión que es 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 se indica a continuación:

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

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

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

Los registros se pueden contener dentro de otros registros o anidados. Puede usar el operador de búsqueda ([ ]) para acceder a los campos de un registro por nombre. 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 registro siguiente:

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

Use el operador de índice posicional ({ }) para tener acceso a un elemento de una lista por su índice numérico. Los valores de una lista se conocen mediante un índice de base cero desde el principio de la lista. Por ejemplo, los índices 0 y 1 se usan para hacer referencia a los elementos primero y segundo de la lista siguiente:

[
    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 (Ir a expresiones, valores y expresión let), se evalúan mediante la evaluación diferida. Es decir, se evalúan cuando es necesario. Todas las demás expresiones se evalúan mediante la evaluación diligente. Es decir, se evalúan inmediatamente cuando se encuentran durante el proceso de evaluación. Una buena manera de pensar en esto es recordar que la evaluación de una expresión de lista o registro devolverá un valor de lista o registro que sepa cómo sus elementos de lista o campos de registro deben calcularse, cuando se solicitan (por operadores de búsqueda o índice).