从列表中获取上限最大值

Get Capped Maximum Value From List

我有一个值列表,范围从 500 到 1000。我有第二个值列表,表示 500-1000 范围内的相关断点(500、520、540、600 等)。我需要 return 第二个列表中小于第一个列表中给定数字中的值的最大值。我注意到 "N" 函数可以让你为它们设置条件,例如,如果我这样做:

List.Max(List.FirstN(SomeTable[Breakpoints], each _ < 530))

对我来说 return 是 520。但是,如果我将其放入 AddColumn 函数并将 530 更改为本地字段引用:

Table.AddColumn(MyTable, "MinValue", each List.Max(List.FirstN(SomeTable[Breakpoints], each _ < [SomeNumbers])))

然后我收到 "We cannot apply field access to the type Number" 错误。我正在尝试做的是可能的,我只是格式化错误吗?我总是对 PQ 中的范围和引用感到困惑,所以可能就是这样。

each 之后,[SomeNumbers] 本身就是 _[SomeNumbers] 的缩写(这是您在过滤列时看到的)。在 List.FirstN 调用中,_ 引用列表中的数字而不是 table 中的一行:_ 的值与最接近的 each,其中紧密度是通过 _each 的出现之间的嵌套层数来衡量的。因此,在您的代码中,[SomeNumbers] 试图在不存在的数字上查找 SomeNumbers 列。

有几种方法可以解决这个问题:

  1. 您可以使用 let...in 语句来存储 SomeNumbers 列的当前值以备后用,如下所示:

each let currentNumber = [SomeNumbers], result = List.Max(List.FirstN(SomeTable[Breakpoints], each _ < currentNumber)) in result

  1. 您可以使用 (x) => ... 语法显式定义函数,而不是使用 each 两次,如下所示:

each List.Max(List.FirstN(SomeTable[Breakpoints], (point) => point < [SomeNumbers]))