1. 概述
1.1 版本
FineBI 版本 | 功能变动 |
---|---|
6.0 | - |
6.0.16 | 参数新增支持【年月日-时分秒】格式 |
1.2 应用场景
用户可以通过简单的 SQL 语句对数据库中的表处理后再添加到「公共数据」中。
1.3 功能简介
FineBI 中的 SQL 语句不能创建新的数据表,也不能修改表结构,仅支持将已有数据库中的表通过 SQL 语句取数至 BI 。
SQL 语句的语法规则需要和连接的数据库适配。
2. 操作步骤
进入「公共数据」,选择一个有管理权限的文件夹(可参见:公共数据管理权限)。点击「新建数据集>数据库表」,如下图所示:
2.1 创建无参数的 SQL 数据集
选择需要使用的数据连接后,就可以输入 SQL 语句取数。点击「预览」查看是否取数正确,最后点击「确定」添加表。如下图所示:
SQL 示例语句:select * from new_salesdetail
注:添加 SQL 数据集时,输入的 SQL 语句中不能带分号,否则若在字段设置处修改了字段类型,会导致数据集更新失败。
2.2 创建有参数的 SQL 数据集
1)输入一句有参数的 SQL 语句(参数的命名规则可参见:参数命名规则)
2)点击「刷新」
3)对 SQL 中出现的参数设置参数类型和默认值
4)点击「预览」,查看取数结果,即筛选出所有时间大于 2016-12-12 14:15:25 的数据。
注:参数默认值可以设置为空,配合 if 函数或<parameter>实现参数为空时选择所有值的效果,详情可参见 参数为空选择所有值(直连) 。SQL 数据集支持添加参数后传递使用,详情使用介绍请参见 URL参数的传递使用(直连) 。
在设置时间参数的默认值时,我们可以设置动态时间,比如说昨天、上个月等。
2.3 更新 SQL 数据集
直连属性的 SQL 数据集添加后可直接使用,抽取属性的则需要更新后使用。如下图所示:
2.5 修改 SQL
SQL 数据集在添加完成后,用户可从下图两个入口修改 SQL 语句以及参数设置。
3. 支持调用存储过程的数据库
注1:存储过程仅对抽取数据有效,不支持直连数据库使用存储过程。
注2:FineBI不支持 Oracle 调用存储过程。
3.1 存储过程简介
「存储过程」就是存储在数据库中的一组 SQL 语句集。FineBI 在添加 SQL 数据集时,支持调用数据库中的存储过程,从而获得执行了存储过程 SQL 语句集后的表。
什么样的数据库能调用存储过程:可以使用 JDBC 方式连接,并可以通过 JDBC 执行 SQL 语句调用存储过程的数据库。
用户可以使用自检工具,按照 数据库连接失败排查步骤 2.3 节执行,在要查询的 SQL 语句后输入调用存储过程的语句,如果执行成功,即表明可以在 FineBI 调用存储过程。
3.2 调用示例
每种数据库的调用语句不同,针对不同类型的数据库使用对应的存储过程调用语句即可。
3.2.1 MySQL 数据库调用存储过程
在 SQL 语句框中输入call + 存储过程名(),点击「预览」查看调用结果,点击「确定」即可保存该数据集。
若存储过程中有参数,调用方式如下:
使用参数默认值:直接输入 call+存储过程名() 调用,例如 call test1()
不使用默认值,传入参数值:call+存储过程名('参数值1','参数值2') ,例如 call test('a','100')
3.2.2 SQL Server 数据库调用存储过程
在 SQL 语句框中输入execute+存储过程名,点击「预览」查看调用结果,点击「确定」即可保存该数据集。如下图所示:
若存储过程中有参数,调用方式如下:
使用参数默认值:直接输入 execute+存储过程名 调用,例如 execute StuCouIN
不使用默认值,传入参数值:execute+存储过程名 '参数值1','参数值2' ,例如 execute StuCouIN '7001','2'
4. 注意事项
4.1 新增字段后数据预览界面不显示
若修改 SQL 数据集的 SQL 语句,增加「合同付款类型」字段,点击「确定」,如下图所示:
修改 SQL 数据集后,数据表不会直接将添加的字段更新进来,需要点击基础表的「编辑」按钮。手动勾选新增的字段,如下图所示:
4.2 添加数据库视图
有时用户需要在 BI 中添加数据库视图,可以通过添加 SQL 数据集的方式实现。
例如 MySQL 数据库中存在视图,可创建 SQL 数据集取数到 BI ,如下图所示:
也可进入「管理系统>数据连接>数据连接管理」,重新连接数据库并保存,即可通过 添加数据库表 添加视图。
4.3 6240001 duplicate field names found
问题描述:SQL数据集预览失败,错误代码:6240001 duplicate field names found :XXXXX
原因分析:列名重复
解决方案:请检查并修改SQL,确保不存在重复列名称