專利名稱:基于網(wǎng)絡(luò)報表的取數(shù)裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)獲取技術(shù)領(lǐng)域,具體而言,涉及一種基于網(wǎng)絡(luò)報表的取數(shù)裝置和方法。
背景技術(shù):
報表通過查詢、統(tǒng)計和分析,為企業(yè)提供所需的準確數(shù)據(jù)。企業(yè)級報表系統(tǒng)最顯著的特征是它產(chǎn)生高度靈活報表格式的能力,數(shù)據(jù)能夠以各種形式展現(xiàn)給信息消費者,而且業(yè)務(wù)報表需要為消費者查詢實時的數(shù)據(jù)。
現(xiàn)有的報表是居于微軟的R印ortView控件接口進行設(shè)計,這種設(shè)計思路是把大部分工作交給控件在web端來完成。微軟Iteportview控件在界面展現(xiàn)時需要獲取全部數(shù)據(jù),并緩存到Web服務(wù)器上,經(jīng)過內(nèi)存計算才能展現(xiàn),且計算過程中一直占用內(nèi)存。當大數(shù)據(jù)量的情況下,緩存的數(shù)據(jù)會使得IISanternet Information Services,互聯(lián)網(wǎng)信息服務(wù))內(nèi)存泄漏。一般當IIS內(nèi)存達到IIS內(nèi)存上限時(大概是1.8G),報表會提示“資源被占用”或者報內(nèi)存溢出的黃頁。由于每次都獲取全部數(shù)據(jù)才能展現(xiàn),因此報表取數(shù)的效率也有嚴重問題。
相關(guān)技術(shù)方案中,采用直接查詢?nèi)繑?shù)據(jù),并把全部數(shù)據(jù)緩存到TOB服務(wù)器的內(nèi)存中,后由IteportView控件在內(nèi)存中對數(shù)據(jù)進行處理,并對數(shù)據(jù)進行分頁,最后獲取當前頁需要的數(shù)據(jù)在界面上進行顯示。具體的技術(shù)方案的原理示意圖如圖3所示。
上述技術(shù)方案由于全部數(shù)據(jù)獲取后,就交給R印ortView控件放在內(nèi)存中進行處理,需要頁面關(guān)閉時才釋放內(nèi)存,且每次數(shù)據(jù)都需要全部輸出,會有效率問題,當數(shù)據(jù)量很大時,就會有內(nèi)存溢出現(xiàn)象。
具體實現(xiàn)步驟是
1、用戶申請一個報表查詢請求;
2、系統(tǒng)彈出一個查詢界面,用戶設(shè)置報表的查詢條件,分組列和排序列;
3、按照用戶設(shè)置的查詢條件,讀取符合條件的全部數(shù)據(jù)集;
4、讀取的數(shù)據(jù)集緩存到Session對象中;
5、把kssion對象中的數(shù)據(jù)綁定到R印ortView控件上;
6、ReportView控件根據(jù)排序列對數(shù)據(jù)進行排序;
7、ReportView控件的內(nèi)置的表達式引擎根據(jù)系統(tǒng)預置的計算公式和計算列進行解析,并計算出表達式的值;
8、由R印ortView控件的引擎處理數(shù)據(jù)的分組,分頁及小記等;
9、最后,根據(jù)顯示列輸出到頁面上;
10、頁面關(guān)閉時,對%8^011對象緩存的數(shù)據(jù)進行釋放;
由于上述方案依賴于R印ortView控件的引擎,通過控件引擎進行數(shù)據(jù)的分組、分頁及小記等,因此,控件需要全部的數(shù)據(jù)才能運算,大數(shù)據(jù)緩存在WEB服務(wù)器上,必然會導致WEB服務(wù)器的內(nèi)存溢出,產(chǎn)品運行越來越慢的現(xiàn)象。
因此,需要一種新的基于網(wǎng)絡(luò)報表的取數(shù)技術(shù),可以準確獲取部分數(shù)據(jù),避免服務(wù)器緩存不足。發(fā)明內(nèi)容
本發(fā)明正是基于上述問題,提出了一種新的基于網(wǎng)絡(luò)報表的取數(shù)技術(shù),可以準確獲取部分數(shù)據(jù),避免服務(wù)器緩存不足。
有鑒于此,本發(fā)明提出了一種基于網(wǎng)絡(luò)報表的取數(shù)裝置,包括請求發(fā)送單元,將來自瀏覽器的報表查詢請求發(fā)送至網(wǎng)絡(luò)服務(wù)器,所述報表查詢請求包括查詢條件、排序條件及分組條件;數(shù)據(jù)獲取單元,所述網(wǎng)絡(luò)服務(wù)器根據(jù)所述查詢條件,從數(shù)據(jù)庫中獲取對應(yīng)的報表數(shù)據(jù);報表創(chuàng)建單元,在所述網(wǎng)絡(luò)服務(wù)器中建立第一中間表、第二中間表和第三中間表;數(shù)據(jù)導入單元,將所述數(shù)據(jù)獲取單元獲取的所述報表數(shù)據(jù)導入所述第一中間表中,將來自排序單元的報表數(shù)據(jù)導入所述第二中間表中,以及將來自分組單元的報表數(shù)據(jù)導入所述第三中間表中;序號添加單元,在所述第一中間表中添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第一序號列,以及為所述第二中間表添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第二序號列;所述排序單元,按照所述排序條件將所述第一中間表中的報表數(shù)據(jù)進行排序;所述分組單元,按照所述分組條件將所述第二中間表中的報表數(shù)據(jù)進行分組;依賴數(shù)值確定單元,獲取所述第三中間表中的每行數(shù)據(jù)對應(yīng)于所述第二序號列中的關(guān)聯(lián)序號,并將所述關(guān)聯(lián)序號的數(shù)值作為依賴數(shù)值;數(shù)值范圍確定單元,獲取每組數(shù)據(jù)中的最大依賴數(shù)值和最小依賴數(shù)值,并將所述最大依賴數(shù)值與所述最小依賴數(shù)值之間的所有依賴數(shù)值作為數(shù)值范圍;數(shù)據(jù)輸出單元,按照所述依賴數(shù)值、所述第二序號列及所述第一序號列之間的對應(yīng)關(guān)系,將所述報表數(shù)據(jù)中對應(yīng)于所述所有依賴數(shù)值的數(shù)據(jù)輸出至所述瀏覽器。
在該技術(shù)方案中,當服務(wù)器根據(jù)用戶的查詢條件,當數(shù)據(jù)庫中獲取了對應(yīng)的數(shù)據(jù)時,與該條件相關(guān)的數(shù)據(jù)中,包含了很多實際上并不需要的數(shù)據(jù),因而當存儲至服務(wù)器的緩存中時,就可能導致服務(wù)器緩存不足、甚至溢出。而通過本發(fā)明的技術(shù)方案,可以首先確定出用戶真正需要的那部分數(shù)據(jù),然后僅將該部分數(shù)據(jù)存儲至服務(wù)器的緩存中,從而避免了緩存的溢出問題,提高運行效率。此外,這里提及的“自增長”是指,在第一中間表和第二中間表中,分別添加一列,該列的行數(shù)不定,而是根據(jù)獲取的數(shù)據(jù)的行數(shù)的增加而自動增長, 保證為每一行數(shù)據(jù)添加上對應(yīng)的序號?!耙蕾嚁?shù)值”是指,對于某一行的數(shù)據(jù),與其存在關(guān)聯(lián)關(guān)系的數(shù)據(jù)的范圍,從而確定真正需要獲取的數(shù)據(jù)。
在上述技術(shù)方案中,優(yōu)選地,還包括索引建立單元,根據(jù)所述報表數(shù)據(jù)及其對應(yīng)的項目,為所述第一中間表建立索引。在該技術(shù)方案中,通過建立索引,便于數(shù)據(jù)的查找和對數(shù)據(jù)范圍的確定。
在上述技術(shù)方案中,優(yōu)選地,還包括索引復制單元,在所述第二中間表和所述第三中間表中使用所述索引建立單元建立的所述索引。在該技術(shù)方案中,由于第一中間表、第二中間表和第三中間表之間存在的相互關(guān)系,可以將在第一中間表中建立的索引用于第二中間表和第三中間表中,增加通用性的同時,也不必另外生成,節(jié)省資源。
在上述技術(shù)方案中,優(yōu)選地,還包括存儲單元,將所述數(shù)據(jù)獲取單元獲取的所述報表數(shù)據(jù)存儲在所述網(wǎng)絡(luò)服務(wù)器的內(nèi)存中;以及內(nèi)存釋放單元,在所述數(shù)據(jù)輸出單元將所述所有依賴數(shù)值對應(yīng)的報表數(shù)據(jù)輸出至所述瀏覽器之后,刪除存儲在所述網(wǎng)絡(luò)服務(wù)器的所述內(nèi)存中的數(shù)據(jù)。在該技術(shù)方案中,通過對內(nèi)存的及時釋放,避免發(fā)生內(nèi)存溢出,影響運行效率。
在上述技術(shù)方案中,優(yōu)選地,還包括分級單元,在存在多個所述分組條件的情況下,建立分組的級別,則所述第三中間表中的每行數(shù)據(jù)屬于多個級別的分組;以及所述數(shù)值范圍確定單元還用于分別獲取每個最高級別分組中的最大依賴數(shù)值和最小依賴數(shù)值,并將所述最大依賴數(shù)值與所述最小依賴數(shù)值之間的所有依賴數(shù)值作為所述數(shù)值范圍。在該技術(shù)方案中,每行數(shù)據(jù)具有至少一個分組條件的限制,在存在多個分組條件時,比如η個條件,則一行數(shù)據(jù)最多受到η個條件限制,而多行數(shù)據(jù)最少受到1個條件限制,那么,對于受到更少條件限制的行數(shù)據(jù),設(shè)置為最高級別,此時,對于每個條件,都對應(yīng)存在一部分行數(shù)據(jù)屬于最高級別,分別獲取對應(yīng)的最高級別的依賴數(shù)值,用于最后獲取數(shù)據(jù)的范圍。
根據(jù)本發(fā)明的又一方面,還提出了一種基于網(wǎng)絡(luò)報表的取數(shù)方法,包括步驟 202,網(wǎng)絡(luò)服務(wù)器接收來自瀏覽器的報表查詢請求,所述報表查詢請求包括查詢條件、排序條件及分組條件;步驟204,所述網(wǎng)絡(luò)服務(wù)器根據(jù)所述查詢條件,從數(shù)據(jù)庫中獲取對應(yīng)的報表數(shù)據(jù);步驟206,在所述網(wǎng)絡(luò)服務(wù)器建立第一中間表,將所述報表數(shù)據(jù)導入所述第一中間表;步驟208,在所述第一中間表中添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第一序號列; 步驟210,建立第二中間表,按照所述排序條件將所述第一中間表中的報表數(shù)據(jù)進行排序后,導入所述第二中間表;步驟212,為所述第二中間表添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第二序號列;步驟214,建立第三中間表,按照所述分組條件將所述第二中間表中的報表數(shù)據(jù)進行分組后,導入所述第三中間表;步驟216,獲取所述第三中間表中的每行數(shù)據(jù)對應(yīng)于所述第二序號列中的關(guān)聯(lián)序號,并將所述關(guān)聯(lián)序號的數(shù)值作為依賴數(shù)值;步驟218, 獲取每組數(shù)據(jù)中的最大依賴數(shù)值和最小依賴數(shù)值,并按照所述依賴數(shù)值、所述第二序號列及所述第一序號列之間的對應(yīng)關(guān)系,將所述最大依賴數(shù)值與所述最小依賴數(shù)值之間的所有依賴數(shù)值在所述報表數(shù)據(jù)中對應(yīng)的數(shù)據(jù)輸出至所述瀏覽器。
在該技術(shù)方案中,當服務(wù)器根據(jù)用戶的查詢條件,當數(shù)據(jù)庫中獲取了對應(yīng)的數(shù)據(jù)時,與該條件相關(guān)的數(shù)據(jù)中,包含了很多實際上并不需要的數(shù)據(jù),因而當存儲至服務(wù)器的緩存中時,就可能導致服務(wù)器緩存不足、甚至溢出。而通過本發(fā)明的技術(shù)方案,可以首先確定出用戶真正需要的那部分數(shù)據(jù),然后僅將該部分數(shù)據(jù)存儲至服務(wù)器的緩存中,從而避免了緩存的溢出問題,提高運行效率。此外,這里提及的“自增長”是指,在第一中間表和第二中間表中,分別添加一列,該列的行數(shù)不定,而是根據(jù)獲取的數(shù)據(jù)的行數(shù)的增加而自動增長, 保證為每一行數(shù)據(jù)添加上對應(yīng)的序號?!耙蕾嚁?shù)值”是指,對于某一行的數(shù)據(jù),與其存在關(guān)聯(lián)關(guān)系的數(shù)據(jù)的范圍,從而確定真正需要獲取的數(shù)據(jù)。
在上述技術(shù)方案中,優(yōu)選地,在所述步驟206中,還包括根據(jù)所述報表數(shù)據(jù)及其對應(yīng)的項目,為所述第一中間表建立索引。在該技術(shù)方案中,通過建立索引,便于數(shù)據(jù)的查找和對數(shù)據(jù)范圍的確定。
在上述技術(shù)方案中,優(yōu)選地,還包括在所述第二中間表和所述第三中間表中使用所述索引。在該技術(shù)方案中,由于第一中間表、第二中間表和第三中間表之間存在的相互關(guān)系,可以將在第一中間表中建立的索引用于第二中間表和第三中間表中,增加通用性的同時,也不必另外生成,節(jié)省資源。
在上述技術(shù)方案中,優(yōu)選地,在所述步驟204中,包括將所述報表數(shù)據(jù)存儲在所述網(wǎng)絡(luò)服務(wù)器的內(nèi)存中;在所述步驟218中,還包括刪除存儲在所述網(wǎng)絡(luò)服務(wù)器的所述內(nèi)存中的數(shù)據(jù)。在該技術(shù)方案中,通過對內(nèi)存的及時釋放,避免發(fā)生內(nèi)存溢出,影響運行效率。
在上述技術(shù)方案中,優(yōu)選地,在所述步驟218中,還包括若存在多個所述分組條件,則所述第三中間表中的每行數(shù)據(jù)屬于多個級別的分組,分別獲取每個最高級別分組中的最大依賴數(shù)值和最小依賴數(shù)值,并分別獲取對應(yīng)的報表數(shù)據(jù)。在該技術(shù)方案中,每行數(shù)據(jù)具有至少一個分組條件的限制,在存在多個分組條件時,比如η個條件,則一行數(shù)據(jù)最多受到η個條件限制,而多行數(shù)據(jù)最少受到1個條件限制,那么,對于受到更少條件限制的行數(shù)據(jù),設(shè)置為最高級別,此時,對于每個條件,都對應(yīng)存在一部分行數(shù)據(jù)屬于最高級別,分別獲取對應(yīng)的最高級別的依賴數(shù)值,用于最后獲取數(shù)據(jù)的范圍。
通過以上技術(shù)方案,可以準確獲取部分數(shù)據(jù),避免服務(wù)器緩存不足。
圖1示出了根據(jù)本發(fā)明的實施例的基于網(wǎng)絡(luò)報表的取數(shù)裝置的框圖2示出了根據(jù)本發(fā)明的實施例的基于網(wǎng)絡(luò)報表的取數(shù)方法的流程圖3示出了相關(guān)技術(shù)的獲取報表數(shù)據(jù)的示意圖4示出了根據(jù)本發(fā)明的實施例的獲取報表數(shù)據(jù)的示意圖。
具體實施方式
為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點,下面結(jié)合附圖和具體實施方式
對本發(fā)明進行進一步的詳細描述。
在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實施,因此,本發(fā)明并不限于下面公開的具體實施例的限制。
圖1示出了根據(jù)本發(fā)明的實施例的基于網(wǎng)絡(luò)報表的取數(shù)裝置的框圖。
如圖1所示,根據(jù)本發(fā)明的實施例的基于網(wǎng)絡(luò)報表的取數(shù)裝置100,包括請求發(fā)送單元102,將來自瀏覽器的報表查詢請求發(fā)送至網(wǎng)絡(luò)服務(wù)器,報表查詢請求包括查詢條件、排序條件及分組條件;數(shù)據(jù)獲取單元104,網(wǎng)絡(luò)服務(wù)器根據(jù)查詢條件,從數(shù)據(jù)庫中獲取對應(yīng)的報表數(shù)據(jù);報表創(chuàng)建單元106,在網(wǎng)絡(luò)服務(wù)器中建立第一中間表、第二中間表和第三中間表;數(shù)據(jù)導入單元108,將數(shù)據(jù)獲取單元104獲取的報表數(shù)據(jù)導入第一中間表中,將來自排序單元112的報表數(shù)據(jù)導入第二中間表中,以及將來自分組單元114的報表數(shù)據(jù)導入第三中間表中;序號添加單元110,在第一中間表中添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第一序號列,以及為第二中間表添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第二序號列;排序單元112,按照排序條件將第一中間表中的報表數(shù)據(jù)進行排序;分組單元114,按照分組條件將第二中間表中的報表數(shù)據(jù)進行分組;依賴數(shù)值確定單元116,獲取第三中間表中的每行數(shù)據(jù)對應(yīng)于第二序號列中的關(guān)聯(lián)序號,并將關(guān)聯(lián)序號的數(shù)值作為依賴數(shù)值;數(shù)值范圍確定單元118,獲取每組數(shù)據(jù)中的最大依賴數(shù)值和最小依賴數(shù)值,并將最大依賴數(shù)值與最小依賴數(shù)值之間的所有依賴數(shù)值作為數(shù)值范圍;數(shù)據(jù)輸出單元120,按照依賴數(shù)值、第二序號列及第一序號列之間的對應(yīng)關(guān)系,將報表數(shù)據(jù)中對應(yīng)于所有依賴數(shù)值的數(shù)據(jù)輸出至瀏IrWSB 見益。
在該技術(shù)方案中,當服務(wù)器根據(jù)用戶的查詢條件,當數(shù)據(jù)庫中獲取了對應(yīng)的數(shù)據(jù)時,與該條件相關(guān)的數(shù)據(jù)中,包含了很多實際上并不需要的數(shù)據(jù),因而當存儲至服務(wù)器的緩存中時,就可能導致服務(wù)器緩存不足、甚至溢出。而通過本發(fā)明的技術(shù)方案,可以首先確定出用戶真正需要的那部分數(shù)據(jù),然后僅將該部分數(shù)據(jù)存儲至服務(wù)器的緩存中,從而避免了緩存的溢出問題,提高運行效率。此外,這里提及的“自增長”是指,在第一中間表和第二中間表中,分別添加一列,該列的行數(shù)不定,而是根據(jù)獲取的數(shù)據(jù)的行數(shù)的增加而自動增長, 保證為每一行數(shù)據(jù)添加上對應(yīng)的序號。“依賴數(shù)值”是指,對于某一行的數(shù)據(jù),與其存在關(guān)聯(lián)關(guān)系的數(shù)據(jù)的范圍,從而確定真正需要獲取的數(shù)據(jù)。
在上述技術(shù)方案中,還包括索引建立單元122,根據(jù)報表數(shù)據(jù)及其對應(yīng)的項目, 為第一中間表建立索引。在該技術(shù)方案中,通過建立索引,便于數(shù)據(jù)的查找和對數(shù)據(jù)范圍的確定。
在上述技術(shù)方案中,還包括索引復制單元124,在第二中間表和第三中間表中使用索引建立單元122建立的索引。在該技術(shù)方案中,由于第一中間表、第二中間表和第三中間表之間存在的相互關(guān)系,可以將在第一中間表中建立的索引用于第二中間表和第三中間表中,增加通用性的同時,也不必另外生成,節(jié)省資源。
在上述技術(shù)方案中,還包括存儲單元126,將數(shù)據(jù)獲取單元104獲取的報表數(shù)據(jù)存儲在網(wǎng)絡(luò)服務(wù)器的內(nèi)存中;以及內(nèi)存釋放單元128,在數(shù)據(jù)輸出單元120將所有依賴數(shù)值對應(yīng)的報表數(shù)據(jù)輸出至瀏覽器之后,刪除存儲在網(wǎng)絡(luò)服務(wù)器的內(nèi)存中的數(shù)據(jù)。在該技術(shù)方案中,通過對內(nèi)存的及時釋放,避免發(fā)生內(nèi)存溢出,影響運行效率。
在上述技術(shù)方案中,還包括分級單元130,在存在多個分組條件的情況下,建立分組的級別,則第三中間表中的每行數(shù)據(jù)屬于多個級別的分組;以及數(shù)值范圍確定單元 118還用于分別獲取每個最高級別分組中的最大依賴數(shù)值和最小依賴數(shù)值,并將最大依賴數(shù)值與最小依賴數(shù)值之間的所有依賴數(shù)值作為數(shù)值范圍。在該技術(shù)方案中,每行數(shù)據(jù)具有至少一個分組條件的限制,在存在多個分組條件時,比如η個條件,則一行數(shù)據(jù)最多受到 η個條件限制,而多行數(shù)據(jù)最少受到1個條件限制,那么,對于受到更少條件限制的行數(shù)據(jù), 設(shè)置為最高級別,此時,對于每個條件,都對應(yīng)存在一部分行數(shù)據(jù)屬于最高級別,分別獲取對應(yīng)的最高級別的依賴數(shù)值,用于最后獲取數(shù)據(jù)的范圍。
圖2示出了根據(jù)本發(fā)明的實施例的基于網(wǎng)絡(luò)報表的取數(shù)方法的流程圖。
如圖2所示,根據(jù)本發(fā)明的實施例的基于網(wǎng)絡(luò)報表的取數(shù)方法,包括步驟202, 網(wǎng)絡(luò)服務(wù)器接收來自瀏覽器的報表查詢請求,報表查詢請求包括查詢條件、排序條件及分組條件;步驟204,網(wǎng)絡(luò)服務(wù)器根據(jù)查詢條件,從數(shù)據(jù)庫中獲取對應(yīng)的報表數(shù)據(jù);步驟206, 在網(wǎng)絡(luò)服務(wù)器建立第一中間表,將報表數(shù)據(jù)導入第一中間表;步驟208,在第一中間表中添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第一序號列;步驟210,建立第二中間表,按照排序條件將第一中間表中的報表數(shù)據(jù)進行排序后,導入第二中間表;步驟212,為第二中間表添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第二序號列;步驟214,建立第三中間表,按照分組條件將第二中間表中的報表數(shù)據(jù)進行分組后,導入第三中間表;步驟216,獲取第三中間表中的每行數(shù)據(jù)對應(yīng)于第二序號列中的關(guān)聯(lián)序號,并將關(guān)聯(lián)序號的數(shù)值作為依賴數(shù)值;步驟 218,獲取每組數(shù)據(jù)中的最大依賴數(shù)值和最小依賴數(shù)值,并按照依賴數(shù)值、第二序號列及第一序號列之間的對應(yīng)關(guān)系,將最大依賴數(shù)值與最小依賴數(shù)值之間的所有依賴數(shù)值在報表數(shù)據(jù)中對應(yīng)的數(shù)據(jù)輸出至瀏覽器。
在該技術(shù)方案中,當服務(wù)器根據(jù)用戶的查詢條件,當數(shù)據(jù)庫中獲取了對應(yīng)的數(shù)據(jù)時,與該條件相關(guān)的數(shù)據(jù)中,包含了很多實際上并不需要的數(shù)據(jù),因而當存儲至服務(wù)器的緩存中時,就可能導致服務(wù)器緩存不足、甚至溢出。而通過本發(fā)明的技術(shù)方案,可以首先確定出用戶真正需要的那部分數(shù)據(jù),然后僅將該部分數(shù)據(jù)存儲至服務(wù)器的緩存中,從而避免了緩存的溢出問題,提高運行效率。此外,這里提及的“自增長”是指,在第一中間表和第二中間表中,分別添加一列,該列的行數(shù)不定,而是根據(jù)獲取的數(shù)據(jù)的行數(shù)的增加而自動增長, 保證為每一行數(shù)據(jù)添加上對應(yīng)的序號。“依賴數(shù)值”是指,對于某一行的數(shù)據(jù),與其存在關(guān)聯(lián)關(guān)系的數(shù)據(jù)的范圍,從而確定真正需要獲取的數(shù)據(jù)。
在上述技術(shù)方案中,在步驟206中,還包括根據(jù)報表數(shù)據(jù)及其對應(yīng)的項目,為第一中間表建立索引。在該技術(shù)方案中,通過建立索引,便于數(shù)據(jù)的查找和對數(shù)據(jù)范圍的確定。
在上述技術(shù)方案中,還包括在第二中間表和第三中間表中使用索引。在該技術(shù)方案中,由于第一中間表、第二中間表和第三中間表之間存在的相互關(guān)系,可以將在第一中間表中建立的索引用于第二中間表和第三中間表中,增加通用性的同時,也不必另外生成,節(jié)省資源。
在上述技術(shù)方案中,在步驟204中,包括將報表數(shù)據(jù)存儲在網(wǎng)絡(luò)服務(wù)器的內(nèi)存中;在步驟218中,還包括刪除存儲在網(wǎng)絡(luò)服務(wù)器的內(nèi)存中的數(shù)據(jù)。在該技術(shù)方案中,通過對內(nèi)存的及時釋放,避免發(fā)生內(nèi)存溢出,影響運行效率。
在上述技術(shù)方案中,在步驟218中,還包括若存在多個分組條件,則第三中間表中的每行數(shù)據(jù)屬于多個級別的分組,分別獲取每個最高級別分組中的最大依賴數(shù)值和最小依賴數(shù)值,并分別獲取對應(yīng)的報表數(shù)據(jù)。在該技術(shù)方案中,每行數(shù)據(jù)具有至少一個分組條件的限制,在存在多個分組條件時,比如η個條件,則一行數(shù)據(jù)最多受到η個條件限制,而多行數(shù)據(jù)最少受到1個條件限制,那么,對于受到更少條件限制的行數(shù)據(jù),設(shè)置為最高級別,此時,對于每個條件,都對應(yīng)存在一部分行數(shù)據(jù)屬于最高級別,分別獲取對應(yīng)的最高級別的依賴數(shù)值,用于最后獲取數(shù)據(jù)的范圍。
圖4示出了根據(jù)本發(fā)明的實施例的獲取報表數(shù)據(jù)的示意圖。
如圖4所示,為了解決在如圖3中的相關(guān)技術(shù)中出現(xiàn)的報表取數(shù)的效率問題和報表運算時的內(nèi)存溢出問題,對設(shè)計方案進行了修改,數(shù)據(jù)不全部緩存到應(yīng)用服務(wù)器端,而是分數(shù)據(jù)塊進行讀取,為了減少數(shù)據(jù)對緩存的占用,只對塊的數(shù)據(jù)進行緩存,并對第一頁進行少量讀取,而后再對數(shù)據(jù)塊讀取,這樣緩存到服務(wù)器端的數(shù)據(jù)會很少,并且第一次讀取的數(shù)據(jù)也比較少,這樣,大數(shù)據(jù)量也不會對應(yīng)用服務(wù)器造成影響。
這種實現(xiàn)方案是先讀取數(shù)據(jù)放入中間表中,然后對中間表的數(shù)據(jù)進行加工處理, 獲取到當前頁需要進行分組計算的所有數(shù)據(jù),對數(shù)據(jù)計算完成后,把數(shù)據(jù)返回到頁面上,并對當前顯示頁的數(shù)據(jù)進行輸出。
具體實現(xiàn)步驟如下
—、中間表數(shù)據(jù)排序的實現(xiàn)
1、用戶申請一個報表查詢請求;
2、系統(tǒng)彈出一個查詢界面,用戶設(shè)置報表的查詢條件,分組列和排序列;
3、按照設(shè)置的查詢條件,讀取符合條件的數(shù)據(jù),并寫入到臨時表Tabl中,同時增加一列自增長列;
4、根據(jù)查詢的排序字段,建立臨時表索引;
5、按照排序字段對臨時表Tabl中的數(shù)據(jù)進行排序,并取臨時表中的自增長列再生成另一張臨時表Tab2,并在臨時表Tab2中增加一列自增長列;
6、此時,表Τ 2是一張排序后的數(shù)據(jù)表。
二、明細表取數(shù)實現(xiàn)
1、根據(jù)排序后的Tab2去關(guān)聯(lián)Tabl,可以讀取到任何一個分頁的數(shù)據(jù)塊;
2、數(shù)據(jù)塊通過表達式引擎解析后,得到報表需要展現(xiàn)的數(shù)據(jù)塊;
3、按照顯示列與分頁數(shù)據(jù),對數(shù)據(jù)進行組織,準備輸出;
3、數(shù)據(jù)塊傳遞到前端后,顯示到頁面上,系統(tǒng)從內(nèi)存中釋放數(shù)據(jù)塊。
三、明細小計取數(shù)實現(xiàn)
1、根據(jù)排序后的臨時表Tab2和分組條件,生成一張分組分頁的臨時數(shù)據(jù)表Tab3, 此表增加了最大依賴列和最小依賴列,級次列和自增長列;
2、Tab3最大依賴列及最小依賴列數(shù)據(jù)來源于Tab2的自增長列;
3、由于小計行在明細行的下方,因此下一頁的小計行的數(shù)據(jù)需要依賴上頁的明細數(shù)據(jù)。通過最小依賴列,獲取當前顯示頁依賴數(shù)據(jù);
4、讀取包含依賴數(shù)據(jù)的數(shù)據(jù)塊,通過表達式解析,得到當前報表需要顯示的數(shù)據(jù)塊;
5、數(shù)據(jù)傳遞到前端后,顯示到頁面上,系統(tǒng)從內(nèi)存中釋放數(shù)據(jù)塊。
四、匯總表取數(shù)實現(xiàn)
匯總表取數(shù)算法實現(xiàn)與小計取數(shù)算法實現(xiàn)類似,只是數(shù)據(jù)倒序排列,實現(xiàn)如下
1、根據(jù)排序后的臨時表Τ 2和分組條件,生成一張倒排的分組分頁的臨時數(shù)據(jù)表Tab4,此表增加了最大依賴列和最小依賴列,級次列和自增長列;
2、Tab4最大依賴列及最小依賴列數(shù)據(jù)來源于Tab2的自增長列;
3、由于匯總行在匯總明細行的上方,因此上一頁的匯總行的數(shù)據(jù)需要依賴下頁的匯總明細數(shù)據(jù)。通過最大依賴列,獲取當前顯示頁依賴數(shù)據(jù);
4、讀取包含依賴數(shù)據(jù)的數(shù)據(jù)塊,通過表達式解析,得到當前報表需要顯示的數(shù)據(jù)塊;
5、數(shù)據(jù)傳遞到前端后,顯示到頁面上,系統(tǒng)從內(nèi)存中釋放數(shù)據(jù)塊。
比如在明細小計時,由用戶填寫查詢條件,由服務(wù)器根據(jù)跟條件獲取相關(guān)的數(shù)據(jù), 這些數(shù)據(jù)都是無排序數(shù)據(jù),導入到第一中間表中,并建立索引,具體如表1所示
權(quán)利要求
1.一種基于網(wǎng)絡(luò)報表的取數(shù)裝置,其特征在于,包括請求發(fā)送單元,將來自瀏覽器的報表查詢請求發(fā)送至網(wǎng)絡(luò)服務(wù)器,所述報表查詢請求包括查詢條件、排序條件及分組條件;數(shù)據(jù)獲取單元,所述網(wǎng)絡(luò)服務(wù)器根據(jù)所述查詢條件,從數(shù)據(jù)庫中獲取對應(yīng)的報表數(shù)據(jù);報表創(chuàng)建單元,在所述網(wǎng)絡(luò)服務(wù)器中建立第一中間表、第二中間表和第三中間表; 數(shù)據(jù)導入單元,將所述數(shù)據(jù)獲取單元獲取的所述報表數(shù)據(jù)導入所述第一中間表中,將來自排序單元的報表數(shù)據(jù)導入所述第二中間表中,以及將來自分組單元的報表數(shù)據(jù)導入所述第三中間表中;序號添加單元,在所述第一中間表中添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第一序號列,以及為所述第二中間表添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第二序號列; 所述排序單元,按照所述排序條件將所述第一中間表中的報表數(shù)據(jù)進行排序; 所述分組單元,按照所述分組條件將所述第二中間表中的報表數(shù)據(jù)進行分組; 依賴數(shù)值確定單元,獲取所述第三中間表中的每行數(shù)據(jù)對應(yīng)于所述第二序號列中的關(guān)聯(lián)序號,并將所述關(guān)聯(lián)序號的數(shù)值作為依賴數(shù)值;數(shù)值范圍確定單元,獲取每組數(shù)據(jù)中的最大依賴數(shù)值和最小依賴數(shù)值,并將所述最大依賴數(shù)值與所述最小依賴數(shù)值之間的所有依賴數(shù)值作為數(shù)值范圍;數(shù)據(jù)輸出單元,按照所述依賴數(shù)值、所述第二序號列及所述第一序號列之間的對應(yīng)關(guān)系,將所述報表數(shù)據(jù)中對應(yīng)于所述所有依賴數(shù)值的數(shù)據(jù)輸出至所述瀏覽器。
2.根據(jù)權(quán)利要求1所述的基于網(wǎng)絡(luò)報表的取數(shù)裝置,其特征在于,還包括索引建立單元,根據(jù)所述報表數(shù)據(jù)及其對應(yīng)的項目,為所述第一中間表建立索引。
3.根據(jù)權(quán)利要求2所述的基于網(wǎng)絡(luò)報表的取數(shù)裝置,其特征在于,還包括索引復制單元,在所述第二中間表和所述第三中間表中使用所述索引建立單元建立的所述索引。
4.根據(jù)權(quán)利要求1至3中任一項所述的基于網(wǎng)絡(luò)報表的取數(shù)裝置,其特征在于,還包括存儲單元,將所述數(shù)據(jù)獲取單元獲取的所述報表數(shù)據(jù)存儲在所述網(wǎng)絡(luò)服務(wù)器的內(nèi)存中;以及內(nèi)存釋放單元,在所述數(shù)據(jù)輸出單元將所述所有依賴數(shù)值對應(yīng)的報表數(shù)據(jù)輸出至所述瀏覽器之后,刪除存儲在所述網(wǎng)絡(luò)服務(wù)器的所述內(nèi)存中的數(shù)據(jù)。
5.根據(jù)權(quán)利要求1至3中任一項所述的基于網(wǎng)絡(luò)報表的取數(shù)裝置,其特征在于,還包括分級單元,在存在多個所述分組條件的情況下,建立分組的級別,則所述第三中間表中的每行數(shù)據(jù)屬于多個級別的分組;以及所述數(shù)值范圍確定單元還用于分別獲取每個最高級別分組中的最大依賴數(shù)值和最小依賴數(shù)值,并將所述最大依賴數(shù)值與所述最小依賴數(shù)值之間的所有依賴數(shù)值作為所述數(shù)值范圍。
6.一種基于網(wǎng)絡(luò)報表的取數(shù)方法,其特征在于,包括步驟202,網(wǎng)絡(luò)服務(wù)器接收來自瀏覽器的報表查詢請求,所述報表查詢請求包括查詢條件、排序條件及分組條件;步驟204,所述網(wǎng)絡(luò)服務(wù)器根據(jù)所述查詢條件,從數(shù)據(jù)庫中獲取對應(yīng)的報表數(shù)據(jù); 步驟206,在所述網(wǎng)絡(luò)服務(wù)器建立第一中間表,將所述報表數(shù)據(jù)導入所述第一中間表; 步驟208,在所述第一中間表中添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第一序號列;步驟210,建立第二中間表,按照所述排序條件將所述第一中間表中的報表數(shù)據(jù)進行排序后,導入所述第二中間表;步驟212,為所述第二中間表添加對應(yīng)于其中每行報表數(shù)據(jù)的自增長的第二序號列; 步驟214,建立第三中間表,按照所述分組條件將所述第二中間表中的報表數(shù)據(jù)進行分組后,導入所述第三中間表;步驟216,獲取所述第三中間表中的每行數(shù)據(jù)對應(yīng)于所述第二序號列中的關(guān)聯(lián)序號,并將所述關(guān)聯(lián)序號的數(shù)值作為依賴數(shù)值;步驟218,獲取每組數(shù)據(jù)中的最大依賴數(shù)值和最小依賴數(shù)值,并按照所述依賴數(shù)值、所述第二序號列及所述第一序號列之間的對應(yīng)關(guān)系,將所述最大依賴數(shù)值與所述最小依賴數(shù)值之間的所有依賴數(shù)值在所述報表數(shù)據(jù)中對應(yīng)的數(shù)據(jù)輸出至所述瀏覽器。
7.根據(jù)權(quán)利要求6所述的基于網(wǎng)絡(luò)報表的取數(shù)方法,其特征在于,在所述步驟206中, 還包括根據(jù)所述報表數(shù)據(jù)及其對應(yīng)的項目,為所述第一中間表建立索引。
8.根據(jù)權(quán)利要求7所述的基于網(wǎng)絡(luò)報表的取數(shù)方法,其特征在于,還包括 在所述第二中間表和所述第三中間表中使用所述索引。
9.根據(jù)權(quán)利要求6至8中任一項所述的基于網(wǎng)絡(luò)報表的取數(shù)方法,其特征在于,在所述步驟204中,包括將所述報表數(shù)據(jù)存儲在所述網(wǎng)絡(luò)服務(wù)器的內(nèi)存中;以及在所述步驟218中,還包括刪除存儲在所述網(wǎng)絡(luò)服務(wù)器的所述內(nèi)存中的數(shù)據(jù)。
10.根據(jù)權(quán)利要求6至8中任一項所述的基于網(wǎng)絡(luò)報表的取數(shù)方法,其特征在于,在所述步驟218中,還包括若存在多個所述分組條件,則所述第三中間表中的每行數(shù)據(jù)屬于多個級別的分組,分別獲取每個最高級別分組中的最大依賴數(shù)值和最小依賴數(shù)值,并分別獲取對應(yīng)的報表數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種基于網(wǎng)絡(luò)報表的取數(shù)裝置和方法,該裝置包括請求發(fā)送單元,將報表查詢請求發(fā)送至網(wǎng)絡(luò)服務(wù)器;數(shù)據(jù)獲取單元,獲取報表數(shù)據(jù);報表創(chuàng)建單元,建立第一中間表、第二中間表和第三中間表;數(shù)據(jù)導入單元,將對應(yīng)的報表數(shù)據(jù)導入第一中間表、第二中間表、第三中間表;序號添加單元,在第一中間表中添加第一序號列,為第二中間表添加第二序號列;排序單元,將第一中間表中的報表數(shù)據(jù)進行排序;分組單元,將第二中間表中的報表數(shù)據(jù)進行分組;依賴數(shù)值確定單元,確定依賴數(shù)值;數(shù)值范圍確定單元,確定數(shù)值范圍;數(shù)據(jù)輸出單元,將報表數(shù)據(jù)中的相應(yīng)數(shù)據(jù)輸出至瀏覽器。通過本發(fā)明的技術(shù)方案,可以準確獲取部分數(shù)據(jù),避免服務(wù)器緩存不足。
文檔編號G06F17/30GK102521413SQ201110448080
公開日2012年6月27日 申請日期2011年12月28日 優(yōu)先權(quán)日2011年12月28日
發(fā)明者樊進忠 申請人:暢捷通信息技術(shù)股份有限公司