帆软看板 - 问题收集

1、直连模式下,ORDER BY不生效

  1. 在添加 SQL 数据集时,如果 SQL 语句中用到了 ORDER BY 语句,则该 SQL 数据集的计算模式必须选择「抽取数据」来保存。在直连模式下,FineBI 会忽略 SQL 中的 ORDER BY 子句。
  2. 直连模式的机制:直连模式下,FineBI 将查询直接下发给数据库,但为了优化查询性能,FineBI 的直连引擎通常会剥离或重写 SQL 中的排序逻辑,因此预览数据会呈现数据库返回的默认随机顺序。

可以用 row_number() over()解决

核心原理是:

  • ORDER BY 只是「结果集的展示顺序」,是元信息,会被直连引擎丢弃;
  • row_number() over(ORDER BY ...) 是一个计算列 ,它在数据库端就把排序结果固化成了一个真实的数值字段(1、2、3...),以普通数据的形式返回给 FineBI,因此不受 ORDER BY 被剥离的影响。

举个例子

写法一:直连模式下 ORDER BY 失效

sql 复制代码
	SELECT 
	    city AS 城市,
	    SUM(amount) AS 销售额
	FROM t_sales
	GROUP BY city
	ORDER BY city

写法二:用 row_number() over() 生成稳定序号

sql 复制代码
	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(${安全环保-万支卷烟综合能耗_指标日期}),"月")

如下设置,就可以显示月份了

相关推荐
鱼很腾apoc9 小时前
【MySQL】第4期 用户管理与 C 语言连接编程详解
linux·服务器·c语言·mysql·connector/c
wangruofeng9 小时前
2026 Web 技术选型指南,AI 时代如何选择适合项目的技术栈
前端·aigc·ai编程
honkun69 小时前
vue 表格组件 vxe-table 修改滚动条样式,修改滚动条样式,统一宽度、颜色与自动隐藏
前端·javascript·vue.js
刚入门的大一新生9 小时前
Linux-进程间通信1
linux·运维·服务器
爱勇宝10 小时前
研究数字孪生的这半年,做了个 Demo,也有了一些新想法
前端·程序员
张宇Joaquin10 小时前
Linux系统下磁盘扇区512n、512e和4kn的区别
linux·运维·数据库
道虽迩,不行不至10 小时前
数据库自动连库执行增量脚本-Linux
linux·数据库
不可能片场10 小时前
工程实践 一个缓存把选片从十分钟压到一分钟
前端·electron
GeW10 小时前
新质生产力发展路线图来了,Linux和数据库人该怎么接
linux·数据库
前端小万10 小时前
探索副业五个月,最终以放弃告终
前端·后端·面试