BIRT中如何根据参数实现动态日期分组,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
站在用户的角度思考问题,与客户深入沟通,找到华容网站设计与华容网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广、域名注册、雅安服务器托管、企业邮箱。业务覆盖华容地区。
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为报表起止日期参数。
集算器提供了JDBC驱动,可以很方便的与BIRT等报表工具集成, BIRT调用SPL脚本有使用和获得它的方法。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。