如何在Grafana时序图中按YYYY-MM正确分组?问题求助
解决Grafana时序图按月分组的异常问题
问题原因分析
__timeGroup('1M')的分组逻辑缺陷:Grafana默认的__timeGroup函数是按固定天数间隔(而非自然月)分组,比如从epoch时间开始每30/31天划分一个区间,导致数据点时间不是每月第一天。- 异常10月数据点的由来:由于固定间隔的分组起始点偏移,2022-11-01的记录被划入了以2022-10-19为起始的间隔组,因此出现了无对应数据的月份分组点。
修正后的查询语句
方案一:用DATE_TRUNC强制按自然月分组(推荐)
直接通过数据库日期截断函数,将DischargeDate对齐到当月第一天,再适配Grafana的时间格式:
SELECT $__time(DATE_TRUNC('month', DischargeDate)) as time, AVG(Los) AS Average_LOS FROM $hospital_table.ca_prediction_stats AS stats WHERE $__timeFilter(DischargeDate) GROUP BY DATE_TRUNC('month', DischargeDate) ORDER BY 1;
方案二:用__timeGroupAlias的自然月对齐参数
利用Grafana函数的扩展参数,指定按自然月起始点对齐分组:
SELECT $__timeGroupAlias(DischargeDate, '1M', 0, 'start') as time, AVG(Los) AS Average_LOS FROM $hospital_table.ca_prediction_stats AS stats WHERE $__timeFilter(DischargeDate) GROUP BY 1 ORDER BY 1;
关键说明
DATE_TRUNC('month', DischargeDate):将任意日期截断到当月第一天的0点,确保分组严格对应自然月范围。$__time():将数据库日期格式转换为Grafana时序图兼容的时间戳,避免图表解析异常。- 时区一致性:检查Grafana偏好设置(Configuration > Preferences)与数据库时区是否一致,否则可能出现日期显示偏移。
内容的提问来源于stack exchange,提问作者Kreitz Gigs
相关产品推荐
相关产品推荐

