中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決報表關聯計算中的性能問題

發布時間:2020-08-10 23:39:13 來源:ITPUB博客 閱讀:188 作者:bubblegum 欄目:編程語言

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

報表說明

根據銷售情況等信息按照時間、地區、銷售人員、產品等維度匯總銷售額,報表樣式如下:

如何解決報表關聯計算中的性能問題

以下為實現過程。

編寫計算腳本

首先使用集算器編寫腳本,完成數據關聯,并為報表返回關聯后的結果集。

A
1 =connect(“demo”)
2 =A1.query(“SELECT 客戶. 地區, 客戶. 城市, 訂單明細. 數量, 訂單明細. 折扣, 訂單明細. 單價, 訂單. 雇員 ID, 訂單. 訂購日期, 訂單明細. 產品 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 產品. 類別 ID, 產品. 產品 ID FROM 產品”)
6 >A5.switch(類別 ID,A3: 類別 ID)
7 >A2.switch(雇員 ID,A4: 雇員 ID)
8 >A2.switch(產品 ID,A5: 產品 ID)
9 =A2.new(year( 訂購日期): 年,month(訂購日期): 月, 地區, 城市, 單價 * 數量: 金額, 雇員 ID. 職務: 職務, 雇員 ID. 雇員 ID: 雇員 ID, 雇員 ID. 姓氏 + 雇員 ID. 名字: 姓名, 產品 ID. 類別 ID. 類別 ID: 類別 ID, 產品 ID. 類別 ID. 類別名稱: 類別名稱 )
10 return A9

A1:連接數據源;

A2-A5:執行 sql,分別取訂單、產品等庫表數據;

A6-A8:使用 switch 將多表數據完成關聯,關聯結果存入 A2 格中;

A9:根據已關聯結果創建新序表,結果集通過 A10 返回報表。

編制報表

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

編輯報表模板表達式:

如何解決報表關聯計算中的性能問題

不同于報表模板中的低效關聯,集算報表是事先在集算腳本中完成關聯,報表模板只需從結果集取數,從而獲得更高的性能。

為了對照,我們再按照傳統的報表中實現關聯的方式做一下:

報表中實現關聯

數據集

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

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

ds3: SELECT * from 雇員

ds4: SELECT 產品. 類別 ID, 產品. 產品 ID FROM 產品

報表模板

如何解決報表關聯計算中的性能問題

對比效果

本例的源表數據為 40 多萬條,基于同樣的取數 sql,兩種關聯方式的運行時間如下表所示:

如何解決報表關聯計算中的性能問題

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

此外,集算器也非常適合處理異構數據源的數據關聯,如常見的跨庫計算、文件和數據庫混合計算等情況。

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

【附 1】運行日志

報表中關聯

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

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

[2018-09-15 11:32:59] : [DEBUG]  - ds1=SELECT 客戶. 地區, 客戶. 城市, 訂單明細. 數量, 訂單明細. 折扣, 訂單明細. 單價, 訂單. 雇員 ID, 訂單. 訂購日期, 訂單明細. 產品 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 產品. 類別 ID, 產品. 產品 ID FROM 產品

[2018-09-15 11:33:35] : [INFO]  - 取數結束, 開始運算

[2018-09-15 11:34:58] : [INFO]  - 計算結束:

dfx 中關聯

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

[2018-09-15 11:57:11] : [INFO]  - 取數結束, 開始運算

[2018-09-15 11:57:26] : [INFO]  - 計算結束:

【附 2】測試機配置

測試機型:Dell Inspiron 3420

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

RAM:4G

HDD:西數 WDC(500G 5400 轉 / 分)

操作系統:Win7(X64) SP1

JDK:1.6

數據庫:oracle11g R2

潤乾報表版本:2018

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福泉市| 桃江县| 手游| 清水河县| 衡东县| 大足县| 潼南县| 和平区| 平顶山市| 利津县| 安顺市| 汶川县| 稻城县| 会理县| 江津市| 乐平市| 贵溪市| 竹北市| 古田县| 温宿县| 安化县| 图木舒克市| 如东县| 突泉县| 余庆县| 乐陵市| 皋兰县| 陕西省| 仙游县| 石门县| 文昌市| 特克斯县| 陵川县| 栖霞市| 莲花县| 正阳县| 祁阳县| 临桂县| 高安市| 云霄县| 衡水市|