一. 项目背景——XX商城订单数据

数据字典如下:
在这里插入图片描述
这里我们用到了三个表,一个是订单数据表,一个是退回货品表,最后一个需要我们手动新建一个剔除退货数据的fr订单表(当然这个表对于源数据也做了部分处理)。

create table dw_order_list_fr as
select t1.id,t1.order_id,
                 t1.order_date,
                 to_char(t1.order_date,'yyyy') order_year,
                 to_char(t1.order_date,'mm') order_month,
                 to_char(t1.order_date,'dd') order_day,
                 t1.order_delivery_date,
                 t1.customer_name,
                 t1.customer_type,
                 substr(t1.order_arears,1,instr(t1.order_arears,'-',1,1)-1) order_arear,
                 substr(t1.order_arears,instr(t1.order_arears,'-',1,1)+1,instr(t1.order_arears,'-',1,2)-instr(t1.order_arears,'-',1,1)-1) order_prov, 
                 substr(t1.order_arears,instr(t1.order_arears,'-',1,2)+1) order_city,
                 t1.product_type_lv1,
                 t1.product_type_lv2,
                 t1.product_name,
                 t1.product_saleprice,
                 t1.product_num 
from dw_order_list_arears_new t1 
where not exists(
select * from dw_order_list_arears_cancel t2 where t1.id=t2.id);

二. 报表需求分析

需求1:时间筛选和下钻和上卷

功能一:时间筛选

1、 查询区域数据,展示维度(区域),指标(客户数、订单数、货品数、商品金额)
2、 通过先择指定的区域下钻跳转到下级省份数据,再于省份数据跳转到下级城市数据,并且可以返回上以及数据或者第一级数据展示,查询的数据可以通过时间筛选,
3、 需要显示客户维度和货品维度的柱状图,数据分别是不同区域的客户类别的商品数量数据和货品类别的商品数量数据,以堆积柱状图展示;
在这里插入图片描述

  1. 先创建模板数据集:bdate,edate为查询的开始结束日期的请求参数
select order_arear,count(distinct customer_name),count(distinct order_id),sum(product_num),sum(product_saleprice) 
from dw_order_list_fr
where order_date 
between to_date('${bdate}','yyyy/mm/dd') and to_date('${edate}','yyyy/mm/dd') 
group by order_arear
  1. 把模板数据集的数据在单元格展示,可以逐个拖拽,也可以区域填充(填充方式可以选择从左往右,从右往左等)。
  2. 控件设置,这里我们用到了标签控件,日期控件和按钮。
    ------标签控件,我们设置控件值就好。
    ------日期控件,需要对日期范围进行筛选,选择日期控件,控件值与起始日期选择公式,使用下面方法进行选择,而结束日期也选择公式使用TODAY()函数。开始与结束控件值分别取名bdate,edate用来充当当前报表的全局变量。
sql("scott","select min(order_date) from dw_order_list_fr",1,1)
  1. 报表表单的提交方式默认是post,这里我们通过浏览器抓包查看请求参数,这里可以看到我们的请求参数定义是没问题的。(请求参数不知为何要带Label标签,个人觉得没有意义,在多数据并发下会增加网络负担)
    在这里插入图片描述
  2. 表格样式——隔行换色,我们选择数据填充的第一个单元格,进行条件属性配置,其他样式按要求修改即可。
    配置数据行显示灰色
    在这里插入图片描述
    配置数据列显示
    在这里插入图片描述
  3. 点击预览即可保存并显示,报表。

功能二. 数据钻取和上卷

1.下钻:通过出现的区域字段创建超链接,连接到省级数据表,再在省级数据表的省份字段创建超链接把指定字段的数据作为参数传递,同时因为有时间筛选,所以开始时间和结束时间的参数也需要一并传递,并且把传递参数勾选上;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.上卷:通过创建返回按钮,返回上一级数据展示页面,由于城市需要返回的时候是存在两种情况,所以需要再添加一个返回第首页;

功能三:添加图表

1.选择多个单元格合并单元格,合并后的大小展位里添加图表先择相应的图表,比如堆积柱状图,然后再把对应的数据设置好,用的数据库查询跟制表数据库查询为同一个,这样的话做筛选图表的数据会跟着变动,稍作修饰调整即可;
在这里插入图片描述

在这里插入图片描述

功能四:隔行换色

某些单元格进行条件设置;

在这里插入图片描述

需求2:多条件即席查询

需求功能:
1、查询区域所在的所有省级数据,展示维度(区域、省份),指标(客户数、订单数、货品总数、货品金额、技术类商品数量、家具类商品数量、办公类商品数量);
2、实现区域下拉单选,以及根据选择的区域下拉复选省份进行数据过滤;
3、实现用户所在的部门能看到的数据过滤(比如,张三是测试部门,只能看到某个区域的数据);
在这里插入图片描述
实现功能:
功能一:单选下拉框选择数据和复选下拉框联动多选数据;
1、给报表添加单选下拉框,选择区域数据,再通过获取区域数据下拉框的参数进行筛选,省份份数据筛选出来,并作为省份下拉复选框的数据,并且考虑到当没有参数数据传递过来的时候语句缺失的问题,用where 1=1 加上if语句判断的参数是否为空,进而添不添加过滤条件(详情查看数据库查询),另外需要注意的是当区域没有选择数据的时候,省份是不能有筛选数据,在筛选条件下添加判断区域没有选择数据的时候,添加查询省份数据查询为and 1=0,当有数据的时候查询条件为根据指定区域筛选数据;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、通过fine_username(系统参数,返回的是登录用户名)判断其登录的账号是不是某个用户,在添加筛选条件判断可以查询到某个区域的数据;
在这里插入图片描述

需求3:交叉表

需求功能:
1、查询每个区域的不同客户类型的技术类商品数量、家具类商品数量、和办公类商品数量的数据,以维度交叉的形式展现;
2、根据不同用户只能看到自己的区域,按照用户指定;
3、隔行换色
在这里插入图片描述
实现功能:
功能一:交叉维度;
在这里插入图片描述
功能二:权限筛选;
通过fine_username获取登录用户进行判断该用户的身份,判断是否添加数据筛选;
在这里插入图片描述
功能三:隔行换色
在这里插入图片描述

需求4:平台发布:

用户添加即权限管理:
登录后台管理系统的用户管理里,选择所有用户的添加用户,把用户信息填写后确定
在这里插入图片描述
添加部门:
登录后台管理系统的用户管理里,选择部门机构的添加部门,填入部门信息
在这里插入图片描述
在部门中添加用户:
登录后台管理系统的用户管理里,选择部门机构的选择部门,添加职务,再编辑用户添加相应的用户信息
在这里插入图片描述
权限管理:
在这里插入图片描述
测试权限:
使用新建账号测试权限
在这里插入图片描述

对报表进行发布:
登录后台,在管理系统的目录管理中添加相应的目录,并且在目录下添加制作好的模板
在这里插入图片描述

———————————————————————————————————————
Finereporter工具与本次项目使用到一些技术点的总结:

下钻为数据明细,粗粒度到细粒度的过程,会细化某些维度。 如:我们在配置下拉框控件,需要配置数据字典,我们通过sql从全部提取区域字段。

上卷数据的汇总聚合,细粒度到粗粒度的过程,会无视某些维度需求大部分都是上卷表,及我们对于数据进行分组聚合。

即席查询是由用户自定义查询条件的,灵活选择查询条件。 如:在区域与省份订单客户状况表中(这里没写操作),我们区域与省份的筛选是动态的,我们选择区域,这时省份就会动态获取,我们就可以主观选择查询条件。

技术或细节难点:

  1. 在时间维度筛选查询,对时间控件进行有效范围控制,我们使用了finereporter的内置函数sql(),四个参数分别为:连接名称,sql,行位置,列位置;使用Today()函数获取当前日期。
  2. 隔行换色的时候,使用row()%2=1进行判断。
  3. 对于有些按钮进行JavaScript的基本操作。
  4. 在即席查询的过程中。通过通过传递的值进行数据过滤,同时考虑到传递过来的参数为空的时候语句缺失的问题加了where 1=1后面加if语句判断需要拼接的sql语句如: ${if(len(deptno)=0,“”,"and deptno = "+deptno)。
  5. 我们在使用超级链接的时候,要勾选"继承报表的参数"。
  6. 对于复选框的条件判断用in。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐