FineReport
本文介绍如何通过FineReport连接AnalyticDB for MySQL并进行报表管理。
前提条件
了解FineReport与AnalyticDB for MySQL之间的兼容性,请参见兼容性概览。
安装MySQL JDBC驱动。
安装FineReport。如果您是第一次安装FineReport,需要安装MySQL服务器(例如阿里云RDS MySQL),用于导入FineReport的元数据,FineReport提供了两种数据链接方式:
方式一:在数据决策系统中进行连接,请参见JDBC连接数据库。
方式二:在设计器中进行连接,mysql5.x版本可参考MySQL数据连接,mysql8.x版本可参考MySQL8数据连接插件。
如果您需要通过外网连接AnalyticDB for MySQL集群,请参见申请和释放公网地址。
连接AnalyticDB
打开FineReport,在菜单栏中单击 。
在定义数据连接页面进行参数配置。
参数
说明
数据库
选择MySQL。
驱动器
选择MySQL jdbc驱动。
URL
AnalyticDB for MySQL集群的连接地址,格式为:
jdbc:mysql://hostname:port
。hostname
:集群的外网地址或者VPC地址。port
:3306。
用户名
AnalyticDB for MySQL集群中创建的账号:
高权限账号。
普通账号。
密码
账号对应的密码。
完成上述参数配置后,单击测试连接测试连通性,测试通过后单击确定,连接至AnalyticDB for MySQL集群。
添加表
连接AnalyticDB新建数据集:数据集通过SQL查询语句从已经建立连接的数据库中取数,将数据以二维表的形式保存并显示在数据集管理面板处。
数据集管理面板选择模板数据集,单击上方的+。
在弹出的下拉列表中,选择数据库查询。
在弹出的数据库查询对话框中,找到AnalyticDB对应的数据源和对应表,写入数据查询语句,新建数据集ds1。如下示例,查询
select * from demo_sales
,查询并取出demo_sales表中的所有数据。通过聚合查询选出聚合的数据集。如新建数据集
ds2
,写入数据库查询语句SELECT 门店名称,SUM(销售额) AS 销售总量 FROM demo_sales GROUP BY 门店名称
,查询并取出每个门店的销售总量信息。单击确定,在数据集管理面板查看取出的数据。
示例
在报表中通过表格和柱状图展示按照商品种类和合同种类分组,每个付款种类下的最大合同销量,以及总销售量。报表效果如下图:
下载示例数据“合同销售总表”demo_contract。
在AnalyticDB for MySQL中建表。
找一列数据分布均匀的列做分布键,一列时间类型做分区键。请参考表结构设计。
观察到合同销售总表中的几列数据,按合同编号分布较随机,因此用合同编号做分区键。建表语句如下:
CREATE TABLE `demo_contract` ( `contract_id` VARCHAR, `customer_id` VARCHAR, `contract_type` VARCHAR, `amount` BIGINT, `payment_type` VARCHAR, `register_time` DATE, `purchase_amount` INT, `create_time` TIMESTAMP, `product_type` SMALLINT, `paid` tinyint, PRIMARY KEY (`contract_id`) ) DISTRIBUTED BY HASH(`contract_id`) INDEX_ALL='Y' STORAGE_POLICY='COLD'
建好表后,通过kettle把下载到本地的Excel导入AnalyticDB for MySQL。
kettle使用文档请参见通过Kettle导入至数仓版。
导入完成后,执行
select count(*) from demo_contract
,可以看到有668条数据。
下面利用导入的数据来生成demo报表:
FineReport中导入数据。获取按照商品种类和合同种类分组,每个付款种类下的最大合同销量,以及总销售量。导入两张表d1和d2。
d1按照商品种类、合同种类、付款种类分组,取每组销量最大值:
SELECT product_type, payment_type, contract_type, MAX(purchase_amount) AS max_amount FROM demo_contract GROUP BY product_type, payment_type, contract_type HAVING max_amount>0
d2按照商品种类、合同种类分组,算出所有付款种类的销量总和:
表格设计:
标题:合并A1~D2单元格,写入报表标题「合同销售概况」,设置标题为15号字体,字体加粗并居中。
单元格斜线:在一个单元格中用斜线分隔显示三个标题字段信息,合并A3、B3单元格,右击合并后的单元格,单击
。系统会弹出一个斜线编辑的对话框,在文本编辑框写入标题字段信息: 付款种类 | 合同种类 | 商品种类,可以通过添加空格来调整文字的位置。
数据绑定:
将数据集中的数据列拖入到对应单元格中。
C5单元格用于计算每个产品各自的总销量,所以要对C4单元格求和,选中C5单元格,单击上方快捷按钮中的插入公式,在弹出的公式编辑框中输入公式SUM(C4)。
D5单元格用于统计所有产品的总销量,所以要对D4单元格求和,同理,在D5单元格插入公式 SUM(D4)。
属性设置:
选中C3单元格,让产品字段的数据在表格中横向扩展,右边属性面板选择
。选中C4单元格,由于A4、B4、C3单元格的扩展已经确定了唯一的销量值,故C4单元格无需扩展,扩展方向为不扩展。C5和D5单元格也都要设置扩展方向为不扩展。
多数据集关联:当报表中存在不同数据集的数据时,需要通过添加数据过滤条件,建立起不同数据集之间的联系。
这张报表的数据来源于两个不同的数据集ds1和ds2,商品种类、合同种类字段是这两个数据集共有的字段,使用这个字段建立起他们之间的联系。选中并双击D4单元格,弹出数据列对话框,选择过滤。给单元格添加一个普通条件,将ds2与ds1的商品种类、合同种类两个字段进行绑定,实现两个数据集之间的关联。
图表设计:
合并A7~D15单元格,选择菜单栏
。选择 ,单击确定。选中图表,在右边属性面板选择
,设置柱形图的数据。数据来源:单元格数据;分类名:=B4;系列名:=C3;值:=C4。说明分类名、系列名、值在设置的时候必须要有等号,否则单元格会被作为字符串处理
报表预览:报表必须先保存才能预览,单击保存保存报表,单击预览,选择分页预览,即可在浏览器中查看报表。
相关文档
FineReport和FineBI的区别:FineReport和FineBI的区别。
FineReport和FineBI在操作中有一些相似性,FineBI常见问题参考:BI使用问题汇总。
FineReport新手FAQ:设计器问题汇总。
FineReport报表设计参考:报表应用学习路径。