真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解決報表關(guān)聯(lián)計算中的性能問題

報表開發(fā)過程中經(jīng)常要在報表中完成數(shù)據(jù)關(guān)聯(lián)計算,有時為了降低報表制作復(fù)雜度,會將關(guān)聯(lián)關(guān)系放到可視的報表模板中完成;而有時則必須在報表中完成關(guān)聯(lián),如多數(shù)據(jù)源、異構(gòu)數(shù)據(jù)源的情況。在報表中做關(guān)聯(lián)往往導(dǎo)致報表效率不高,計算過慢,從而引發(fā)性能問題。為此,潤乾報表提供了高性能數(shù)據(jù)關(guān)聯(lián)方式(需要結(jié)合集算器實現(xiàn)),可以顯著提升報表的計算效率。這里就通過一個常見的多源關(guān)聯(lián)分片報表實例來說明潤乾報表的實現(xiàn)過程:

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的武平網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

報表說明

根據(jù)銷售情況等信息按照時間、地區(qū)、銷售人員、產(chǎn)品等維度匯總銷售額,報表樣式如下:

如何解決報表關(guān)聯(lián)計算中的性能問題

以下為實現(xiàn)過程。

編寫計算腳本

首先使用集算器編寫腳本,完成數(shù)據(jù)關(guān)聯(lián),并為報表返回關(guān)聯(lián)后的結(jié)果集。

A
1 =connect(“demo”)
2 =A1.query(“SELECT 客戶. 地區(qū), 客戶. 城市, 訂單明細. 數(shù)量, 訂單明細. 折扣, 訂單明細. 單價, 訂單. 雇員 ID, 訂單. 訂購日期, 訂單明細. 產(chǎn)品 ID FROM 訂單明細, 訂單, 客戶 WHERE 客戶. 客戶 ID = 訂單. 客戶 ID AND 訂單. 訂單 ID = 訂單明細. 訂單 ID and 訂單. 訂購日期 is not null”)
3 =A1.query(“SELECT 類別. 類別 ID, 類別. 類別名稱 FROM 類別”)
4 =A1.query(“SELECT* from 雇員”)
5 =A1.query(“SELECT 產(chǎn)品. 類別 ID, 產(chǎn)品. 產(chǎn)品 ID FROM 產(chǎn)品”)
6 >A5.switch(類別 ID,A3: 類別 ID)
7 >A2.switch(雇員 ID,A4: 雇員 ID)
8 >A2.switch(產(chǎn)品 ID,A5: 產(chǎn)品 ID)
9 =A2.new(year( 訂購日期): 年,month(訂購日期): 月, 地區(qū), 城市, 單價 * 數(shù)量: 金額, 雇員 ID. 職務(wù): 職務(wù), 雇員 ID. 雇員 ID: 雇員 ID, 雇員 ID. 姓氏 + 雇員 ID. 名字: 姓名, 產(chǎn)品 ID. 類別 ID. 類別 ID: 類別 ID, 產(chǎn)品 ID. 類別 ID. 類別名稱: 類別名稱 )
10 return A9

A1:連接數(shù)據(jù)源;

A2-A5:執(zhí)行 sql,分別取訂單、產(chǎn)品等庫表數(shù)據(jù);

A6-A8:使用 switch 將多表數(shù)據(jù)完成關(guān)聯(lián),關(guān)聯(lián)結(jié)果存入 A2 格中;

A9:根據(jù)已關(guān)聯(lián)結(jié)果創(chuàng)建新序表,結(jié)果集通過 A10 返回報表。

編制報表

在潤乾報表設(shè)計器中新建報表模板后,數(shù)據(jù)集選擇“集算器”,在數(shù)據(jù)集編輯窗口指定上述編輯好的 dfx 文件,完成數(shù)據(jù)集創(chuàng)建。

編輯報表模板表達式:

如何解決報表關(guān)聯(lián)計算中的性能問題

不同于報表模板中的低效關(guān)聯(lián),集算報表是事先在集算腳本中完成關(guān)聯(lián),報表模板只需從結(jié)果集取數(shù),從而獲得更高的性能。

為了對照,我們再按照傳統(tǒng)的報表中實現(xiàn)關(guān)聯(lián)的方式做一下:

報表中實現(xiàn)關(guān)聯(lián)

數(shù)據(jù)集

ds1: SELECT 客戶. 地區(qū), 客戶. 城市, 訂單明細. 數(shù)量, 訂單明細. 折扣, 訂單明細. 單價, 訂單. 雇員 ID, 訂單. 訂購日期, 訂單明細. 產(chǎn)品 ID FROM 訂單明細, 訂單, 客戶 WHERE 客戶. 客戶 ID = 訂單. 客戶 ID  AND  訂單. 訂單 ID = 訂單明細. 訂單 ID and 訂單. 訂購日期 is not null

ds2: SELECT 類別. 類別 ID, 類別. 類別名稱 FROM 類別

ds3: SELECT * from 雇員

ds4: SELECT 產(chǎn)品. 類別 ID, 產(chǎn)品. 產(chǎn)品 ID FROM 產(chǎn)品

報表模板

如何解決報表關(guān)聯(lián)計算中的性能問題

對比效果

本例的源表數(shù)據(jù)為 40 多萬條,基于同樣的取數(shù) sql,兩種關(guān)聯(lián)方式的運行時間如下表所示:

如何解決報表關(guān)聯(lián)計算中的性能問題

可以看到,潤乾報表在處理關(guān)聯(lián)計算類報表時有明顯的優(yōu)勢。這是因為在報表中實現(xiàn)關(guān)聯(lián)只能使用遍歷算法,針對單條主記錄去尋找關(guān)聯(lián)的子記錄,因此效率不高;而集算器采用了更高效的 hash 關(guān)聯(lián)方案,事先將所有子記錄按對應(yīng)碼 hash 到主記錄上(代碼中的 switch 函數(shù)就利用了 hash 關(guān)聯(lián)技術(shù)),因而能獲得一倍以上的性能提升(如果只算關(guān)聯(lián)能快出 5-10 倍)。

此外,集算器也非常適合處理異構(gòu)數(shù)據(jù)源的數(shù)據(jù)關(guān)聯(lián),如常見的跨庫計算、文件和數(shù)據(jù)庫混合計算等情況。

下附運行日志和測試機配置。

【附 1】運行日志

報表中關(guān)聯(lián)

[2018-09-15 11:32:59] : [INFO]  - 開始運算報表,首先取數(shù)……

[2018-09-15 11:32:59] : [DEBUG]  - 下面開始打出 sql

[2018-09-15 11:32:59] : [DEBUG]  - ds1=SELECT 客戶. 地區(qū), 客戶. 城市, 訂單明細. 數(shù)量, 訂單明細. 折扣, 訂單明細. 單價, 訂單. 雇員 ID, 訂單. 訂購日期, 訂單明細. 產(chǎn)品 ID FROM 訂單明細, 訂單, 客戶 WHERE 客戶. 客戶 ID = 訂單. 客戶 ID  AND  訂單. 訂單 ID = 訂單明細. 訂單 ID and 訂單. 訂購日期 is not null

[2018-09-15 11:33:35] : [DEBUG]  - 下面開始打出 sql

[2018-09-15 11:33:35] : [DEBUG]  - ds2=SELECT 類別. 類別 ID, 類別. 類別名稱 FROM 類別

[2018-09-15 11:33:35] : [DEBUG]  - 下面開始打出 sql

[2018-09-15 11:33:35] : [DEBUG]  - ds3=SELECT * from 雇員

[2018-09-15 11:33:35] : [DEBUG]  - 下面開始打出 sql

[2018-09-15 11:33:35] : [DEBUG]  - ds4=SELECT 產(chǎn)品. 類別 ID, 產(chǎn)品. 產(chǎn)品 ID FROM 產(chǎn)品

[2018-09-15 11:33:35] : [INFO]  - 取數(shù)結(jié)束, 開始運算

[2018-09-15 11:34:58] : [INFO]  - 計算結(jié)束:

dfx 中關(guān)聯(lián)

[2018-09-15 11:56:33] : [INFO]  - 開始運算報表,首先取數(shù)……

[2018-09-15 11:57:11] : [INFO]  - 取數(shù)結(jié)束, 開始運算

[2018-09-15 11:57:26] : [INFO]  - 計算結(jié)束:

【附 2】測試機配置

測試機型:Dell Inspiron 3420

CPU:Intel Core i5-3210M @2.50GHz *4

RAM:4G

HDD:西數(shù) WDC(500G 5400 轉(zhuǎn) / 分)

操作系統(tǒng):Win7(X64) SP1

JDK:1.6

數(shù)據(jù)庫:oracle11g R2

潤乾報表版本:2018


名稱欄目:如何解決報表關(guān)聯(lián)計算中的性能問題
文章分享:http://weahome.cn/article/igdhjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部