本文介绍如何通过FineReport连接AnalyticDB MySQL版并进行报表管理。

前提条件

  • 了解FineReport与AnalyticDB MySQL版之间的兼容性,请参见兼容性概览
  • 安装MySQL JDBC驱动。
  • 安装FineReport。如果您是第一次安装FineReport,需要安装MySQL服务器(例如阿里云RDS MySQL),用于导入FineReport的元数据,FineReport提供了两种数据链接方式:
  • 如果您需要通过外网连接AnalyticDB MySQL版集群,请参见申请和释放公网地址

连接AnalyticDB

  1. 打开FineReport,在菜单栏中单击服务器 > 定义数据连接
  2. 定义数据连接页面进行参数配置。
    配置连接参数
    参数 说明
    数据库 选择MySQL
    驱动器 选择MySQL jdbc驱动
    URL AnalyticDB MySQL版集群的连接地址,格式为:jdbc:mysql://hostname:port
    • hostname:集群的外网地址或者VPC地址。
    • port:3306。
    用户名 AnalyticDB MySQL版集群中创建的账号:
    • 高权限账号。
    • 普通账号。
    密码 账号对应的密码。
  3. 完成上述参数配置后,单击测试连接测试连通性,测试通过后单击确定,连接至AnalyticDB MySQL版集群。

添加表

连接AnalyticDB新建数据集:数据集通过SQL查询语句从已经建立连接的数据库中取数,将数据以二维表的形式保存并显示在数据集管理面板处。
  1. 数据集管理面板选择模板数据集,单击上方的+221040803
  2. 在弹出的下拉列表中,选择数据库查询2
  3. 在弹出的数据库查询对话框中,找到AnalyticDB对应的数据源和对应表,写入数据查询语句,新建数据集ds1。如下示例,查询select * from demo_sales,查询并取出demo_sales表中的所有数据。2021040802
  4. 通过聚合查询选出聚合的数据集。如新建数据集ds2,写入数据库查询语句SELECT 门店名称,SUM(销售额) AS 销售总量 FROM demo_sales GROUP BY 门店名称,查询并取出每个门店的销售总量信息。
  5. 单击确定,在数据集管理面板查看取出的数据。

示例

在报表中通过表格和柱状图展示按照商品种类和合同种类分组,每个付款种类下的最大合同销量,以及总销售量。报表效果如下图:

2021040804
  1. 下载示例数据“合同销售总表”demo_contract
  2. AnalyticDB MySQL版中建表。
    1. 找一列数据分布均匀的列做分布键,一列时间类型做分区键。请参考结构设计
    2. 观察到合同销售总表中的几列数据,按合同编号分布较随机,因此用合同编号做分区键。建表语句如下:
      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`)
      ) DISTRIBUTE BY HASH(`contract_id`) INDEX_ALL='Y' STORAGE_POLICY='COLD'
  3. 建好表后,通过kettle把下载到本地的Excel导入AnalyticDB MySQL版
    1. kettle使用文档请参见使用Kettle将本地数据同步至AnalyticDB for MySQL
    2. 导入完成后,执行select count(*) from demo_contract,可以看到有668条数据。
下面利用导入的数据来生成demo报表:
  1. FineReport中导入数据。获取按照商品种类和合同种类分组,每个付款种类下的最大合同销量,以及总销售量。导入两张表d1和d2。
    1. 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
    2. d2按照商品种类、合同种类分组,算出所有付款种类的销量总和:20210408052021040806
  2. 表格设计:
    1. 标题:合并A1~D2单元格,写入报表标题「合同销售概况」,设置标题为15号字体,字体加粗并居中。
    2. 单元格斜线:在一个单元格中用斜线分隔显示三个标题字段信息,合并A3、B3单元格,右击合并后的单元格,单击单元格元素 > 插入斜线。系统会弹出一个斜线编辑的对话框,在文本编辑框写入标题字段信息: 付款种类 | 合同种类 | 商品种类,可以通过添加空格来调整文字的位置。20210408072021040808
  3. 数据绑定:
    1. 将数据集中的数据列拖入到对应单元格中。
    2. C5单元格用于计算每个产品各自的总销量,所以要对C4单元格求和,选中C5单元格,单击上方快捷按钮中的插入公式,在弹出的公式编辑框中输入公式SUM(C4)。
    3. D5单元格用于统计所有产品的总销量,所以要对D4单元格求和,同理,在D5单元格插入公式 SUM(D4)。2021040809
  4. 属性设置:
    1. 选中C3单元格,让产品字段的数据在表格中横向扩展,右边属性面板选择单元格属性 > 扩展 > 基本 > 扩展方向 > 横向
    2. 选中C4单元格,由于A4、B4、C3单元格的扩展已经确定了唯一的销量值,故C4单元格无需扩展,扩展方向为不扩展。C5和D5单元格也都要设置扩展方向为不扩展。2021040811
  5. 多数据集关联:当报表中存在不同数据集的数据时,需要通过添加数据过滤条件,建立起不同数据集之间的联系。

    这张报表的数据来源于两个不同的数据集ds1和ds2,商品种类、合同种类字段是这两个数据集共有的字段,使用这个字段建立起他们之间的联系。选中并双击D4单元格,弹出数据列对话框,选择过滤。给单元格添加一个普通条件,将ds2与ds1的商品种类、合同种类两个字段进行绑定,实现两个数据集之间的关联。

    20210408122021040813
  6. 图表设计:
    1. 合并A7~D15单元格,选择菜单栏插入 > 单元格元素 > 插入图表。选择柱形图 > 柱形图,单击确定2021040814
    2. 选中图表,在右边属性面板选择单元格元素 > 数据,设置柱形图的数据。数据来源:单元格数据;分类名:=B4;系列名:=C3;值:=C4。
      说明 分类名、系列名、值在设置的时候必须要有等号,否则单元格会被作为字符串处理
      2021040815
  7. 报表预览:报表必须先保存才能预览,单击保存保存报表,单击预览,选择分页预览,即可在浏览器中查看报表。

常见问题

FineReport和FineBI的区别:https://help.fanruan.com/finereport/doc-view-1750.html

FineReport和FineBI在操作中有一些相似性,FineBI常见问题参考:BI使用问题汇总

FineReport新手FAQ:https://help.fanruan.com/finereport/doc-view-3319.html

FineReport报表设计参考:https://help.fanruan.com/finereport/doc-view-1336.html