diff --git a/pihole-granular-stats/grafana/Pi-Hole_Per_Client.json b/pihole-granular-stats/grafana/Pi-Hole_Per_Client.json
--- a/pihole-granular-stats/grafana/Pi-Hole_Per_Client.json
+++ b/pihole-granular-stats/grafana/Pi-Hole_Per_Client.json
#
+ "name": "DS_INFLUXDB",
#
+ "type": "datasource",
#
+ "pluginId": "influxdb",
#
+ "pluginName": "InfluxDB"
#
+ "type": "datasource",
#
+ "name": "Time series",
#
+ "uid": "-- Grafana --"
#
+ "iconColor": "rgba(0, 211, 255, 1)",
#
+ "name": "Annotations & Alerts",
#
+ "fiscalYearStartMonth": 0,
#
+ "uid": "${DS_INFLUXDB}"
#
+ "colorMode": "value",
#
+ "justifyMode": "auto",
#
+ "orientation": "auto",
#
+ "pluginVersion": "9.3.6",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"total\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> sum()\n ",
#
+ "title": "DNS Queries in Period",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "colorMode": "value",
#
+ "justifyMode": "auto",
#
+ "orientation": "auto",
#
+ "pluginVersion": "9.3.6",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"blocklisted\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> sum()",
#
+ "title": "Domains Blocked in Period",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "colorMode": "value",
#
+ "justifyMode": "auto",
#
+ "orientation": "auto",
#
+ "pluginVersion": "9.3.6",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "blocked = from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"blocklisted\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> aggregateWindow(every: 1d, fn: sum)\n \ntotal = from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"total\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> aggregateWindow(every: 1d, fn: sum)\n \n \njoin(tables: {t1: total, t2: blocked}, on: [\"_time\"])\n |> map(fn: (r) => ({ \n _value: (float(v: r._value_t2) / float(v: r._value_t1)) * 100.0\n }))\n |> last()",
#
+ "title": "Blocked %",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "colorMode": "value",
#
+ "justifyMode": "auto",
#
+ "orientation": "auto",
#
+ "pluginVersion": "9.3.6",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "// This relies on the pihole_stats measurement\n\nfrom(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_stats\")\n |> filter(fn: (r) => r._field == \"domains_being_blocked\")\n |> last()",
#
+ "title": "Domains on Blocklist",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "mode": "palette-classic"
#
+ "axisCenteredZero": false,
#
+ "axisColorMode": "text",
#
+ "axisPlacement": "auto",
#
+ "gradientMode": "none",
#
+ "lineInterpolation": "linear",
#
+ "scaleDistribution": {
#
+ "showPoints": "auto",
#
+ "displayMode": "list",
#
+ "placement": "bottom",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"total\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean)",
#
+ "title": "DNS Queries",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "mode": "palette-classic"
#
+ "axisCenteredZero": false,
#
+ "axisColorMode": "text",
#
+ "axisPlacement": "auto",
#
+ "gradientMode": "none",
#
+ "lineInterpolation": "linear",
#
+ "scaleDistribution": {
#
+ "showPoints": "auto",
#
+ "displayMode": "list",
#
+ "placement": "bottom",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"total\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> derivative(nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean)",
#
+ "title": "DNS Queries Per Second",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "mode": "palette-classic"
#
+ "axisCenteredZero": false,
#
+ "axisColorMode": "text",
#
+ "axisPlacement": "auto",
#
+ "gradientMode": "none",
#
+ "lineInterpolation": "linear",
#
+ "scaleDistribution": {
#
+ "showPoints": "auto",
#
+ "displayMode": "list",
#
+ "placement": "bottom",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field != \"total\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean)",
#
+ "title": "Query Statuses",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "mode": "palette-classic"
#
+ "axisCenteredZero": false,
#
+ "axisColorMode": "text",
#
+ "axisPlacement": "auto",
#
+ "gradientMode": "none",
#
+ "lineInterpolation": "linear",
#
+ "scaleDistribution": {
#
+ "showPoints": "auto",
#
+ "displayMode": "list",
#
+ "placement": "bottom",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"blocklisted\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean)",
#
+ "title": "Blocked DNS Queries",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "mode": "palette-classic"
#
+ "axisCenteredZero": false,
#
+ "axisColorMode": "text",
#
+ "axisPlacement": "auto",
#
+ "gradientMode": "none",
#
+ "lineInterpolation": "linear",
#
+ "scaleDistribution": {
#
+ "showPoints": "auto",
#
+ "displayMode": "list",
#
+ "placement": "bottom",
#
+ "uid": "${DS_INFLUXDB}"
#
+ "query": "from(bucket: \"telegraf/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"pihole_clients\")\n |> filter(fn: (r) => r._field == \"blocklisted\")\n |> filter(fn: (r) => r.client == \"${client}\")\n |> derivative(nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean)",
#
+ "title": "Blocked DNS Queries Per Second",
#
+ "definition": "from(bucket: \"telegraf\")\n|> range(start: v.timeRangeStart)\n|> filter(fn: (r) => r._measurement == \"pihole_clients\")\n|> keyValues(keyColumns: [\"client\"])\n|> group()\n|> keep(columns: [\"_value\"])\n",
#
+ "query": "from(bucket: \"telegraf\")\n|> range(start: v.timeRangeStart)\n|> filter(fn: (r) => r._measurement == \"pihole_clients\")\n|> keyValues(keyColumns: [\"client\"])\n|> group()\n|> keep(columns: [\"_value\"])\n",
#
+ "skipUrlSync": false,
#
+ "title": "Pi-Hole Per Client",
#
\ No newline at end of file