在系统报表统计中,有时候我们会接到按周统计的要求。例如,一个月按周分别显示每周的统计数据。对于周的定义,即具体哪一天到哪一天算一周,这样的定义有时候每个人的定义是不一样的。通常我们是按自然周定义,比如周一到周日算一周,但有的人会按自己的需要定义,例如,每月周四到下周四算一周,或者其他方式。但一个月开始日期、结束日期是固定的,1号为开始,每月最后一天为结束。
在报表设计时按照这样的需要我们会设计相应的函数去拆分,这个方法是可行,但有个麻烦是每次读取数据时都要周定义函数去拆分数据,周定义函数的执行过程是需要花时间的,它要求先算出当前月具体有哪几周,每周的开始和结束,然后根据它得出的结果再去关联数据表。
现在我们考虑把周定义函数过程省略,建个周定义数据表,让用户自己维护,这样再出报表的时候可以直接做表关联,而省略了计算周定义的过程。同时,我们可以考虑再周定义数据表中加一个类型,以备不同周定义的用户使用,如根据需要,有些报表按类型一的定义方式统计,有些报表按类型二的周定义方式统计等等。加入了类型的概念使得系统更加灵活,用户想怎么定义周的开始结束都可以。
算法:
1.判断一个月最大周数(5周),由于周的定义方式不一样,因此我们给出默认5周的数据维护界面,读取数据表时不足5行自动补充剩余行数。
2.列出五行,每行让用户定义每一周的结束日期,注意只需要维护结束日期,开始日期可以根据上一周的结束日期+1来获得。保存数据时,系统自动保存这一周开始日期和结束日期。
3.要求按照顺序维护每周结束日期,日期从小到大维护,中间日期不可以空值,也不可以相等。
4.从下往上看,空值不需要保存。
评论