報表開發中經常會遇到需要進行組內排序的報表,如按月份的分組彙總值排序顯示,並顯示每月銷售額前十名的記錄。使用報表工具一般通過隱藏行列輔助可以實現,下面通過例項說明潤幹報表的實現過程,以及改進方案。
報表需求
根據銷售管理系統資料統計客戶所在地區的訂單總額,地區並按訂單總額降序排列,要求每個地區中顯示銷售額在前五名的銷售人員及其訂單數量和訂單金額,其他人員歸入「其他」項中。報表樣式如下:
這裡應該注意的是地區分組中如果銷售人數少於5個則不顯示「其他」項(如上圖中的西北地區)。
潤幹報表實現
潤幹報表實現主要依靠條件隱藏行實現,根據分組成員數量是否顯示「其他」項,報表模板及表示式如下:
在潤幹報表中,使用ds.group()的多個引數,結合條件判斷隱藏行,多種使用方法結合完成了報表開發,可見潤幹報表的強大之處。
但是由於要按照分組後彙總的訂單金額排序,所以在b3的分組表示式中應用ds1.sum(訂單金額)表示式作為ds.group()的引數,對於原始資料量較大的情況下,該表示式效率較低;而且,由於只顯示前5名銷售,在c3(排名)和d3(其他)中設定了隱藏行表示式,對於分組較多的情況仍然會存在效能問題;另外需要在e3和f3中使用格集過濾表示式計算其他銷售人員合計,計算時要帶著單元格屬性計算,效率仍然不高。
上述提到的問題在傳統報表工具中皆是存在的,原因在於資料計算(報表資料來源準備)與報表呈現混在一起導致,開發人員不得不再報表中編寫較複雜的計算邏輯以完成報表開發,造成報表開發和執行效率都不高。如果能將兩部分分開,勢必能提公升開發和執行效率。
潤幹公司在潤幹報表的基礎上,推出了可以完全滿足複雜報表開發的集算報表,其內建了用於完成報表資料計算(資料來源準備)的集算器,從而將資料計算和報表呈現剝離開,進一步梳理了報表開發流程,使得報表開發變得更加清晰。
上述報表需求使用集算報表可以這樣完成:
集算報表實現
編寫集算指令碼
a1:執行sql得到初步彙總訂單資料
a2:按照地區分組後組內成員按訂單金額排序
a3-c7:迴圈a3,取前五名記錄,並將超過第五的記錄都歸入「其他」項,結果寫回a3
a8:結果按地區總額降序排列後返回給報表
報表呼叫
使用集算報表設計器,新建報表,使用「集算器」資料集型別,選擇上面編輯好的集算指令碼(sort.dfx)
報表模板及表示式
報表模板中根據集算指令碼返回的結果集,分別取得地區分組和銷售列表等資料,無需複雜表示式即完成報表開發。
由於集算器對集合運算(尤其是有序集合)的有效支援,使得取前5條記錄非常容易,直接通過序號取得相應成員。而且,在集算器中完成複雜計算時可以分步完成,通過分步的方式降低實現的複雜度,這點也是要優於一般報表工具的。
此外,由於集算報表將資料計算(計算層)和呈現(展現層)分離,集算指令碼在計算時由於不帶有任何報表展現屬性(與一般報表工具很大的差別),所以計算效率更高,將計算後結果交給報表模板進行展現,此時呈現端再無計算壓力,從而提公升報表執行效率。
潤幹報表做排名
潤幹報表能夠通過count sum 等函式實現對報表整合排序 下面介紹一下對報表重複排序以及不重複排序的方法 重複排序 如下圖設定,其中e2單元格內表示式為 count d2 0 1,表示統計所有比本格資料大的單元格的數目,然後加1校正即是排名 不重複排序,可以借助輔助列,對重複的資料進行處理。由於...
潤幹報表報錯
1,runqianreportlogger debug inputstream cannot be null 預設語義檔案導致潤幹報表web應用啟動報錯 潤幹報表預設的專案整合功能不太好使啊,還是把demo專案的web inf裡的內容拷過去,手動整合吧。cannot create poolablec...
潤幹報表 細節問題
填報表是無法分頁的 若是瀏覽表中無資料,則不用顯示刪除,修改,增加問題,檢視問題等按鈕的。這時,可以通過表示式來控制。例如 單元格 值表示式 if b3 null,修改 if b3 null,刪除 if b3 null,增加問題 if b3 null,檢視問題 合法性校驗 對落實情況 問題摘要 的字...