润乾报表使用json数据源的方法改进

JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见。润乾报表使用json数据源需要在自定义数据集中通过Java程序解析json文件后将结果集返回给报表,这里介绍润乾报表的实现方式以及改进方法。

报表需求

学生成绩在应用中以json文件存在,现需要根据学科参数查询指定科目学生成绩,并按学生成绩降序排列。报表样式如下:

润乾报表实现

自定义数据集

润乾报表中需要通过自定义数据集完成json文件的读取,实现过程如下:

1、  准备json解析依赖包

Java程序中解析json文件需要用到6个jar包,其名称和下载地址为:

        1)        json-lib-2.4-jdk15.jar

http://sourceforge.net/projects/json-lib/?source=typ_redirect

        2)        ezmorph-1.0.6.jar

http://sourceforge.net/projects/ezmorph/files/latest/download?source=files

        3)        commons-lang-2.6.jar

http://commons.apache.org/proper/commons-lang/download_lang.cgi

        4)        commons-beanutils-1.9.2.jar

http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi

        5)        commons-logging-1.2.jar

http://commons.apache.org/proper/commons-logging/download_logging.cgi

        6)        commons-collections-3.2.1.jar

http://commons.apache.org/proper/commons-collections/download_collections.cgi

2、  定义学生成绩类,用于存储学生信息

        publicclass Score {

//省略构造函数和get set方法

StringclassName;

Stringid;

StringstudentName;

Stringsubject;

Stringscore;

}

3、  在自定义数据集中接收并解析报表参数

Map map = ctx.getParamMap(false);

Stringsubject = map.get("subject").toString();//统计科目

4、  读入json文件,并将其内容存入list

List<Score>list = newArrayList<Score>();

StringJsonContext = readFile("E:\\score.json");

JSONArrayjsonArray = JSONArray.fromObject(JsonContext);

int size =jsonArray.size();

//json內容以Score格式存入list

for (int i = 0; i < size;i++) {

JSONObjectjo = jsonArray.getJSONObject(i);

if (jo.getString("subject").equals(subject)|| jo.getString("subject")==subject)

list.add(new Score(jo.getString("className"),jo.getString("id"),jo.getString("name"),jo.getString("subject"),jo.getString("score")));

}

5、  定义排序类,实现compare方法比较学生成绩

        publicclass ComparatorScore
implementsComparator {

publicint compare(Objecto1,Object o2){

Scorescore1 = (Score)o1;

Scorescore2 = (Score)o2;

returnscore2.getScore().compareTo(score1.getScore());

}

}

6、  使用Collections.sort完成List排序

ComparatorScorecs = newComparatorScore();

Collections.sort(list,cs);

7、  构造数据集,并设置数据集数据

// 构造一个数据集ds1,设置列名

DataSetds1 =
new DataSet("ds1");

ds1.addCol("className");

ds1.addCol("id");

ds1.addCol("name");

ds1.addCol("subject");

ds1.addCol("score");

// 设置数据集中的数据

for (int i = 0; i <list.size(); i++) {

Scorescore = list.get(i);

com.runqian.report4.dataset.Rowrr =
ds1.addRow();

rr.setData(1,score.getClassName());

rr.setData(2,score.getId());

rr.setData(3,score.getStudentName());

rr.setData(4,score.getSubject());

rr.setData(5,score.getScore());

}

returnds1;

报表调用

报表使用自定义数据集类型:

设置报表模板及表达式:

润乾报表支持自定义数据集,为报表开发人员提供了更多的选择,体现了润乾报表的灵活性。但过于依赖Java编程无疑增加了报表开发的难度,本例中除了要准备解析json文件的jar包,还要在Java程序中完成数据排序等计算目标,而当包含分组、连接等计算时程序的复杂度会陡然上升,对报表开发人员来说都是不小的挑战。当然也可以用报表工具来完成排序等运算,但这样会导致占用较大的内存(特别是有过滤动作时,需要把数据都取到报表端再执行过滤),性能也会受到较大影响,有许多复杂的文件操作也会超出报表计算能力范围。

这种情况下,采用润乾报表基础上的计算强化版集算报表将是个不错的选择。集算报表支持json数据源,可以快速完成此类报表的开发。本例在集算报表中可以这样完成。

集算报表实现

编写集算脚本

首先使用集算完成文件读入和排序,集算脚本如下:

A1:以字符串形式读入json格式文件;

A2:从json格式串中导入并解析出序表;

A3:根据学科参数subject拼出数据过滤表达式串;

A4:解析表达式并完成数据过滤;

A5:按成绩降序排列,结果通过A6返回。

报表调用

数据集设置

集算报表中使用集算器数据集类型,选择上面编辑好的集算器脚本文件(fromJSON.dfx):

其中参数名subject为集算脚本参数,参数值subject为报表参数。

报表模板及表达式

通过上述实现过程可以看到,与润乾报表需要自定义数据集通过Java程序实现不同,集算器通过几行代码即可完成对json格式文件的读取和展现,比起几百行的Java程序要简单很多。集算报表可以直接使用json格式文件使得文件具备了再计算(过滤、分组、排序等)的能力,在集算报表中开发此类报表将非常简单。

此外,当集算脚本比较简单的时候,可以直接使用集算报表内置的脚本数据集,将脚本直接嵌入到报表模板中,而不必在单独在集算器中完成。实现方式如下:

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

2、在弹出的脚本数据集编辑窗口中编写集算脚本:

3、报表调用,与其他数据集使用方式一致,不再赘述。

时间: 2024-08-25 20:24:44

润乾报表使用json数据源的方法改进的相关文章

润乾报表使用EXCEL数据源的方法及改进

Excel作为一种常见的文件格式广泛存在,很多报表的数据来源于Excel.由于报表一般都带有参数,经常需要对原始数据进行分组.过滤等,都需要再编写程序代码才能满足有参数报表的查询需求. 润乾报表使用Excel数据源,需要用Java程序处理文件,通过自定义数据集为报表提供数据源支持.这里通过一个实例说明润乾报表实现过程,以及改进方式. 报表描述 基金公司将股票信息以每月一个Excel存储,命名方式为:stock_yyyyMM.xls.包括每只股票的股票编码.交易日期和收盘价,现报表参数为起始年月和

润乾报表 动态改变数据源

经常会遇到一些报表需要根据不同的情况(参数)连接不同的数据源从而完成相应的数据的展现,也就是经常说的动态数据源报表. 实现动态数据源有多种方法:具体说两种使用过的方法:第一种:使用脚本集算器法 使用集算脚本编辑工具完成计算脚本,并为报表输出计算后结果集: A1:根据参数dbname参数值决定数据源 A2:编写查询SQL A3:执行sql取数 A4:关闭连接 A5:将结果集返回报表 优点:开发简单,理解方便.缺点:必须 集算器授权 第二种:TAG标签1.导包 1 <%@ page import=&qu

润乾报表实现无数据源的规则报表及改进

某报表系统中有部分报表需要按照一定规则显示数据,如:显示查询日期范围内的奇数日数据,要求数据库中即使无记录该日期也显示(内容为空). 本文重点来实现奇数日期序列,数据区不是重点,故置空. 以上述报表需求为例,这里来看一下润乾报表的实现过程,以及改进方法. 润乾报表实现 以下为润乾报表的实现方式,考虑跨年和跨月份的情况: 使用时要对辅助列A列进行隐藏,以及对第2行进行条件隐藏,偶数的日期不显示.所以报表工具实现要依靠大量隐藏行列. 报表工具实现需要借助隐藏行格完成,主要原因是数据计算和报表呈现混在

润乾报表实现动态数据源报表及改进

经常会遇到一些报表需要根据不同的情况(参数)连接不同的数据源从而完成相应的数据的展现,也就是经常说的动态数据源报表.报表工具通常的做法有两种,一是不同的情况加载不同的数据源连接参数,如:url.driver.username.password等:二是利用已配置的多个连接池,根据不同情况选择.这里通过一个实例,说明润乾报表的实现过程及改进方案. 报表说明 应用中需要通过参数控制报表连接的数据源,当参数flag为1时连接数据源一(db1),否则连接数据源二(db2). 润乾报表实现 首先根据flag

润乾集算报表使用json数据源的示例

JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见.润乾集算报表可以很好支持json数据源,这里通过实例说明. 示例一 报表说明 学生成绩在应用中以json文件存在,现需要汇总学生成绩,并按总成绩排名,结果以报表展现.报表样式如下: JSON文件中包含班级.编号.姓名.学科.成绩等信息,格式如下: [ { "class": "Class one", "id": 1, "name": &

润乾报表 数据集ds1中,数据源xmglxt_x3无数据库连接,且未设定数据连接工厂,请检查数据源设定:

一.润乾报表错误内容 产生数据工厂: com.runqian.report4.dataset.SQLDataSetFactory 失败 错误来源:: 数据集ds1中,数据源xmglxt_x3无数据库连接,且未设定数据连接工厂,请检查数据源设定: 二.解决方法 同事做的润乾报表.我来整合到系统中,在调试运行的时候都是用的同一个数据库,数据库链接也是开启的,但是就是连不上. 这个时候需要在配置菜单->数据集,如下图 重新选择一下数据源,然后保存,问题得到解决. 估计是因为用的不同的环境的,所以js中

润乾报表的组成和变迁

产品发展 润乾公司在润乾报表3.x中首次应用了非线性报表模型,并在该版本的实践过程中积累了丰富的工程化经验.在这些基础上开发出的润乾报表5.x,实现了理论模型和工程实践的完美结合,不仅保持原有的开发高效性,运算性能指标也有了大幅度提高,成为一款经典的报表工具软件. 产品在应用过程中不断有新的需求加入,而且在完善过程中也难以对仍在快速积累中的需求进行深入梳理,润乾报表5.x逐步发展成融合了固定报表.自助报表和填写表单这三项主要功能的庞大体系. 随着应用经验的进一步丰富,我们逐渐意识到,报表工具的这

集算报表与润乾报表的函数语法对照

集算报表5.0在保留润乾报表V4.x的核心功能外,进行了优化和精简.当中报表函数也做了适当优化,这里就常见计算来比較一下二者函数语法之间的差异.         对照函数一览表 1.数据集函数 1.1.ds.group()         润乾报表: datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp{,rootGroupExp}}}}}})         集算报表: data

润乾报表实现跨行组运算报表及改进

跨行组计算类报表在报表开发中非常常见,如常见的同期比.环比计算.移动平均值计算等.这类报表由于经常要引用其他行列的数据进行相对/绝对位置运算,使得报表实现并不轻松.润乾报表在实现时需要借助层次坐标和位移坐标,辅以条件表达式和"$"运算符完成.下面通过一个实例说明润乾报表的实现方式. 报表需求 根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比.报表样式如下: 这里应该注意的是比去年同期是指与去年同月份的比值,无对应月份则为空:要求只显示本年数据. 润