實(shí)際系統(tǒng)由于歷史設(shè)計(jì)的緣由,業(yè)務(wù)數(shù)據(jù)有時(shí)沒法直接滿足報(bào)表需求,從而需要在報(bào)表中補(bǔ)足數(shù)據(jù),以滿足報(bào)表展現(xiàn)需要。像http://bbs.csdn.net/topics/100074605中提到的問題,就是1個(gè)比較典型的此類需求。
這類問題使用SQL或存儲進(jìn)程常常復(fù)雜度太高,如帖子中貼出的答案;而使用1般報(bào)表工具則需要不斷地重復(fù)遍歷進(jìn)行數(shù)據(jù)關(guān)聯(lián),還要借助隱藏格和做大量的條件判斷才能完成,實(shí)現(xiàn)難度和報(bào)表性能都不理想。
潤乾集算報(bào)表則在完成這類報(bào)表時(shí)則比較簡單,這里以上述鏈接中的實(shí)際業(yè)務(wù)為例,給出集算報(bào)表的實(shí)現(xiàn)方案。
源數(shù)據(jù)以下:
現(xiàn)需要在報(bào)表中顯示以下內(nèi)容:
這里需要將源數(shù)據(jù)中沒有的日期補(bǔ)齊,并設(shè)置CLICKS值為0。
這個(gè)報(bào)表的難點(diǎn)在于用SQL或存儲進(jìn)程寫起來很困難,而1般報(bào)表工具則不具有數(shù)據(jù)源計(jì)算能力,實(shí)現(xiàn)上也很困難。像潤乾報(bào)表這樣比較優(yōu)秀的報(bào)表工具在實(shí)現(xiàn)上會(huì)是這樣:
潤乾報(bào)表在實(shí)現(xiàn)時(shí),需要借助隱藏行(第1行)和隱藏列(A、B),還要使用ds1.select(SID,,DATE==B3)不斷循環(huán)數(shù)據(jù)集尋覓匹配記錄,最后通過量個(gè)單元格的顯示值表達(dá)式控制顯示效果,報(bào)表復(fù)雜度較高且性能較差,對其他報(bào)表工具將更加困難。
如果事前把數(shù)據(jù)計(jì)算準(zhǔn)備好,報(bào)表工具只需要負(fù)責(zé)顯現(xiàn)和簡單計(jì)算,進(jìn)程就會(huì)更輕松。但不管是使用復(fù)雜SQL、存儲進(jìn)程和自定義JAVA數(shù)據(jù)集編程,對這樣的復(fù)雜運(yùn)算(實(shí)際情況常常比這個(gè)例子更麻煩很多)都是1件工作量很大的事情,而且難以保護(hù)。
集算報(bào)表本身內(nèi)置了合適結(jié)構(gòu)化計(jì)算的腳本,可以方便地寫出數(shù)據(jù)準(zhǔn)備的計(jì)算(相當(dāng)于1種更使用更簡單的自定義數(shù)據(jù)集)。上述報(bào)表需求使用集算報(bào)表可以這樣完成:
首先使用集算腳本編輯器,新建集算腳本,設(shè)置腳本參數(shù):起始日期和結(jié)束日期
編寫腳本完成數(shù)據(jù)補(bǔ)齊操作,為報(bào)表輸出計(jì)算后結(jié)果集。
A1:讀取明細(xì)數(shù)據(jù),這里將數(shù)據(jù)存儲在TXT中,也能夠存儲在數(shù)據(jù)庫;
A2-A3:取SID和SNAME值,用于數(shù)據(jù)補(bǔ)齊時(shí)填充字段值;
A4:獲得開始到結(jié)束日期所有日期集合;
A5:與明細(xì)數(shù)據(jù)中的日期集合做交集,得到需要補(bǔ)齊的日期集合。
A6-B6:循環(huán)A5得到的日期集合,將生成的記錄插入A1集合中,補(bǔ)齊數(shù)據(jù)。
A7:依照起止日期從A1集合中取出符合條件的記錄,并按日期排序。
A8:為報(bào)表返回結(jié)果集。
使用集算報(bào)表編輯器,編輯報(bào)表模板,用于數(shù)據(jù)展現(xiàn)。首先新建參數(shù),并設(shè)置默許值。
新建報(bào)表并設(shè)置集算器數(shù)據(jù)集,調(diào)用上述編輯好的腳本文件。
其中,dfx文件路徑既可以是絕對路徑,也能夠是相對路徑,相對路徑是相對選項(xiàng)中配置的dfx主目錄的;參數(shù)b_date和e_date為報(bào)表模板參數(shù),begin和end為腳本參數(shù),事實(shí)上2者可以同名。
編輯報(bào)表表達(dá)式,直接使用集算腳本返回的結(jié)果集,完成報(bào)表制作,不再需要使用隱藏行列和顯示值判斷表達(dá)式。
報(bào)表展現(xiàn)結(jié)果以下:
可以看到,使用集算器腳本可以快速完為報(bào)表補(bǔ)齊數(shù)據(jù)。而且外置的集算腳本具有可視化的編輯調(diào)試環(huán)境,編輯好的腳本還可以復(fù)用(被其他報(bào)表或程序調(diào)用)。不過,如果腳本已調(diào)試好,而且不需要復(fù)用的時(shí)候,要保護(hù)兩個(gè)文件(集算腳本和報(bào)表模板)的1致性會(huì)比較麻煩,這時(shí)候候直接使用集算報(bào)表的腳本數(shù)據(jù)集就比較簡單了。
在腳本數(shù)據(jù)集中可以分步編寫腳本完成計(jì)算任務(wù),語法與集算器1致,還可以直接使用報(bào)表定義好的數(shù)據(jù)源和參數(shù)。
1.在數(shù)據(jù)集設(shè)置窗口中點(diǎn)擊“增加”按鈕,彈出數(shù)據(jù)集類型對話框,選擇“腳本數(shù)據(jù)集”;
2.在彈出的腳本數(shù)據(jù)集編輯窗口中編寫腳本;
這里可以看到,在腳本數(shù)據(jù)集中直接使用了報(bào)表中定義好參數(shù)b_date和e_date,比起單獨(dú)的集算腳本更加簡單、直接。
3. 報(bào)表模板和表達(dá)式與使用集算器數(shù)據(jù)集方式1致,不再贅述。