histogram - 在 grafana 中显示每小时平均值(直方图)
问题描述
给定具有每小时数据点的(电力)市场数据的时间序列,我想显示一个条形图,其中包含每小时数据的所有时间/时间范围平均值,以便分析师可以轻松地将实际价格与所有时间平均值(哪个小时一天中最贵/最便宜的)。
我们有 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 中用它绘制简单的小时直方图。我非常感谢有关如何使用任何面板来完成此任务的任何建议。
解决方案
- 您的查询没有为 Grafana 返回正确的时间序列数据 - 时间字段不是有效的时间戳,所以不要只提取小时,而是提供完整
start_timestamp
的(我希望它是timestamp
数据类型,值是 UTC) - 添加 WHERE
time
条件 - 使用 Grafana 的宏__timeFilter
- 使用 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 中可视化非时间序列数据。这第二个查询可能无法正常工作,但它至少给了你一个想法。
推荐阅读
- android - 在 FirebaseRecyclerAdapter 中未调用 onCreateViewHolder
- javascript - 大写数组元素Javascript Nodejs
- javascript - Angular js 1 本地视频播放器
- javascript - 使用流星 webApp 避免 xss 的最佳实践?
- java - 如何在 Google Cloud Build 上加速 java maven 构建(100 个依赖项)
- spring-boot - 了解 SpringBootTest 中的 TestExecutionListeners 和 BaseTest 类
- node.js - 如何修复“找不到替代的 telinit 实现来生成”。在 ubuntu 中尝试 npm init 时
- javascript - 属性 MouseEvent.button 不适用于 mouseover 事件
- json - 如何在 .Net Core Rest api 中将 Json 对象发送到 ViewModel
- django - 从POST数据中提取多个pk,Django