Отображение среднечасового значения (гистограмма) в графане - PullRequest
3 голосов
/ 13 марта 2020

Учитывая временные ряды рыночных данных (электроэнергии) с точками данных каждый час, я хочу показать гистограмму со всеми средними временными и временными рамками для каждого часа данных, чтобы аналитик мог легко сравнивать фактические цены со всеми средними значениями за все время. (какой час дня является наиболее / наименее дорогим).

У нас есть cratedb в качестве бэкэнда, который используется в графане как источник postgres.

SELECT
  extract(HOUR from start_timestamp) as "time",
  avg(marketprice) as value
FROM doc.el_marketprices
GROUP BY 1
ORDER BY 1

Итак, мои данные в основном выглядят так:

time    value
23.00   23.19
22.00   25.38
21.00   29.93
20.00   31.45
19.00   34.19
18.00   41.59
17.00   39.38
16.00   35.07
15.00   30.61
14.00   26.14
13.00   25.20
12.00   24.91
11.00   26.98
10.00   28.02
9.00    28.73
8.00    29.57
7.00    31.46
6.00    30.50
5.00    27.75
4.00    20.88
3.00    19.07
2.00    18.07
1.00    19.43
0       21.91

После нескольких часов возни с гистограммами, режимом гистограммы, панелью тепловых карт и многим другим, я просто не могу рисовать простая гистограмма часов дня с этим в Графане. Я был бы очень признателен за любые советы о том, как использовать любую панель для достижения этой цели.

1 Ответ

2 голосов
/ 16 марта 2020
  1. ваш запрос не возвращает правильные данные временного ряда для Grafana - поле времени не является действительной отметкой времени, поэтому не извлекайте только час, но предоставьте полные start_timestamp (надеюсь, это timestamp данные тип и значение в UT C)
  2. добавить условие WHERE time - использовать макрос Графаны __timeFilter
  3. использовать макрос Графаны $__timeGroupAlias для ежечасной группировки
SELECT
  $__timeGroupAlias(start_timestamp,1h,0),
  avg(marketprice) as value
FROM doc.el_marketprices
WHERE $__timeFilter(start_timestamp)
GROUP BY 1
ORDER BY 1

Это даст вам данные для исторического c графика с ежечасными средними значениями.

Требуемая гистограмма может быть сложной, но вы можете попытаться создать метри c, которая будет извлечена час, например

SELECT
  $__timeGroupAlias(start_timestamp,1h,0),
  extract(HOUR from start_timestamp) as "metric",
  avg(marketprice) as value
FROM doc.el_marketprices
WHERE $__timeFilter(start_timestamp)
GROUP BY 1
ORDER BY 1

А затем визуализируйте его как гистограмму. Помните, что Grafana предназначен для данных временных рядов, поэтому вам нужна правильная временная метка (не только извлеченные часы, в конце концов вы можете ее подделать), иначе вам будет трудно визуализировать данные не временных рядов в Grafana. Этот второй запрос может не работать должным образом, но он дает вам хотя бы представление.

...