无数据源的规则报表的实现
2014-07-30 14:43
127 查看
某报表系统中有部分报表需要按照一定规则显示数据,如:显示查询日期范围内的奇数日数据,要求数据库中即使无记录该日期也显示(内容为空)。
![](http://img.blog.csdn.net/20140730144214386?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
本文重点来实现奇数日期序列,数据区不是重点,故置空。
以上述报表需求为例,本文介绍3种实现方法——报表工具直接实现、SQL辅助实现、集算器辅助实现。
![](http://img.blog.csdn.net/20140730144221313?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20140730144227677?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
使用时要对辅助列A列进行隐藏,以及对第2行进行条件隐藏,所以报表工具实现要依靠大量隐藏行列。
select D
from (select to_date('2013-11-10',
'yyyy-mm-dd') + C as D
from (selectrownum Cfrom dual
connectbyrownum<=5))
wheremod(to_number(to_char(D, 'yyyymmdd')),
2) = 1;
这个写法看起来并不长,但要用到多层子查询和oracle的层次查询语法(connect by),该语法只有oracle支持,换一种数据库就不能工作了。而且这种写法并不是很容易想出来,有相当的难度。
![](http://img.blog.csdn.net/20140730144238987?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
A1:列出起止日期段中的所有日期
A2:选出奇数日
A3:为报表返回结果集
这个算法和上述方法一致,但代码简单程度优越许多,同样适用跨年或跨月份的情形。这种分步书写代码(先列出所有日期,再过滤)也降低了实现难度。在脚本编辑器中随时可见的结果也为开发人员编辑调试代码提供了极大的方便。
本文重点来实现奇数日期序列,数据区不是重点,故置空。
以上述报表需求为例,本文介绍3种实现方法——报表工具直接实现、SQL辅助实现、集算器辅助实现。
报表工具直接实现
以润乾报表为例,考虑跨年和跨月份的情况:使用时要对辅助列A列进行隐藏,以及对第2行进行条件隐藏,所以报表工具实现要依靠大量隐藏行列。
SQL辅助实现
通过sql可否输出奇数日期呢?也有点麻烦,以oracle为例实现。select D
from (select to_date('2013-11-10',
'yyyy-mm-dd') + C as D
from (selectrownum Cfrom dual
connectbyrownum<=5))
wheremod(to_number(to_char(D, 'yyyymmdd')),
2) = 1;
这个写法看起来并不长,但要用到多层子查询和oracle的层次查询语法(connect by),该语法只有oracle支持,换一种数据库就不能工作了。而且这种写法并不是很容易想出来,有相当的难度。
集算器辅助实现
那么可以良好支持集合运算的集算器能否更简单些呢?来看具体实现。A1:列出起止日期段中的所有日期
A2:选出奇数日
A3:为报表返回结果集
这个算法和上述方法一致,但代码简单程度优越许多,同样适用跨年或跨月份的情形。这种分步书写代码(先列出所有日期,再过滤)也降低了实现难度。在脚本编辑器中随时可见的结果也为开发人员编辑调试代码提供了极大的方便。
相关文章推荐
- 集算器实现无数据源的规则报表
- 润乾报表实现无数据源的规则报表及改进
- 润乾报表实现无数据源的规则报表及改进
- C#中如何实现DataTable作为水晶报表的数据源?
- [转]VS2005下水晶报表实现动态数据源绑定
- 存储过程实现报表数据源的利弊分析
- VS2005下水晶报表如何实现动态数据源绑定?
- 无源规则报表的实现方式
- 用集算器实现动态数据源报表 推荐
- 集算器实现报表中零散的不规则计算
- java 接入水晶报表实现代码自定义数据源(新手接触水晶报表)
- VS2005下水晶报表如何实现动态数据源绑定?
- access数据库使用水晶报表(PUSH)推模式实现多数据源含子报表的订单打印
- DEVExpress XtraReport报表制作过程中绑定数据源的XRControl对象在值为0时不显示功能,通过代码自动实现
- 集算器替代存储过程实现报表数据源
- 一个crystal report水晶报表无法实现的多数据源计算
- [转]VS2005下水晶报表实现动态数据源绑定
- ireport+jasperreport开源报表中使用javabean作为数据源的详细实现过程
- 实现birt报表跨库数据源的简单办法
- 用集算器实现报表的外置存储过程数据源效果