润乾集算报表如何实现报表分组内排序

报表开发中,经常会碰到一些需要进行非常规统计的报表,预置分组、可重复分组、组内排序,还包括跨行组计算的报表,甚至有些报表本身无数据来源、以及需要对数据源再计算。这些报表本身具备一定的特殊性,使用常规方法往往难于实现。

本文通过一个例子来了解集算报表在制作此类特殊统计报表的便捷过程。

报表说明

根据销售管理系统数据统计某年客户所在地区的订单总额,地区并按订单总额降序排列,要求每个地区中显示销售额在前五名的销售人员及其订单数量和订单金额,其他人员归入“其他”项中。报表样式如下:

应该注意的是地区分组中如果销售人数少于5个则不显示“其他”项(如上图中的华东地区)。这个报表的麻烦之处在于需要较复杂的数据计算工作,但一般报表工具的计算能力较弱,如果采用报表工具本身来完成这个计算工作则会相当复杂,比如采用用润乾报表来实现将会是这样的:

在润乾报表中,使用ds.group()的多个参数,结合条件判断隐藏行,多种使用方法结合完成了报表开发,可见润乾报表的强大之处。

但是由于要按照分组后汇总的订单金额排序,所以在B3的分组表达式中应用ds1.sum(订单金额)表达式作为ds.group()的参数,对于原始数据量较大的情况下,该表达式效率较低;而且,由于只显示前5名销售,在C3(排名)和D3(其他)中设置了隐藏行表达式,对于分组较多的情况仍然会存在性能问题;另外需要在E3和F3中使用格集过滤表达式计算其他销售人员合计,计算时要带着单元格属性计算,效率仍然不高。

润乾报表已经是计算能力很强的报表工具了,采用其它报表工具只会更麻烦甚至实现不了。

另一种办法是事先把数据计算准备好,报表工具只需要负责呈现和简单计算。但无论是使用复杂SQL、存储过程和自定义JAVA数据集编程,对于这样的复杂运算(实际情况往往比这个例子更麻烦得多)都是一件工作量很大的事情,而且难以维护。

集算报表本身内置了适合结构化计算的脚本,可以方便地写出数据准备的计算(相当于一种更使用更简单的自定义数据集)。上述报表需求使用集算报表可以这样完成:

编写集算脚本

首先使用集算脚本编辑器设置脚本参数。

编写脚本完成数据分组汇总以及排序等运算。

A1:建立数据库连接;

A2:执行sql根据年份参数查询订单信息,得到初步汇总订单数据;

A3:按照地区分组后组内成员按订单金额排序。

A4-C8:循环A3,取前五名记录,并将超过第五的记录都归入“其他”项,结果写回A3。

A9:结果按地区总额降序排列后返回给报表。

编辑报表模板

使用集算报表编辑器,设置数据源,用于报表预览。

新建报表参数,并设置默认值。

新建报表并设置集算器数据集,调用上述编辑好的脚本文件。

其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的;参数year为报表模板参数,d_year为脚本参数,可以设置二者重名。

编辑报表表达式,直接使用集算脚本返回的结果集,完成报表制作。

对于排名,需要设置B2格左主格为C2,并设置B2显示值表达式if(B2>5,"--")。

使用集算器脚本可以快速完成组内排序类报表,外置的集算脚本具有可视化的编辑调试环境,编辑好的脚本还可以复用(被其他报表或程序调用)。不过,如果脚本已经调试好,而且不需要复用的时候,要维护两个文件(集算脚本和报表模板)的一致性会比较麻烦,这时候直接使用集算报表的脚本数据集就比较简单了。

在脚本数据集中可以分步编写脚本完成计算任务,语法与集算器一致,还可以直接使用报表定义好的数据源和参数。本例使用脚本数据集可以这样完成:

1.  在数据集设置窗口中点击“增加”按钮,弹出数据集类型对话框,选择“脚本数据集”;

2.  在弹出的脚本数据集编辑窗口中编写脚本;

这里可以看到,在脚本数据集中直接使用了报表中定义好的数据源demo,比起单独的集算脚本更加简单、直接。

3.  报表模板和表达式与使用集算器数据集方式一致,不再赘述。

集算报表的下载地址:http://www.raqsoft.com.cn/?p=208 .

时间: 2024-10-07 19:18:26

润乾集算报表如何实现报表分组内排序的相关文章

润乾集算报表使用远程HTTP数据源的示例

报表的数据来源多种多样,有时会接收来自HTTP服务器的数据进行报表展现,一般报表工具只能通过报表自定义数据源使用高级语言(如JAVA)进行处理,实现较为复杂.集算报表简单地通用集算器接收HTTP数据源完成报表展现.这里通过一个实例说明. 学生成绩信息存储在远程的JSON格式文件中,其所在HTTP服务器对外提供统一HTTP访问接口,现需要读取学生成绩信息开发报表,汇总学生成绩并按总成绩排名.报表样式如下: JSON文件中包含班级.编号.姓名.学科.成绩等信息,格式如下: [ { "class&qu

润乾集算报表应用开发之参数输入

参数对于报表的重要性不言自明,润乾集算报表支持两种参数输入方案,可以使用集算报表设计参数模板联合报表一同发布,还可以自定义参数输入后与报表结合.二者并没有显著的差异,前者在开发使用上更加方便快捷,而后者则在灵活性上更胜一筹,用户在使用集算报表参数输入时可以根据实际需要进行选择. 下面就上述两种参数输入方式的使用分别来看一下. 使用参数输入模板 集算报表提供了"参数模板"的报表类型,使用参数模板可以制作参数输入表单,而且其内置了多种编辑风格,如下拉树.下拉日历.列表框.下拉数据集等.使用

用润乾集算报表实现实时报表(T+0)的方案

在报表项目中,客户越来越关注源数据的实时性,希望看到最新发生的数据在报表中体现出来.但是,传统的报表工具+数据仓库+ETL方式很难做到这一点,往往是只能看到昨天.上周甚至是上个月的情况,也就是T+1.T+7.T+30统称T+n报表.很难实现T+0报表,也就是能体现实时信息的报表. 分析其原因在于:1.如果报表的历史数据和最新数据都从客户的生产系统读取,虽然可以实现T+0报表,但是会对生产数据库造成压力,影响客户的业务.2.如果采用数据仓库的方式,那么ETL从生产库中取出数据,需要较长的"窗口时间

润乾集算报表优化应用结构之混合数据源

在报表项目中,报表源数据常常会来自于多种异构数据源.例如:关系型数据库(oracle.db2.mysql),nosql数据库(mongodb),http数据源,hadoop(hive.hdfs)甚至是excel或者文本文件.通常的做法是采用ETL工具,将这些数据源都同步到数据仓库中.但是这样做的问题在于:1.配置复杂,难度较大:2.成本较高:3.数据无法实时访问,需要有较长时间的延迟:4.数据仓库的建设和管理都比较复杂:5.如果数据量很大效率会很低,而且要不断的ETL去各个应用系统同步数据:6.

润乾集算报表交互分析之多层自动钻取

交互分析过程中报表多层钻取的情况很常见,如从一级汇总数据钻取到二级汇总数据,从二级汇总数据钻取到三级汇总数据-.,钻取时可以从表格到表格,也可以从统计图到统计图.开发这类报表时如果每个层级都需要制作不同的报表,在层数较多时,无论对于开发还是维护都是很麻烦的事,如果能制作一个通用的模板完成所有层级报表的展现则事半功倍. 润乾集算报表通过内置的集算引擎可以快速完成多层钻取通用报表模板的开发.下面通过一个示例说明使用过程. 多层钻取往往在一个维度上逐级细化,如这里我们以订单表中5个地区层级为例(可以扩

润乾集算报表优化应用结构之可挂接算法

在报表项目中,有些报表的数据计算方法会经常改变.例如:某企业员工的实际工资是通过绩效得分计算出的,算法经常变动,需要在不改动其他代码的情况下用新算法替换旧算法.如果用Java来实现计算的话,虽然可以实现动态可挂接计算模块,但是存在缺乏基础类库.占用多余内存等问题. 采用润乾集算报表可以很好的解决这些问题,实现低耦合.热部署的动态挂接算法.集算报表挂接算法系统结合和其他报表工具+java的系统结构对比图如下: 上图可以看出,java程序必须要编译.打包才能更新.集算脚本是解释执行的,脚本文件同时也

润乾集算报表提升性能之过程优化

报表出现性能问题需要对数据源计算进行优化时,执行路径难以确定从而被干预是阻碍报表优化的难题之一.由于数据库执行路径对开发人员不透明,报表优化需要指定执行路径时,程序员会很难甚至无法干预.而一般报表工具不具备强计算能力,大部分计算仍然要依靠数据库进行,这就导致很多报表优化效果不理想. 不同于一般报表工具,润乾集算报表内置了专门用于数据计算的集算引擎,开发人员可以通过编写集算脚本完成报表数据源准备.与数据库执行SQL路径不可控相比,集算脚本的执行过程是可控的,开发人员可根据实际情况编写或更改计算执行

润乾集算报表多样性数据源之动态SQL传递

大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板.这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表. 润乾集算报表提供了两种处理动态SQL的方法,使用宏和集算脚本,可以快速完成这类报表,下面举例说明. 使用宏 集算报表提供了宏机制,通过在动态宏中拼接SQL后交由数据集查询结果,最后在报表中使用动态表达式获得字段名和字段值完

润乾集算报表非常规统计之多重判断

报表在数据源准备阶段往往要根据实际业务进行各种判断计算以后才能得到最终的报表数据源,而使用SQL在这种情况下则难于编写,http://bbs.csdn.net/topics/390938280中提到的考勤问题就是其中之一,这个计算看起来是给财务或人力部门的考勤报表服务的.计算逻辑并不算复杂,但使用SQL却很难做,用存储过程(要取首尾记录)也很麻烦,而一般的报表工具由于不具备强计算能力,常常只能写用Java等写自定义数据源实现. 使用润乾集算报表来做则比较简单,这里以上述链接中的实际业务为例,给出

润乾集算报表呈现输出之分页控制

润乾集算报表提供了丰富的分页控制方式,以满足报表用户在不同情况下的需求,包括:按纸分页.按行分页.不分页.行后分页.列后分页等.下面就集算报表的分页控制详细加以介绍. 按纸分页 按纸分页主要用于打印,也是集算报表默认的分页方式,报表在打印时按照报表设定的纸张(默认是A4)大小进行自动分页,超出纸张的部分会在下一页打印,这种分页方式适用于用户对一页纸上打印几条记录没有要求,希望记录数充满纸张时设置. 在"报表属性-分页"选项下可以设置报表分页方式为:按纸分页. 由于集算报表提供了多种纸张