欢迎投稿

今日深度:

报表数据源之JSON

报表数据源之JSON


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

一般JSON数据源

报表说明

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

\

<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICBKU09OzsS8/tbQsPy6rLDgvLahorHgusWhotDVw/uhotGnv8ahorPJvKi1yNDFz6KjrCYjMjY2ODQ7yr3I58/Co7o8L3A+CjxwPls8L3A+CjxwPiAgICB7PC9wPgo8cD4gICAgICAgJnF1b3Q7Y2xhc3MmcXVvdDs6ICZxdW90O0NsYXNzIG9uZSZxdW90Oyw8L3A+CjxwPiAgICAgICAmcXVvdDtpZCZxdW90OzogMSw8L3A+CjxwPiAgICAgICAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtFbWlseSZxdW90Oyw8L3A+CjxwPiAgICAgICAmcXVvdDtzdWJqZWN0JnF1b3Q7OiAmcXVvdDtFbmdsaXNoJnF1b3Q7LDwvcD4KPHA+ICAgICAgICZxdW90O3Njb3JlJnF1b3Q7OiA4NDwvcD4KPHA+ICAgfSw8L3A+CjxwPiAgICB7PC9wPgo8cD4gICAgICAgJnF1b3Q7Y2xhc3MmcXVvdDs6ICZxdW90O0NsYXNzIG9uZSZxdW90Oyw8L3A+CjxwPiAgICAgICAmcXVvdDtpZCZxdW90OzogMSw8L3A+CjxwPiAgICAgICAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtFbWlseSZxdW90Oyw8L3A+CjxwPiAgICAgICAmcXVvdDtzdWJqZWN0JnF1b3Q7OiAmcXVvdDtNYXRoJnF1b3Q7LDwvcD4KPHA+ICAgICAgICZxdW90O3Njb3JlJnF1b3Q7OiA3NzwvcD4KPHA+ICAgfSw8L3A+CjxwPiA8L3A+CjxwPiAgIC4uLi4uLjwvcD4KPHA+IDwvcD4KPHA+ICAgIHs8L3A+CjxwPiAgICAgICAmcXVvdDtjbGFzcyZxdW90OzogJnF1b3Q7Q2xhc3Mgb25lJnF1b3Q7LDwvcD4KPHA+ICAgICAgICZxdW90O2lkJnF1b3Q7OiA3LDwvcD4KPHA+ICAgICAgICZxdW90O25hbWUmcXVvdDs6ICZxdW90O05pY2hvbGFzJnF1b3Q7LDwvcD4KPHA+ICAgICAgICZxdW90O3N1YmplY3QmcXVvdDs6ICZxdW90O1BFJnF1b3Q7LDwvcD4KPHA+ICAgICAgICZxdW90O3Njb3JlJnF1b3Q7OiA2MDwvcD4KPHA+ICAgIH08L3A+CjxwPl08L3A+CjxwPiA8L3A+CjxwPiAgICAgICAg0ruw47Gose25pL7f08nT2s7et6jWsb3TtsHIoWpzb27OxLz+yv2+3aOszfnN+dDo0qrSwMC119S2qNLlyv2+3byvzai5/cbky/u437y20+/R1KOoyOdKYXZho6m94s72uvO0q7j4saix7cq508Oho7yvy+OxqLHt1PK/ydLU1rG9083qs8lKU09Oyv2+3bXEtsHIobrNvMbL46Gj0tTPws6qyrXP1rK91uijujwvcD4KPGgzPrHg0LS8xsvjvcWxvjwvaDM+CjxwPiAgICAgICAgyrnTw7yvy+PG97HgvK3G97Hg0LS9xbG+o6hwMS5kZnijqaOstsHIoWpzb24mIzI2Njg0O8q9zsS8/qOsveLO9sTayN2yos3qs8m8xsvjo7o8L3A+Cgo8aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20150426/20150426091200522.jpg" alt="\">

A1:使用read()以字符串格式读入json文件内容后,使用S.import@j()方法将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文件的读取计算(无论是编辑独立的集算脚本,还是直接使用脚本数据集),为这类报表的开发提供了便利,也从另一方面说明报表工具支持多样性数据源的重要性。



www.htsjk.Com true http://www.htsjk.com/DB2/20215.html NewsArticle 报表数据源之JSON JSON作为一种轻量级数据式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见,另外有些报表还会接收来自HTTP服务器的数据进行报表展现。这里通过例子...
评论暂时关闭