zoukankan      html  css  js  c++  java
  • 做统计报表常用的设计思路

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

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

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


    项目名称   订购金额  备货金额  到货金额  结算金额
    项目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 ()的语句插入到建立好的统计表中,备查询用。

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


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

  • 相关阅读:
    互联网中的公钥与私钥
    Apache的order、allow、deny
    Linux进程中TIME_OUT解析
    no xxx find in java.library.path
    检测 USB 设备拨插的 C# 类库:USBClassLibrary
    C# 实现的异步 Socket 服务器
    javascript制作公式编辑器,函数编辑器和图形绘制
    浏览器内部工作原理
    10 款基于 jQuery 的切换效果插件推荐
    DIV焦点事件详解 --【focus和tabIndex】​
  • 原文地址:https://www.cnblogs.com/webreport/p/767422.html
Copyright © 2011-2022 走看看