報表資料來源之JSON,報表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檔案內容後,使用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檔案的讀取計算(無論是編輯獨立的集算指令碼,還是直接使用指令碼資料集),為這類報表的開發提供了便利,也從另一方面說明報表工具支援多樣性資料來源的重要性。