0

我正在尝试对 Fluxgroup操作的结果进行转换。

我需要根据各个行的值得出一个值。

来源查询:

from('bucket')
|> ... filters, etc
|> group()
|> sort() 

返回具有以下形状的数据:

#group:
  result:
    table | field | value
    ----- | ----- | -----
        0 | "A"   | 1
        0 | "B"   | 2
        0 | "C"   | 3
#group:
  result:
    table | field | value
    ----- | ----- | -----
        1 | "A"   | 4
        1 | "B"   | 5
        1 | "C"   | 6
etc...

例如,我想要做的是添加组中所有行的值,最终得到如下所示的数据:

field | value
----- | -----
"New" | 6
"New" | 15
    

我已经尝试过map,但这似乎只能让我访问各个行,而不是组中的表。我的第一个想法是尝试将所有行映射到一个平面记录中,之后地图就变得微不足道了。

如何访问表本身?这是一个正确的方法吗?

4

1 回答 1

0

我确信这不是最佳的,但它目前对我有用,结果reduce更合适:

calculate = (r, accumulator) => {
  A = if r._field == "A" then r._value else accumulator.A
  B = if r._field == "B" then r._value else accumulator.B
  C = if r._field == "C" then r._value else accumulator.C
  return A + B + C
}

from('bucket')
  |> ... filters, etc
  |> group()
  |> sort() 
  |> reduce(
    // Define the initial accumulator record
    identity: {
      A: 0.0,
      B: 0.0,
      C: 0.0,
      Output: 0.0,
    },
    fn: (r, accumulator) => ({
      A: if r._field == "A" then r._value else accumulator.A,
      B: if r._field == "B" then r._value else accumulator.B,
      C: if r._field == "C" then r._value else accumulator.C,
      Output: calculateMassFlow(r, accumulator)
    })
  )
  |> map(fn: (r) => ({
    _time: r._time,
    _field: "Name",
    _value: r.Output
  }))
  |> group(columns: ["_field"])
于 2020-11-19T03:14:10.503 回答