报表数据源之JSON

JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见,另外有些报表还会接收来自HTTP服务器的数据进行报表展现。这里通过例子分别来看一下集算报表使用json数据源和http数据源的过程。

一般JSON数据源

报表说明

学生成绩在应用中以json文件存在,现需要汇总学生成绩,并按总成绩排名,结果以报表展现。报表样式如下:

JSON文件中包含班级、编号、姓名、学科、成绩等信息,格式如下:

[

{

"class": "Class one",

"id": 1,

"name": "Emily",

"subject": "English",

"score": 84

},

{

"class": "Class one",

"id": 1,

"name": "Emily",

"subject": "Math",

"score": 77

},

......

{

"class": "Class one",

"id": 7,

"name": "Nicholas",

"subject": "PE",

"score": 60

}

]

一般报表工具由于无法直接读取json文件数据,往往需要依赖自定义数据集通过其他高级语言(如Java)解析后传给报表使用。集算报表则可以直接完成JSON数据的读取和计算。以下为实现步骤:

编写计算脚本

使用集算器编辑器编写脚本(p1.dfx),读取json格式文件,解析内容并完成计算:

A1:使用read()以字符串格式读入json文件内容后,使用[email protected]()方法将json文件内容解析成序表;

A2:对学生ID分组,在A3中汇总总成绩;

A4:按照总成绩降序排列,通过A5为报表返回结果集。

编辑报表模板

新建报表,设置数据集,使用“集算器”数据集类型,调用编辑好的脚本文件(p1.dfx)。

其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的。

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

通过上面的过程看到,使用集算器脚本可以很方便地完成JSON格式文件的读取计算,而且外置的集算脚本具有可视化的编辑调试环境,编辑好的脚本还可以复用(被其他报表或程序调用)。不过,如果脚本已经调试好,而且不需要复用的时候,要维护两个文件(集算脚本和报表模板)的一致性会比较麻烦,这时候直接使用集算报表的脚本数据集就比较简单了。

在脚本数据集中可以分步编写脚本完成计算任务,语法与集算器一致,还可以直接使用报表定义好的数据源和参数(本例并未涉及)。可以这样使用脚本数据集替代集算器数据集(集算脚本)部分(表达式等部分与使用集算器数据集时完全一致,不再赘述):

带有层次结构的JSON数据源

除了一般json格式文件,集算报表对带有层次结构的json文件也可以很好支持。现根据订单和订单明细表,列出订单信息以及每个订单下订单明细数据。报表样式如下:

JSON文件中包括订单、订单明细信息,格式如下:

[

{

"订单ID":"10248",

"订单编号": [

{

"订单ID": "10248",

"产品ID": "5",

"单价": 12,

"折扣": 0,

"数量": 1

}

],

"客户ID":"VINET",

"发货日期":"2000-07-16",

"到货日期":"1996-08-01",

"运货费": 32.38

},

{

"订单ID":"10324",

"订单编号": [

{

"订单ID": "10324",

"产品ID": "63",

"单价": 35.1,

"折扣": 0.150000005960464,

"数量": 80

}

],

"客户ID":"SAVEA",

"发货日期":"1996-10-10",

"到货日期":"1996-11-05",

"运货费": 214.27

},

{

"订单ID": "10325",

"订单编号": [

{

"订单ID": "10325",

"产品ID": "31",

"单价": 10,

"折扣": 0,

"数量": 4

},

{

"订单ID": "10325",

"产品ID": "72",

"单价": 27.8,

"折扣": 0,

"数量": 40

}

],

"客户ID":"KOENE",

"发货日期":"1996-10-14",

"到货日期":"1996-10-23",

"运货费": 64.86

},

......

{

"订单ID":"10399",

{

"订单ID": "10399",

"产品ID": "76",

"单价": 14.4,

"折扣": 0,

"数量": 35

},

{

"订单ID": "10399",

"产品ID": "77",

"单价": 10.4,

"折扣": 0,

"数量": 14

}

],

"客户ID":"VAFFE",

"发货日期":"1997-01-08",

"到货日期":"1997-01-14",

"运货费": 27.36

}]

使用集算器编辑器编写脚本(p2.dfx),读取json格式文件,解析内容并完成计算:

这里可以看到脚本读入带有层次结构的json格式文件后,直接将其解析成带有层次的结果集,而集算报表也可以支持这种带有层次的数据集。

报表数据集中调用编辑好的脚本文件(p2.dfx),上述带有层次的结果集在报表中以层次数据集的形式存在。

编辑报表表达式,直接使用集算脚本返回的层次数据集,完成报表制作。

这里值得注意的是层次数据集的使用方式,更多了解可以参考润乾集算报表的层次数据集理解

此外,如果我们读取的是远程HTTP服务器上的json文件(例一种),其对外提供统一HTTP访问接口。那么脚本只需做如下更改:

在A1中使用httpfile()函数即可直接读取远程http文件,后续处理方式与例一完全一致,不再赘述。

需要指出的是,httpfile参数中的URL串指向任何HTTP服务器,如某个servlet,这样可以访问带有参数的WEB服务返回的数据,比如:httpfile(“http://192.168.1.101:6001/demo/Servlet?action=4&name=report1&excelFormat=2003”,GBK)返回的结果是Excel。当然,返回的结果可以是普通格式的文本(如csv),也可以是json串或xml串,集算报表都可以处理。

通过这几个例子可以看到,集算报表直接支持json格式文件或远程http文件的读取计算(无论是编辑独立的集算脚本,还是直接使用脚本数据集),为这类报表的开发提供了便利,也从另一方面说明报表工具支持多样性数据源的重要性。

时间: 2024-10-10 01:32:33

报表数据源之JSON的相关文章

润乾集算报表多样性数据源之json

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表支持的数据源类型除传统的关系型数据库外,还支持:JSON.HTTP.TXT文本.Excel.Hadoop.mongodb等. JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见,另外有些报表还会接收来自HTTP服务器的数据进行报表展现.这里通过例子分别来看一下集算报表使用json数据源和http数据源的过程. 一般JSON数据源 报表说明 学

报表数据源之多结果集

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表除了支持不同类型的数据源(RDB.TXT文本.Excel.JSON.HTTP.Hadoop.mongodb)外,还支持在一个数据集中为报表返回多个结果集使用,这样可以有效避免重复运算,提升报表开发效率和运算性能.下面通过一个实例说明多结果集的使用过程. 报表说明 根据学生成绩表查询总成绩前三名和后三名的学生姓名以及总成绩.报表样式如下: 由于要分别显示前三名和后三名学生姓名和成绩,报

集算器替代存储过程实现报表数据源

存储过程是SQL语句和流程控制语句的集合,常用来把一个复杂的计算目标分解为多个简单的计算步骤.虽然以复杂性换来了灵活性,但SQL语句固有的缺点仍然体现在存储过程中,比如:分步不彻底.数据无序.缺乏集合.缺乏引用,之前我们也分析过存储过程作为报表数据源的利弊,可点击这里查看. 集算器解决了存储过程的上述缺陷,降低了对开发人员的技术要求,是存储过程理想的替代工具. 报表例子说明 某电信产品厂商有一张报表,主要目的是分析优势产品的销售额.销量.环比等指标,其中优势产品的定义是"在每个州的销量均在前10

存储过程实现报表数据源的利弊分析

在报表项目中,当数据计算较为复杂的时候,报表开发者可能会考虑是否用存储过程来实现报表数据源准备. 这里,我们从几个不同的方面来看一下.用存储过程来实现报表数据源计算的利和弊. 一. 性能 说到存储过程的长处,性能是最常被提及的.存储过程进行报表数据计算的时候.不须要将数据取出数据库,会获得较高的性能.其主要原因是数据库IO通道(比如:JDBC)效率一向非常差,大量数据取出来非常费时间. 即便如此.这个问题还是要深入分析的: 1.写在存储过程中的SQL语句是预先编译的.因此比外部程序提交的SQL要

报表数据源的多重判断

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

集算报表用Java动态修改报表数据源

实际应用中通过程序动态修改报表模板的情况很常见,其中动态修改数据源SQL就是一种典型场景.常见于系统中有一些结构相同而数据源不同的报表,为减少报表开发工作量,只开发一套报表模板,使用时通过程序动态修改数据源来满足实际需要. 下面通过一个使用JAVA程序修改集算报表数据源SQL的例子说明使用过程. 编辑报表模板: 由于不同数据源的字段不同,因此这里使用动态表达式ds1.fname()获取字段名,ds1.field()获取字段值.此外,第一行和第一列为辅助行列,设置其隐藏. 编写代码: 1.读入报表

报表数据源之Hadoop

集算报表支持的数据源类型除传统的关系型数据库外,还支持:TXT文本.Excel.JSON.HTTP.Hadoop.mongodb等. 对于Hadoop,集算报表既可以直接访问Hive,也可以读取HDFS中的数据,完成数据计算和报表开发.Hive的访问和普通数据库一样使用JDBC就可以,这里不再赘述了.下面通过一个例子来看直接访问HDFS的过程. 报表说明 股票交易记录按月以文本形式存储在HDFS中,文件名为stock_record_yyyyMM.txt(如stock_record_200901.

基于Reflect将List泛型数据源转换为Json字符串

在Web开发中,较为常用的数据传递格式为json键值对字符串格式,而在普遍的ORM全映射或半映射技术中,从后端所获得的数据往往是Enumerable或是List<T>类型的数据,因此做了一个通用类,实现将List<T>类型的数据向json格式数据的转换.代码如下: 首先建立一个基于Reflect的基础类Reflect,实现对名称为给定字符串的属性的赋值或取值操作: 1 using System; 2 using System.Collections.Generic; 3 using

java pojo实体类做birt报表数据源

环境要求:到http://www.eclipse.org/downloads/下载 Eclipse IDE for Java and Report Developers 工具 第一步:创建一java项目ReportJava:第二步:创建包yss.com并编写一实体类User 作为报表中的数据对象 package com.yss; public class User {     private String name;     private String phone;     private S