zoukankan      html  css  js  c++  java
  • 润乾报表实现可反复分组报表及改进

             可反复分组报表是报表开发中比較常见和麻烦的任务。可反复分组报表是指同一记录出如今不同的分组中被反复统计,常见的可反复分组报表有两类:一类是分组区间有交集。如:统计年龄段在20-30岁、25-35岁、30-40岁之间的用户数量;另外一类是分组区间有包括关系,如:统计各地区以及该地区主要城市的汇总数据,“华北,当中北京;华东。当中上海……”。

             以下通过两个实例来看一下润乾报表的实现过程。

    实例一

             依据员工基本信息表按年龄统计各年龄段区间的人数、奖金等汇总情况。

    报表样式例如以下:


    这里“30-40岁”和“35-45”岁两个区间是有反复的。 

    实现

    在润乾报表中,该类报表主要通过ds.enumGroup()函数完毕,报表模板及表达式例如以下:

    当中A2单元格表达式为:

    =ds1.enumGroup(true,age(BIRTHDAY)>20&&age(BIRTHDAY)<=30,"20岁到30",age(BIRTHDAY)>30&&age(BIRTHDAY)<=40,"30岁到40",age(BIRTHDAY)>=35&&age(BIRTHDAY)<45,"35岁到45",age(BIRTHDAY)>=45,"45岁以上") 

             通过ds.enumGroup()能够比較easy完毕上述报表,分组较少的情况尤其适用。当分组较多的时候,该表达式会由于过于复杂导致报表难于维护。

    实例二

             依据订单表统计各省份订单情况,要求列出某些主要城市(如青岛、深圳、石家庄)的订单情况。报表样式例如以下:

    实现

    润乾报表实现该类报表主要使用ds.overlap()函数,报表模板及表达式例如以下:

    当中。A2单元格表达式为:

    =ds1.overlap(true,省份=="上海","上海",省份=="北京","北京",省份=="四川","四川",省份=="天津","天津",省份=="山东","山东",城市=="青岛","    当中:青岛",省份=="广东","广东",城市=="深圳","    当中:深圳",省份=="江苏","江苏",省份=="江西","江西",省份=="河北","河北",城市=="石家庄","    当中:石家庄",省份=="海南","海南",省份=="福建","福建",省份=="辽宁","辽宁",省份=="重庆","重庆",省份=="陕西","陕西") 

             与实例一中一样,ds.overlap()对分组较少的情况尤其适用。当分组较多的时候,表达式过于复杂将导致报表难于维护。

           

             润乾报表能够实现上述两类可反复分组报表,在分组较少的时候做起来尤其简单。这也是其它报表工具无法比拟润乾报表的方面。但当分组较多,计算比較复杂的情况下。润乾报表实现起来就比較困难了。原因在于报表的数据源准备和呈现混在一起导致的。往往须要在报表模板中实现大量的计算任务,假设将这两部分分开,即:独立的计算层负责数据源准备(完毕复杂计算)和独立的展现层负责报表呈现,则会使报表开发变得更加清晰。

             润乾公司基于润乾报表内核推出的改进产品集算报表5.0版,当中内置了独立的计算引擎:集算器,用于解决数据源准备问题。

    在集算报表中能够将复杂的数据计算(数据源准备)工作交由集算器完毕。可将其视为报表的计算层;而报表本身仅仅负责接收计算后结果进行报表展现(有时包含一些简单计算)。从而将数据源准备和报表呈现分开。使得报表制作更为清晰。        

             对于上述报表,通过集算报表能够这样实现并解决当中的难点:

    实例一

    编写集算脚本

             首先使用集算器编写集算器脚本,完毕分组汇总,为报表准备数据源:

    A1查询员工表数据,因为该表仅仅有出生日期,故在A2中添加并计算年龄字段;A3、A4指定年龄段区间及其区间名称,在A5中进行可反复枚举分组。并在A6中计算分组汇总值,最后A7将结果集返回给报表。

    报表调用

             使用集算报表设计器,新建报表。使用“集算器”数据集类型,选择上面编辑好的集算脚本(age.dfx):

    设置报表模板及表达式

    报表中仅仅简单的列表取值就可以,无需再完毕复杂计算。

    这里能够看到,在集算报表中将数据准备(集算脚本)和报表呈现(报表模板)分开带来的优点。在计算层通过集算器完备的计算体系完毕数据源准备的工作。

    实例二

    A1从订单表读取数据;

    A2-B4列出主要城市与省份的相应列表。

    A6依照省份分组汇总;

    A7、A8按指定城市对位分组后汇总。

    最后通过A9将城市数据插入A6按省汇总的结果中。

    报表调用

             使用集算报表设计器,新建报表,使用“集算器”数据集类型,选择上面编辑好的集算脚本(age.dfx)

    设置报表模板及表达式


    通过上述两个实例。就润乾报表和集算报表实现方式的差别。能够看到:

    1、集算报表因为将计算层和展现层分离,报表开发更为清晰,复杂计算任务均在集算器中完毕。报表本身仅仅负责数据展现(报表模板中仅仅编写简单的表达式就可以);

    2、集算器具备完备的计算体系,拥有丰富的函数库,如实例中用到的P.enum()进行枚举分组和P.align()完毕对齐分组。而前者又有3种函数选项,后者则有6种函数选项。如此丰富的函数库,使得差点儿全部的复杂运算(数据源准备工作)都能够在集算器中完毕;

    3、除了丰富的函数,集算器採用分步的编码方式。不管多么复杂的计算逻辑都能够在集算器中逐步实现,从而攻克了在润乾报表中仅仅能写在一个表达式中带来的编写和维护难题。

  • 相关阅读:
    word2vec原理推导与代码分析
    vim 删除
    HanLP 配置与使用
    python import 其他 package的模块
    mysql 修改root密码
    Spring Boot 整合 PageHelper
    MyBatis SQL语句构建器
    webpack4
    MySql DCL数据控制语言(对用户权限的设置)
    MySql DQL数据查询语言
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5250011.html
Copyright © 2011-2022 走看看