Change Grafana query dynamically based on user inputs

hi @ldrascic , thank you for your solution. I also use InfluxDB (Flux) and everything works fine until Flux queries include other variables.

For example, I have a variable test_var:

And I use it in my query so as to parametrize it (variable Query):

CPU : from(bucket: "test") |> range(start: v.timeRangeStart\, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "cpu") |> filter(fn: (r) => r["_field"] == "usage_idle") |> filter(fn: (r) => r["cpu"] == "cpu-total") |> aggregateWindow(every: v.windowPeriod\, fn: mean\, createEmpty: false) |> yield(name: "mean") , MEM : from(bucket: "test") |> range(start: v.timeRangeStart\, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "mem") |> filter(fn: (r) => r["_field"] == "${test_var}") |> aggregateWindow(every: v.windowPeriod\, fn: mean\, createEmpty: false) |> yield(name: "mean")

I get the following error:

error

invalid: error @1:180-1:188: undefined identifier test_var

If I change ${test_var} to hardcoded value everything is fine.

Is it possible somehow to change Grafana query with variables dynamically based on user inputs?

May be it is necessary to escape variables somehow in Flux in this case?

This query
from(bucket: "test") |> range(start: v.timeRangeStart\, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "mem") |> filter(fn: (r) => r["_field"] == "${test_var}") |> aggregateWindow(every: v.windowPeriod\, fn: mean\, createEmpty: false) |> yield(name: "mean")

works fine if I just use it in a panel, but I need it to be selected by user…

Looks like Grafana doesn’t replace variable test_var with its value in this case and sends “${test_var}” to InfluxDB instead of “used_percent”

I use Grafana 10.2.1