从列表中获取上限最大值

时间:2017-11-20 22:32:05

标签: powerquery m

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

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

它正确地向我返回520。但是,如果我将它放在AddColumn函数中并将530更改为本地字段引用:

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

然后我得到一个&#34;我们无法对类型Number&#34;进行字段访问。错误。我试图做的是什么,我只是把它格式错了?我总是对PQ中的范围和引用感到困惑,所以它可能就是这样。

1 个答案:

答案 0 :(得分:1)

each之后,[SomeNumbers]本身就是_[SomeNumbers]的缩写(这是您在过滤列时看到的内容)。在List.FirstN调用中,_引用列表中的数字而不是表格中的行:_的值与最接近的each相关联,其中是通过_each的外观之间的嵌套层数来衡量的。因此,在您的代码[SomeNumbers]中,我们试图找到一个数字上的SomeNumbers列,这个数字并不存在。

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

  1. 您可以使用let...in语句存储SomeNumbers列的当前值,以便稍后使用它,如下所示:
  2. each let currentNumber = [SomeNumbers], result = List.Max(List.FirstN(SomeTable[Breakpoints], each _ < currentNumber)) in result

    1. 您可以使用(x) => ...语法显式定义函数,而不是使用each两次,如下所示:
    2. each List.Max(List.FirstN(SomeTable[Breakpoints], (point) => point < [SomeNumbers]))