webreport

博客园 首页 新随笔 联系 订阅 管理

最近做一个项目中碰到一个这样的问题:
业务数据保存的表如下:订单主表,订单明细表,订单备货表,订单到货表,结算金额表;(实际上还有一套历史记录表)

其中订单备货表就是订单明细表,用不同的字段表示备货信息,并且有一个备货日期字段。

现在要实现的是,按项目,按销售卖方企业,买方企业做维度来分组统计。需要得到的报表如下:


项目名称   订购金额  备货金额  到货金额  结算金额
项目A      10,000    8,000       8,000   7,000
......


查询条件为:  项目:______________  买方企业:____________ 卖方企业:___________

              日期:_______到_______
             

这看起来很容易实现,一般用户也很自然的会需要出这样的报表。

但是细看起来,不是很容易出这个报表,因为订购金额,备货金额,到货金额,结算金额这些关键的数据在不同的表中,查询条件日期关联的字段也是不一样的。

所以我的设计方案如下:
建立 按项目,买方企业,卖方企业,和日期(去掉时间)为维度的一个统计表,这个统计表中包含的字段有
项目
买方企业
卖方企业
日期
订购金额
备货金额
到货金额
结算金额

然后订购金额从 订单明细表,group by项目,买方企业,卖方企业,订购日期(日期用trunc(日期)去掉时间)得出订货结果集
备货从订单明细表,也是group by项目,买方企业,卖方企业,备货日期  得到备货结果集
到货从到货表 group by 出来                       得到到货结果集
结算从结算的表中group by 出来                                     得到结算结果集


将上述4个结果集union在一起,同时输出 项目,买方,卖方,日期,订购金额,备货金额, 到货金额, 结算金额 这些列,每个结果集中没有的列用0补上。形成一个包含所有数据的结果集,再对这个结果集做分类汇总,再用insert into XXX() select * from ()的语句插入到建立好的统计表中,备查询用。

因为数据量比较大,所以最好还是建立好统计表,将这些生成结果的写成脚本,让数据库每天晚上定时执行,将业务数据分类汇总到统计表中。第二天用户只查询这些统计表,速度不会受到影响;
但是有个问题就是,查询的数据不包含当天的,不能实时反应当时的汇总数据。


其实这个报表的查询还帯有一些子查询,就是对具体买方企业,卖方企业,交易商品明细等等的查询,我的设计思路跟这个主表的类似,就不再细究。

posted on 2007-06-01 10:50  web报表  阅读(4187)  评论(0编辑  收藏  举报