一種基于web報表定義模板計算的方法
【技術領域】
[0001]一種基于WEB報表定義模板計算的方法主要是用于計算程序報表定義領域。
【背景技術】
[0002]報表作為一種信息組織和分析的有利手段,是企業(yè)信息系統(tǒng)的重要組成部分之一.據(jù)不完全統(tǒng)計,系統(tǒng)實際應用的6o%以上與報表有關[I].但是一般的軟件開發(fā)語言都不帶報表制作工具,要開發(fā)報表模塊需要程序員編寫大量的代碼,這些代碼可重用性差、后期維護復雜.所以,企業(yè)一般都借助于第三方的專業(yè)報表工具來制作報表.但是,目前的報表工具存在專業(yè)性不強3、安全性不高、用戶操作復雜和設計復雜報表時效率低下等問題.針對目前專業(yè)報表工具中存在的問題,我們介紹了一種語義層報表模型,在報表設計器和企業(yè)數(shù)據(jù)源之間建立語義層,來解決這些問題。
[0003]利用傳統(tǒng)的報表工具設計報表時,用戶直接操作數(shù)據(jù)源,一方面用戶需要學習數(shù)據(jù)源的專業(yè)知識,編寫復雜的表達式,書寫復雜的SQL語句;另一方面直接操作企業(yè)數(shù)據(jù),給企業(yè)的數(shù)據(jù)信息帶來了安全隱患.本文介紹了一種語義層報表模型,在報表設計器和企業(yè)數(shù)據(jù)源之間建立語義層,在語義層中定義數(shù)據(jù)模型,用戶在報表設計器中基于語義層設計報表,直接拖拽語義層元素即可,極大的減少了用戶制作報表時的工作量;雖然增加了語義層,但并沒有降低整個報表模型的計算效率,因為用戶在拖拽語義層元素設計報表時,系統(tǒng)自動的把語義元素解析成報表引擎可以識別的標簽,所以報表計算時不需要訪問語義層數(shù)據(jù)模型XML文件;通過在數(shù)據(jù)模型上定義過濾條件,對企業(yè)數(shù)據(jù)進行權限控制,增強了企業(yè)信息的安全性;語義層數(shù)據(jù)模型可以在視圖上定義視圖間的關聯(lián)關系,也可以在視圖字段上定義視圖間的關聯(lián)關系,后者在計算報表時,一個單元格上綁定多個指針,指向關聯(lián)視圖,不需要視圖間的連接,不需要多次重復檢索關聯(lián)視圖就可以設計出多源報表,極大的提高了復雜報表的計算速度。
【發(fā)明內容】
[0004]我們通過國家專利檢索沒有發(fā)現(xiàn)關于此系統(tǒng)方面的資料。一種基于WEB報表定義模板計算的方法是方法如下:
1.首先定義一個函數(shù)其語法為:public IReport calcReport (ReportDefine r,Context con)
定義過程序:
public IReport calcReport(ReportDefine r, Context con)
{獲取r中定義的數(shù)據(jù)集列表;
根據(jù)報表運行上下文con到數(shù)據(jù)源中檢索出每一個數(shù)據(jù)集對應的數(shù)據(jù);
獲取r的一個未計算格,令P —這個未計算格; while (P不為空){ if(P不是擴展格){
計算P表達式的值;
把計算的結果賦給P.value ;
把P的狀態(tài)置為已計算;
}else {
調用擴展格計算算法cellExp ;
獲取r的一個未計算格,令P —這個未計算格;
}}}
2.定義擴展格計算函數(shù),其語法:public void cellExp (IReport ir,M ap dateM ap,Cell c)。
[0005] 定義過程:
public void cellExp (IReport ir,M ap dateM ap,Cell c)
{計算c的取值表達式,設計算結果為(。,,…,
);for (int 一 I ; < 一 ; + +){
令 Value=Vi ;
把c的狀態(tài)置為已計算;
把指向所在記錄的打集指針保存到c中;
獲取C的后跟格,令一 c的后跟格; while (m不為空){ if (m為擴展格){
遞歸調用擴展格計算算法cellExp ;
}else {
if(m與c來自同一個數(shù)據(jù)集){
從c保存的行集指針指向的記錄中取出/ 7〃 /表達式的值賦給.value ;
把的狀態(tài)置為已計算;
}else{以報表中定義的兩個數(shù)據(jù)集的關聯(lián)關系為過濾條件到m來自的數(shù)據(jù)集中檢索m表達式的值賦給value ;把的狀態(tài)置為已計算;} if(m有后跟格){
獲取m的后跟格,令m= m的后跟格;
}else {break ;
}}}
對c所在的行執(zhí)行I次行復制算法;令c一c對應的復制格;}}
假設每個數(shù)據(jù)集中有條記錄,報表定義模板中有列,對類似于表I所示的報表定義模板進
行計算的時間復雜度為O (η * )。表I中Β2和D2單元格表達式中的字段都來自于student數(shù)據(jù)集,而利用以上算法進行計算時我們發(fā)現(xiàn)在cellExp函數(shù)中兩次重復的以關聯(lián)規(guī)則為過濾條件去檢索name和grade字段的值。
[0006] 現(xiàn)實現(xiàn)如下:
如果把學生(student)和成績(score)之間的關聯(lián)關系定義在成績視圖的學生ID字段上,那么報
表進行運算 public void cellExp (IReport ir, Map dateM ap, Cell c)
{
計算C的取值表達式,設計算結果為(V1 ,V2 ,; for(int i 一 I ; < 一 ;i+ +) {
令 C.Value=Vi ;
把c的狀態(tài)置為已計算;
把指向所在記錄的打集指針保存到c中;
if(f包含關聯(lián)規(guī)則){以數(shù)據(jù)集間的關聯(lián)關系為過濾條件到關聯(lián)數(shù)據(jù)集中檢索與C值對應的記錄,把指向該
記錄的行集指針保存到C中,C中可能包含多個關聯(lián)規(guī)則,行集指針采用Map結構進行保存;}
獲取C的后跟格,令m— C的后跟格; while (m不為空){ if(m為擴展格){遞歸調用擴展格計算算法cellExp ;
}else {
從C保存的行集指針指向的記錄中取出m表達式的值賦給m.valuejEm的狀態(tài)置為已計算;
if (m有后跟格){獲取m的后跟格,令m=m的后跟格;
} else { break ;}}}
對C所在的行執(zhí)行I次行復制算法;
令C=C對應的復制格;}}
定義在字段上的關聯(lián)關系在主擴展格中保留多個行集指針,分別指向相關聯(lián)的數(shù)據(jù)集,不需要重復遍歷關聯(lián)數(shù)據(jù)集就可以獲得需要的數(shù)據(jù).假設每個數(shù)據(jù)集中有條記錄,報表定義模板中有m列,通常情況下民n >m,對類似于表I所示的報表定義模板進行計算的時間復雜度為0(n2).對比以上兩種建立視圖問關聯(lián)關系的方法,如果m比較大或報表定義模板中包含嵌套的擴展格,那么定義在字段上的關聯(lián)關系在計算效率上的優(yōu)勢就非常明顯了。模型中對以上兩種方法都提供了支持。建在字段上的關聯(lián)關系只對該字段起作用,建在視圖上的關聯(lián)關系對視圖中所有字段都起作用,在我們無法確定把關系建在哪個字段上時,就把它建在視圖上.字段上的關聯(lián)關系優(yōu)先級高于視圖上的關聯(lián)關系。
【主權項】
1.一種基于WEB報表定義模板計算的方法其特征是報表定義模板類對象,假設其對象模塊定義為@R。
2.根據(jù)權利要求1的定義,其必須要定義報表運行上下文,為報表提供數(shù)據(jù)來源,其定義為@con。
3.根據(jù)權利要求2的定義,其必須要返回計算后的報表,IR印ort是報表接口,ReportDefine實現(xiàn)了這個接口,其返回值定義為OReturn。
4.根據(jù)權利要求3的定義其需要進行擴展格計算其必須定義中間計算報表@ir,報表定義數(shù)據(jù)集列表OdateMap,要計算的單元格@c。
【專利摘要】一種基于WEB報表定義模板計算的方法是基于語義層設計報表,只需簡單地拖拽語義層元素即可,不需要編寫復雜表達式和復雜SQL.語義層的加入不僅給用戶的操作帶來了極大的方便,而且增強了企業(yè)數(shù)據(jù)的安全性。
【IPC分類】G06F9-44
【公開號】CN104572049
【申請?zhí)枴緾N201310489866
【發(fā)明人】不公告發(fā)明人
【申請人】鎮(zhèn)江鼎拓科技信息有限公司
【公開日】2015年4月29日
【申請日】2013年10月18日