日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何在报表中实现算法的可挂接需求

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在报表中实现算法的可挂接需求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在報表項目中,有些報表中部分數據的計算方法會經常改變。例如:某企業員工的實際工資是通過績效得分計算出的,而績效的算法可能經常變動,需要在不改動其他代碼的情況下用新算法替換舊算法。一般我們都會想到用 Java 來實現計算,從而實現動態可掛接計算模塊,但是這種方式可能存在缺乏基礎類庫、占用多余內存等問題。

這里我們介紹一種可以實現低耦合、熱部署的動態掛接算法,使得解決此類問題更具結構性優勢,這就是結合集算器使用潤乾報表。下圖對比了潤乾報表實現的可掛接算法和其他報表工具 +java 實現可掛接算法的在系統結構上的差異:

可以看出,java 程序必須要編譯、打包才能更新,無法實現熱部署。而集算腳本是解釋執行的,腳本文件同時也是可執行文件,所以可以直接進行替換更新。同時,集算腳本可以和報表模板成對存放,在代碼管理上更為清晰、便利。

下面就用員工績效工資的例子來說明潤乾報表的實現方法,并和其他報表工具 +Java 的實現方式做一下比較。

員工績效工資報表如下:

報表格式比較簡單,但是計算方法相對復雜,而且經常變動,算法部分需要動態掛接才能滿足需求。

具體實現步驟如下:

1、編寫集算器腳本

?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
?ABC
1=connect("demo")??
2=A1.query("select p.EMPLOYEEID as empID, p.EVALUATION as score,e.dept as dept, e.NAME as empName,p.BONUS as baseSalary ?from performance as p,employee as e where p.EMPLOYEEID=e.EID ?and e.gender=?",gender)
3=A2.derive(PRETAX)??
4=sales=A3.select(DEPT=="Sales")?
5for salesif A5.BASESALARY<2000>A5.PRETAX=A5.BASESALARY*(1+A5.SCORE/100)
6?else if A5.BASESALARY<4000>A5.PRETAX=A5.BASESALARY*(1+A5.SCORE*0.9/100)
7?else if A5.BASESALARY<6000>A5.PRETAX=A5.BASESALARY*(1+A5.SCORE*0.8/100)
8?else>A5.PRETAX=A5.BASESALARY*(1+A5.SCORE*0.6/100)
9=normal=A3.select(DEPT!="Sales")?
10=A9.run(PRETAX=BASESALARY)?
11=sales|normal??
12=A11.new(EMPNAME,BASESALARY,PRETAX)>A1.close()
13result A12??

A2 單元格有個輸入參數 gender,來自于查詢頁面。A13 單元格是將結果返回給報表頁面。A2 到 A12 之間是績效工資的計算方法,具體算法不是本文重點,這里不詳細介紹,只要知道這部分可以隨時替換就可以了。

2、配置報表數據集

潤乾報表的報表模板可以定義集算器數據集來調用可掛接計算模塊:

其中,gender 參數是 dynamic.dfx 的輸入參數,數據集 ds1 接收 dynamic.dfx 返回的結果集。

可以看到集算器腳本 dynamic.dfx 和報表模板之間的耦合程度非常低。如果要改變績效工資的計算方法,只需要編寫一個新的 dynamic.dfx,替換服務器上原有的 dfx 文件即可。因為 dfx 腳本是解釋執行的,所以可以不停機替換,實現真正的熱部署。

3、設計報表模板

在潤乾報表設計器中像使用普通數據集一樣設計報表模板即可。如下圖所示:

從這個例子可以看出潤乾報表實現的可掛接算法,相比普通報表工具 +Java 的實現方式有多方面的優勢。

1、dynamic.dfx 可以使用潤乾報表提供的多種函數方法:分組、匯總、排序、過濾、關聯、唯一值、交集、排名等等。Java 程序員必須手工編寫這些基礎算法。而將這些基礎算法直接實現在業務邏輯中顯然是不合理的,因為這會導致每個計算模塊重復書寫類似的代碼,使得計算模塊過于龐大、可讀性變差。理想的作法是先實現一套基礎算法類庫,再在計算模塊中調用,而應用程序員很難設計出完備性和系統性優秀的基礎算法類庫,因此常常使代碼的耦合性高,穩定性差,最終導致計算模塊維護困難。

潤乾報表的集算引擎本身就是這樣一套精心設計的完備基礎類庫,經過簡單的學習,應用程序員只需要 JAVA 十分之一的代碼量就可以實現同樣功能的計算模塊,開發效率更高。

2、JAVA 代碼需要重新編譯,部署起來比較麻煩;當可掛接的計算模塊較多時,不論是否還要使用它們,這些 Java class/jar 都會占據內存空間而無法釋放,對性能有一定的影響。

潤乾報表的集算器引擎和腳本文件是分開的,耦合性很低,維護起來更加方便。另外,集算腳本無需編譯即可使用,是真正的熱部署。腳本程序不會事先加載到內存,而是使用時再加載,計算完立刻釋放,不會長期占用內存。

轉載于:https://www.cnblogs.com/IBelieve002/p/10918067.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的如何在报表中实现算法的可挂接需求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。