我接的第一个私活就是实现的这样的需求,说几个核心的思想吧:
1. 在线填报:当时我们是用 ActiveX 自己开发的报表插件,是 Cell 形式的(国内另一流行时 Form),个人觉得 Cell 形式利于设计,便于排版。通过 xml 或者 二进制数据传输到服务器接受,按预定义规则,然后写入数据库。这样基层单位就完成了填报
2. 汇总(同级单位,上下级单位,甚至自定义汇总,比如具有用户自定的某些属性的单位,如三级甲等医院):主管单位(如卫生局)进行汇总,这是直接在服务器端完成的,我们设计了自己的汇总引擎,定义一整套的规则。
3. 引用取数:比如某个基层单位准备填报,新建报表 【资产负载表-2010年1月-月报】 之后,就会生成相关上下文信息给这张报表,设计报表这个模板的时候,可能会有一个指标是上一个月值(具体忘了。。。),那么这个值,用户是不用填的,是只读的,自己引用的,引用路径可能是:xxx单位\xxx类型报表\xx年xx月-1\xxx指标,注意这个路径支持 月-1 这样的操作。解析这个路径,我们就从数据库找到了这个值了。
4. 数据库设计(非/逆规范化):我们用关系数据库来存储报表数据,便于检索、统计与计算。但用户看到报表,实际上是交叉表,报表模板可能会变化,但是数据库又是标准二维的。所以,我们用了动态表,将每个指标做为了一个数据库表列,每中报表类型对应一张或者多张数据库表(因为每张数据库表只存255个列,但是每张报表可能大于255个指标)。所以报表数据对应的sql表是动态管理的
5. 缓存与性能:为了提供性能,生成报表与取数就要通过缓存。
SharePoint 没有现成的满足如此需求的功能,需要自己做。
Hope Helpful | Xiaofeng Wang | http://www.leoworks.net | Beijing P.R.C