程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 報表數據源之JSON

報表數據源之JSON

編輯:DB2教程

報表數據源之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文件的讀取計算(無論是編輯獨立的集算腳本,還是直接使用腳本數據集),為這類報表的開發提供了便利,也從另一方面說明報表工具支持多樣性數據源的重要性。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved