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

前提条件

  • 了解FineReport与AnalyticDB for MySQL之间的兼容性,请参见兼容性概览

  • 安装MySQL JDBC驱动。

  • 安装FineReport。如果您是第一次安装FineReport,需要安装MySQL服务器(例如阿里云RDS MySQL),用于导入FineReport的元数据,FineReport提供了两种数据链接方式:

  • 如果您需要通过外网连接AnalyticDB for MySQL集群,请参见申请和释放公网地址

连接AnalyticDB

  1. 打开FineReport,在菜单栏中单击服务器 > 定义数据连接

  2. 定义数据连接页面进行参数配置。

    配置连接参数

    参数

    说明

    数据库

    选择MySQL

    驱动器

    选择MySQL jdbc驱动

    URL

    AnalyticDB for MySQL集群的连接地址,格式为:jdbc:mysql://hostname:port

    • hostname:集群的外网地址或者VPC地址。

    • port:3306。

    用户名

    AnalyticDB for MySQL集群中创建的账号:

    • 高权限账号。

    • 普通账号。

    密码

    账号对应的密码。

  3. 完成上述参数配置后,单击测试连接测试连通性,测试通过后单击确定,连接至AnalyticDB for 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 for 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`)
      ) DISTRIBUTED BY HASH(`contract_id`) INDEX_ALL='Y' STORAGE_POLICY='COLD'
  3. 建好表后,通过kettle把下载到本地的Excel导入AnalyticDB for MySQL

    1. kettle使用文档请参见通过Kettle导入至数仓版

    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的区别:FineReport和FineBI的区别

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

FineReport新手FAQ:设计器问题汇总

FineReport报表设计参考:报表应用学习路径