BIRT 中組內跨行計算和小計怎麼做

xiaohuihui發表於2020-05-21

BIRT提供了簡單的計算列功能,可以在原始資料基礎上再計算出一些別的列值或統計值(規律性較強的表示式)。但由於模型採用控制元件拖拽式佈局(一般用列名命名設計階段的資料單元),沒有很好的運算後報表資料項命名機制,很難精確描述資料之間的引用關係,導致隨意的獨立格運算非常困難。

比如要處理這麼個場景:為了讓例子儘可能簡單,假設有3列資料,按id分組,資料格式如下:

BIRT 中組內跨行計算和小計怎麼做

期望展現的報表結果如下圖所示:

BIRT 中組內跨行計算和小計怎麼做

計算規則:

1、newcolumn=上一行v1 + V1 + 上一行v2 + v2 (上一行無資料則為0)

2、每組都有小計來彙總newcolumn

3、最後還需要總計

常見的解決辦法就是寫自定義資料集(複雜SQL或scripted data sources),把資料事先計算好後再塞入到報表格子中。但自定義資料集方式,程式碼非常麻煩,工作量大。

如果使用集算器則會簡單很多,其豐富的集合運算可以方便地完成這類計算,比scripted data sources程式碼要短,比SQL寫起來更簡單,比如類似的計算在集算器裡可以這樣寫:


A

B

1

=myDB.query@x("select *,0 as newcolumn from sample")

=create(id,v1,v2,newcolumn)

2

>A1.group(id).run(~.run(v1+v2+v1[-1]+v2[-1]:newcolumn))

3

for A1.group(id)

>B1.insert(0:A3,id,v1,v2,newcolumn)

4


>B1.insert(0,"","",A3.id+"SUBTOTAL:",A3.sum(newcolumn))

5

>B1.insert(0,"","","TOTAL:",A1.sum(newcolumn))


最後將計算結果返回給BIRT直接進行報表展現即可。其實還有很多類似的計算問題在BIRT中處理不太方便,但有集算器SPL的輔助卻很簡單,感興趣可以參考:

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

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

來源:https://forums.opentext.com/forums/discussion/57738/dealing-with-previous-rows-groups-sorts-and-subtotals

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

相關文章