From brief experimentation, it appears that integral() uses a linear interpolation between points. Is there a method for disabling this? Essentially what I’m after is a zero-order hold so that the previous value remains constant until changed. This enables integration to be used for calculating time-weighted means for a set of irregular events.
I currently have the following workaround:
events = from(bucket: ... shifted = events |> timeShift(duration: -1ns) |> drop(columns: ["val"]) union(tables: [events, shifted]) |> sort(columns: ["_time"]) |> fill(column: "val", usePrevious: true) |> integral(unit: 1m, column: "val")
This works, but introduces a small amount of error due to the 1ns impulse response. It feels like there should be a builtin approach for this, but am very new to working with InfluxDB / flux and would love any advice. Thanks in advance.