JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见。润乾集算报表可以很好支持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数据的读取和计算。以下为实现步骤:
编写集算器脚本
使用集算器编辑器编写脚本(fromJSON.dfx),读取json格式文件,解析内容并完成计算:
A1:使用read()以字符串格式读入json文件内容;A2:使用[email protected]()方法将json文件内容解析成序表;
A3:对学生ID分组,在A4中汇总总成绩;
A5:按照总成绩降序排列,并通过A7中result为报表返回结果集
新建报表
打开集算报表设计器,菜单栏选择文件-新建报表,点击“生成空白报表”,新建一个空白报表。
设置数据集
菜单栏选择报表-数据集,数据集类型选择“集算器”,在弹出的集算器数据集设置窗口中选择dfx文件,创建数据集ds1。
编辑报表模板及表达式
报表模板第一行为报表头,第二行为表达式。
通过B2取学生编号列表,C2、D2根据B2扩展取值姓名和总成绩,A2中排名使用&B2表达式并设置其左主格为B2可以实现排名。
展现报表
在报表设计器中,选择工具栏中的“预览报表”,即可在设计器中查看报表展现结果。
设计器预览效果
此外,集算报表设计器内置了Tomcat,允许用户将报表发布到web端查看页面效果,点击工具栏右上角的IE图标,设置报表主目录和DFX主目录(可采用默认),完成报表发布。
页面发布后预览效果
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": "6",
"单价": 20,
"折扣": 0,
"数量": 6
},
{
"订单ID": "10325",
"产品ID": "13",
"单价": 4.8,
"折扣": 0,
"数量": 12
},
{
"订单ID": "10325",
"产品ID": "14",
"单价": 18.6,
"折扣": 0,
"数量": 9
},
{
"订单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": "68",
"单价": 10,
"折扣": 0,
"数量": 60
},
{
"订单ID": "10399",
"产品ID": "71",
"单价": 17.2,
"折扣": 0,
"数量": 30
},
{
"订单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
},
{
"订单ID":"10400",
"客户ID": "EASTC",
"发货日期":"1997-01-16",
"到货日期":"1997-01-29",
"运货费": 83.93
}
]
编写集算器脚本
读入JSON格式文件,并将结果以序表形式为报表返回结果集。其中,A2为读入JSON数据后带有层次的结果集,该结果集可以直接供报表使用。
报表设计
上述带有层次的结果集在报表中以层次数据集的形式存在
报表模板及表达式如下:
B1中使用第一层数据集ds1取得订单ID,D1、F1、B2等跟随B1直接从ds1中取值,取得所有订单信息;B5则根据第二层数据集ds1.订单编号取订单明细中的产品ID,和C5、D5等获得所有该订单的明细数据。设置所有单元格的左主格均为B1。通过集算器读入带有层次的JSON文件,报表直接使用无需再进行关联。
展现效果
页面展现效果
润乾集算报表使用json数据源的示例