BIRT 中根據引數實現動態日期分組

xiaohuihui發表於2020-06-16

BIRT一般擅長處理規則一致的資料,若條件不一致的動態運算在報表中是很難實現的。常規辦法是建立scripted data sources, 在該指令碼源上自行處理業務邏輯把資料準備好,然後直接傳給BIRT展現。但SQL或scripted data sources的方式,程式碼寫起來非常麻煩,而且工作量很大。

比如要處理這麼個場景:按照開始日期、結束日期統計一段時間內訂單,但要根據起止日期的跨度長短實現按天、按周、按月、按年動態分組顯示結果。查詢流程如下圖所示:

BIRT 中根據引數實現動態日期分組

建議使用集算器,其豐富的集合運算可以方便地完成這類計算和邏輯判斷,比Java寫的程式碼要短,比儲存過程寫起來更簡單,比如類似的計算在集算器裡可以這樣寫:


A

B

1

=[]


2

=demo.query@x("select ORDERID,ORDERDATE,ORDERAMOUNT from ORDERS where ORDERDATE>=? and ORDERDATE<=?",startDate,endDate)

3

=interval(startDate,endDate)


4

if A3>365

>A1=startDate|A3.(elapse@y(startDate,~))

5

else if A3>30

>A1=startDate|A3.(elapse@m(startDate,~))

6

else if A3>15

>A1=startDate|A3.(elapse(startDate,7*~))

7

else

>A1=startDate|A3.(elapse(startDate,~))

8

=A2.group(A1.pseg(ORDERDATE);~.count(ORDERID):TotalOrder,round(~.sum(ORDERAMOUNT),2):TotalOrderAmount,A1(#):BeginDate)

9

=A8.new(BeginDate:BeginDate,#2:TotalOrder,#3:TotalOrderAmount)

10

return A9

其中startDate,endDate為報表起止日期引數。其實還有很多類似的計算問題在BIRT中處理不太方便,但有集算器SPL的輔助卻很簡單,感興趣可以參考:

集算器提供了JDBC驅動,可以很方便的與BIRT等報表工具整合, 有使用和獲得它的方法。

關於集算器安裝使用、獲得免費授權和相關技術資料,可以參見 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2698642/,如需轉載,請註明出處,否則將追究法律責任。

相關文章