标签:startDate BIRT 算器 A1 日期 分组 ORDERDATE A3
BIRT一般擅长处理规则一致的数据,若条件不一致的动态运算在报表中是很难实现的。常规办法是创建scripted data sources, 在该脚本源上自行处理业务逻辑把数据准备好,然后直接传给BIRT展现。但SQL或scripted data sources的方式,代码写起来非常麻烦,而且工作量很大。
比如要处理这么个场景:按照开始日期、结束日期统计一段时间内订单,但要根据起止日期的跨度长短实现按天、按周、按月、按年动态分组显示结果。查询流程如下图所示:
建议使用集算器,其丰富的集合运算可以方便地完成这类计算和逻辑判断,比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的辅助却很简单,感兴趣可以参考:解决BIRT动态数据源的若干示例
集算器提供了JDBC驱动,可以很方便的与BIRT等报表工具集成,BIRT调用SPL脚本有使用和获得它的方法。
关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器。
标签:startDate,BIRT,算器,A1,日期,分组,ORDERDATE,A3 来源: https://www.cnblogs.com/xiaohuihui-11/p/13140332.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。