Отображение среднечасового значения (гистограммы) в графане

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

У нас есть cratedb в качестве бэкэнда, который используется в grafana точно так же, как источник 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

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


person Jürgen Zornig    schedule 13.03.2020    source источник


Ответы (1)


  1. ваш запрос не возвращает правильные данные временного ряда для Grafana - поле времени не является допустимой отметкой времени, поэтому не извлекайте только час, а предоставьте полный start_timestamp (я надеюсь, что это тип данных timestamp и значение в UTC)
  2. добавить условие WHERE time - использовать макрос Grafana __timeFilter
  3. используйте макрос Grafana $__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

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

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

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. Этот второй запрос может работать неправильно, но он дает вам хотя бы представление.

person Jan Garaj    schedule 16.03.2020