我尝试连接两个表:电流和电压 两者是同时测量的,只有几毫秒的延迟。当我尝试使用联合合并他们的列时,我得到很多空值。
我的目标是将两列相乘,以计算幂。但因此它们必须保持一致。我怎样才能做到这一点,然后使用 Flux 将它们相乘。
voltages = from(bucket: "data")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "power_supply")
|> filter(fn: (r) => r["device"] == "multi_1")
|> filter(fn: (r) => r["_field"] == "ch1_measured_voltage_(V)")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
|> duplicate(column: "_value", as: "voltage")
|> keep(columns: ["_time", "voltage"])
|> yield(name: "voltage")
currents = from(bucket: "data")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "power_supply")
|> filter(fn: (r) => r["device"] == "multi_1")
|> filter(fn: (r) => r["_field"] == "ch1_measured_current_(A)")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
|> duplicate(column: "_value", as: "current")
|> keep(columns: ["_time", "current"])
|> yield(name: "current")
comb = union(tables: [voltages, currents])
|> sort(columns: ["_time"], desc: false)
|> yield(name: "mean")
你可以使用pivot来做到这一点,并记得使用pivot后排序:
from(bucket: "data")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "power_supply")
|> filter(fn: (r) => r["device"] == "multi_1")
|> filter(fn: (r) => r["_field"] == "ch1_measured_voltage_(V)" or r["_field"] == "ch1_measured_current_(A)")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> sort(columns: ["_time"])
|> map(fn: (r) => ({r with _value: r["ch1_measured_voltage_(V)"] * r["ch1_measured_current_(A)"]}))
|> yield(name: "mean")