在做報(bào)表時(shí)谢谦,數(shù)據(jù)量少的情況下释牺,不明顯,但數(shù)據(jù)量過大的情況下回挽,可能就會(huì)出現(xiàn)預(yù)覽數(shù)據(jù)緩慢等情況没咙,這時(shí)我們可以設(shè)計(jì)報(bào)表時(shí),進(jìn)行一些優(yōu)化千劈。
1.優(yōu)化報(bào)表運(yùn)算時(shí)間镜撩,皕杰報(bào)表的brt文件在服務(wù)端是由servlet解析的,其報(bào)表生成的運(yùn)算順序是:變量參數(shù)運(yùn)算-->數(shù)據(jù)集取數(shù)及運(yùn)算-->報(bào)表運(yùn)算及擴(kuò)展... ... 队塘,前面的步驟未走完袁梗,是不會(huì)往下進(jìn)行運(yùn)算的。對各個(gè)步驟檢查優(yōu)化憔古,去掉不必要的東西遮怜,盡量減少隱藏行列,單元格合并等等鸿市。
2. sql與數(shù)據(jù)集函數(shù)
報(bào)表中锯梁,經(jīng)常會(huì)出現(xiàn)多個(gè)單元格的數(shù)據(jù)來自同一個(gè)數(shù)據(jù)表,但是取出的條件不一樣焰情,或者條件相同陌凳,取出的字段或表達(dá)式不一樣等等,如果你細(xì)心研究内舟,會(huì)發(fā)現(xiàn)這些單元格的數(shù)據(jù)完全可以通過一個(gè)sql取出來合敦,然后再通過數(shù)據(jù)集的函數(shù)算出每個(gè)單元格的值。
如果將多個(gè)sql合并以后验游,取出的數(shù)據(jù)量并沒有增大非常多充岛,那么我們建議您盡量將sql合并,充分利用數(shù)據(jù)集函數(shù)中的條件表達(dá)式來算每個(gè)單元格的值耕蝉;
如果sql合并后崔梗,取出的數(shù)據(jù)量增大了非常多,那么我們建議您盡量將sql拆開垒在,減少傳輸?shù)臄?shù)據(jù)量蒜魄。
這兩者是一個(gè)權(quán)衡的關(guān)系,sql多的時(shí)候场躯,系統(tǒng)訪問數(shù)據(jù)庫的次數(shù)多了谈为,導(dǎo)致效率低;反之推盛,sql少了峦阁,可如果傳輸?shù)臄?shù)據(jù)量變的非常大,同樣會(huì)導(dǎo)致效率非常低耘成。所以需要用戶根據(jù)實(shí)際情況權(quán)衡利弊榔昔。
注意:
盡量在sql里進(jìn)行g(shù)roup
盡量不用select * from
盡量在sql里排序
盡量在sql里過濾
3. 盡量的使用擴(kuò)展驹闰,這樣既高校,又不容易出錯(cuò)撒会。
4.設(shè)置數(shù)據(jù)類型時(shí)嘹朗,精度相對即可,精度不用最高也可以诵肛,一般來說精度越高運(yùn)算效率越慢屹培。
5.靈活運(yùn)用多數(shù)據(jù)集
有的時(shí)候在做報(bào)表設(shè)計(jì)的時(shí)候,用單數(shù)據(jù)集和多數(shù)據(jù)集都能實(shí)現(xiàn)一個(gè)報(bào)表的功能怔檩,那么在何種情況下應(yīng)該用單數(shù)據(jù)集褪秀?何種情況下用多個(gè)數(shù)據(jù)集呢?這里有以下2個(gè)原則:
網(wǎng)格式薛训、分組式媒吗、交叉式盡量用單數(shù)據(jù)集
分片式、多源報(bào)表盡量用多數(shù)據(jù)集