1、直连模式下,ORDER BY不生效
- 在添加 SQL 数据集时,如果 SQL 语句中用到了 ORDER BY 语句,则该 SQL 数据集的计算模式必须选择「抽取数据」来保存。在直连模式下,FineBI 会忽略 SQL 中的 ORDER BY 子句。
- 直连模式的机制:直连模式下,FineBI 将查询直接下发给数据库,但为了优化查询性能,FineBI 的直连引擎通常会剥离或重写 SQL 中的排序逻辑,因此预览数据会呈现数据库返回的默认随机顺序。
可以用 row_number() over()解决
核心原理是:
ORDER BY只是「结果集的展示顺序」,是元信息,会被直连引擎丢弃;row_number() over(ORDER BY ...)是一个计算列,它在数据库端就把排序结果固化成了一个真实的数值字段(1、2、3…),以普通数据的形式返回给 FineBI,因此不受 ORDER BY 被剥离的影响。
举个例子
写法一:直连模式下 ORDER BY 失效
SELECT city AS 城市, SUM(amount) AS 销售额 FROM t_sales GROUP BY city ORDER BY city写法二:用 row_number() over() 生成稳定序号
SELECT t.城市, t.销售额, row_number() OVER (ORDER BY t.城市) AS 排序序号 FROM ( SELECT city AS 城市, SUM(amount) AS 销售额 FROM t_sales GROUP BY city ) t返回结果会是这样,序号被固化下来,无论直连还是抽取都稳定:
2、组件显示年月并且往前推12个月
这里会有问题,默认会先走下面的条件,数据源中最新的月份是2026-08,往前推12个月
当我们选择7月份问题就出现了,并没有显示去年的8月份数据。
也就是筛选条件先过滤2026-08到2025-07的数据,然后在过滤2025-07之前的数据
这里我们需要这样设置,设置两个字段的过滤
当我们再次选择2026-07,可以看到2025-08的数据出来了,我们推测这样设置应该就是先走第一个过滤条件,然后再走第二个过滤条件,这样就是按顺序进行过滤了。
所以如果需要过滤12个月之内的数据,需要扩展两个时间字段才行。
3、横坐标显示月份
有时候横坐标只需要显示月份就行了,这里我们添加计算字段
这里的指标日期是年月时间类型
CONCATENATE(MONTH(${安全环保-万支卷烟综合能耗_指标日期}),"月")如下设置,就可以显示月份了