報表資料來源之JSON,報表json

來源:互聯網
上載者:User

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



相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.