JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见。润乾集算报表可以很好支持json数据源,这里通过实例说明。

示例一

报表说明

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

                            wKioL1PV_ROSjzwrAAB9meccIYA816.jpg

 

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格式文件,解析内容并完成计算: 

wKiom1PV-_qi78xwAACZBhBXj-o579.jpg

A1:使用read()以字符串格式读入json文件内容;A2:使用S.import@j()方法将json文件内容解析成序表;

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

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

新建报表

打开集算报表设计器,菜单栏选择文件-新建报表,点击生成空白报表,新建一个空白报表。

设置数据集

菜单栏选择报表-数据集,数据集类型选择集算器,在弹出的集算器数据集设置窗口中选择dfx文件,创建数据集ds1

wKiom1PV-_qSfQBqAADQKivD2Oo285.jpg

编辑报表模板及表达式

报表模板第一行为报表头,第二行为表达式。

wKiom1PV-_uy7HTmAABP_5eCLts134.jpg

通过B2取学生编号列表,C2D2根据B2扩展取值姓名和总成绩,A2中排名使用&B2表达式并设置其左主格为B2可以实现排名。

展现报表

在报表设计器中,选择工具栏中的预览报表spacer.gif,即可在设计器中查看报表展现结果。

wKioL1PV_RXw0gDDAACFTVdN1Uc615.jpg

设计器预览效果

 

此外,集算报表设计器内置了Tomcat,允许用户将报表发布到web端查看页面效果,点击工具栏右上角的IE图标spacer.gif,设置报表主目录和DFX主目录(可采用默认),完成报表发布。

wKiom1PV-_ugwuaPAAC-EVKZCSU172.jpg

页面发布后预览效果

JSON对于表达带有层次的数据结构具有较大优势,下面再来看一个例子:

示例二

报表说明

根据订单和订单明细表,列出订单信息以及每个订单下订单明细数据。报表样式如下:

wKioL1PV_RbizyuAAAGE4WaopEE287.jpg

 

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

    }

]

编写集算器脚本

 

wKioL1PV_RfyH6xCAAER2c9JdyQ974.jpg

读入JSON格式文件,并将结果以序表形式为报表返回结果集。其中,A2为读入JSON数据后带有层次的结果集,该结果集可以直接供报表使用。

报表设计

上述带有层次的结果集在报表中以层次数据集的形式存在

wKioL1PV_RjRk1RxAAD8l1Do7aA551.jpg

报表模板及表达式如下:

wKiom1PV-_6BCb9cAAC9v-d-0nA655.jpg

B1中使用第一层数据集ds1取得订单IDD1F1B2等跟随B1直接从ds1中取值,取得所有订单信息;B5则根据第二层数据集ds1.订单编号取订单明细中的产品ID,和C5D5等获得所有该订单的明细数据。设置所有单元格的左主格均为B1。通过集算器读入带有层次的JSON文件,报表直接使用无需再进行关联。

展现效果

wKioL1PV_b3A3YaeAAFNnKp1q1I676.jpg

页面展现效果