润乾报表实现可反复分组报表及改进
可反復分組報表是報表開發中比較常見和麻煩的任務。可反復分組報表是指同一記錄出如今不同的分組中被反復統計,常見的可反復分組報表有兩類:一類是分組區間有交集。如:統計年齡段在20-30歲、25-35歲、30-40歲之間的用戶數量;另外一類是分組區間有包括關系,如:統計各地區以及該地區主要城市的匯總數據,“華北,當中北京;華東。當中上海……”。
以下通過兩個實例來看一下潤乾報表的實現過程。
實例一
依據員工基本信息表按年齡統計各年齡段區間的人數、獎金等匯總情況。
報表樣式例如以下:
<img src="http://img.blog.csdn.net/20140818110439887?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
這里“30-40歲”和“35-45”歲兩個區間是有反復的。
實現
在潤乾報表中,該類報表主要通過ds.enumGroup()函數完畢,報表模板及表達式例如以下:
當中A2單元格表達式為:
=ds1.enumGroup(true,age(BIRTHDAY)>20&&age(BIRTHDAY)<=30,"20歲到30歲",age(BIRTHDAY)>30&&age(BIRTHDAY)<=40,"30歲到40歲",age(BIRTHDAY)>=35&&age(BIRTHDAY)<45,"35歲到45歲",age(BIRTHDAY)>=45,"45歲以上")
通過ds.enumGroup()能夠比較easy完畢上述報表,分組較少的情況尤其適用。當分組較多的時候,該表達式會由于過于復雜導致報表難于維護。
實例二
依據訂單表統計各省份訂單情況,要求列出某些主要城市(如青島、深圳、石家莊)的訂單情況。報表樣式例如以下:
實現
潤乾報表實現該類報表主要使用ds.overlap()函數,報表模板及表達式例如以下:
當中。A2單元格表達式為:
=ds1.overlap(true,省份=="上海","上海",省份=="北京","北京",省份=="四川","四川",省份=="天津","天津",省份=="山東","山東",城市=="青島","
當中:青島",省份=="廣東","廣東",城市=="深圳","
當中:深圳",省份=="江蘇","江蘇",省份=="江西","江西",省份=="河北","河北",城市=="石家莊","
當中:石家莊",省份=="海南","海南",省份=="福建","福建",省份=="遼寧","遼寧",省份=="重慶","重慶",省份=="陜西","陜西")
與實例一中一樣,ds.overlap()對分組較少的情況尤其適用。當分組較多的時候,表達式過于復雜將導致報表難于維護。
潤乾報表能夠實現上述兩類可反復分組報表,在分組較少的時候做起來尤其簡單。這也是其它報表工具無法比擬潤乾報表的方面。但當分組較多,計算比較復雜的情況下。潤乾報表實現起來就比較困難了。原因在于報表的數據源準備和呈現混在一起導致的。往往須要在報表模板中實現大量的計算任務,假設將這兩部分分開,即:獨立的計算層負責數據源準備(完畢復雜計算)和獨立的展現層負責報表呈現,則會使報表開發變得更加清晰。
潤乾公司基于潤乾報表內核推出的改進產品集算報表5.0版,當中內置了獨立的計算引擎:集算器,用于解決數據源準備問題。
在集算報表中能夠將復雜的數據計算(數據源準備)工作交由集算器完畢。可將其視為報表的計算層;而報表本身僅僅負責接收計算后結果進行報表展現(有時包含一些簡單計算)。從而將數據源準備和報表呈現分開。使得報表制作更為清晰。
對于上述報表,通過集算報表能夠這樣實現并解決當中的難點:
實例一
編寫集算腳本
首先使用集算器編寫集算器腳本,完畢分組匯總,為報表準備數據源:
<img src="http://img.blog.csdn.net/20140818110459325?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
A1查詢員工表數據,因為該表僅僅有出生日期,故在A2中添加并計算年齡字段;A3、A4指定年齡段區間及其區間名稱,在A5中進行可反復枚舉分組。并在A6中計算分組匯總值,最后A7將結果集返回給報表。
報表調用
使用集算報表設計器,新建報表。使用“集算器”數據集類型,選擇上面編輯好的集算腳本(age.dfx):
設置報表模板及表達式
<img src="http://img.blog.csdn.net/20140818110505281?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
報表中僅僅簡單的列表取值就可以,無需再完畢復雜計算。
這里能夠看到,在集算報表中將數據準備(集算腳本)和報表呈現(報表模板)分開帶來的優點。在計算層通過集算器完備的計算體系完畢數據源準備的工作。
實例二
A1從訂單表讀取數據;
A2-B4列出主要城市與省份的相應列表。
A6依照省份分組匯總;
A7、A8按指定城市對位分組后匯總。
最后通過A9將城市數據插入A6按省匯總的結果中。
報表調用
使用集算報表設計器,新建報表,使用“集算器”數據集類型,選擇上面編輯好的集算腳本(age.dfx)
設置報表模板及表達式
通過上述兩個實例。就潤乾報表和集算報表實現方式的差別。能夠看到:
1、集算報表因為將計算層和展現層分離,報表開發更為清晰,復雜計算任務均在集算器中完畢。報表本身僅僅負責數據展現(報表模板中僅僅編寫簡單的表達式就可以);
2、集算器具備完備的計算體系,擁有豐富的函數庫,如實例中用到的P.enum()進行枚舉分組和P.align()完畢對齊分組。而前者又有3種函數選項,后者則有6種函數選項。如此豐富的函數庫,使得差點兒全部的復雜運算(數據源準備工作)都能夠在集算器中完畢;
3、除了豐富的函數,集算器採用分步的編碼方式。不管多么復雜的計算邏輯都能夠在集算器中逐步實現,從而攻克了在潤乾報表中僅僅能寫在一個表達式中帶來的編寫和維護難題。
總結
以上是生活随笔為你收集整理的润乾报表实现可反复分组报表及改进的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言怎么让写的函数兼容int型和cha
- 下一篇: 华硕发布 ROG STRIX XG49W