计算模型

Power Query M 公式语言的计算模型是在电子表格中通常找到的评估模型之后建模的,可以在电子表格中根据单元格中的公式之间的依赖关系来确定计算顺序。

如果在电子表格(如 Excel)中编写公式,则可以识别左侧的公式将导致计算时右侧的值:

评估模型 1 评估

评估模型 2 评估

在 M 中,表达式可以按名称引用以前的表达式,计算过程将自动确定所引用表达式的计算顺序。

让我们使用记录来生成与上述电子表格示例等效的表达式。 初始化字段的值时,按字段的名称引用记录中的其他字段,如下所示:

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

上述表达式的计算结果为以下记录:

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

记录可以包含在其他记录内或 嵌套。 可以使用 查阅运算符 ([ ]) 按名称访问记录的字段。 例如,以下记录包含一个名为 Sales 的字段,以及一个名为 Total 的字段,用于访问 Sales 记录的 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
]

延迟和急切评估

列表记录 成员表达式以及 表达式(转到 表达式、值和 let 表达式)是使用 延迟计算计算的。 也就是说,根据需要评估它们。 所有其他表达式都使用 预先计算进行计算。 也就是说,在评估过程中遇到它们时会立即进行评估。 考虑这一点的好方法是记住,评估列表或记录表达式将返回一个列表或记录值,该值知道在请求时(通过查找或索引运算符)计算其列表项或记录字段需要计算的方式。