小数据量复杂分类求和设计

Report
小数据量复杂分类求和设计
陈霞光/ 2012-02-18
版本 v0.2
适用场景(1)
• 小数据量
– 统计目标数据五万条内可以良好支持
– 个人分析,单一表百万条数据,问题不大,未经实际
论证。
• 自定义以哪些表中的哪些字段作为分类字段(即跨表,
复合字段等等),当然也支持单表单字段。
• 自定义哪个字段用于值字段
• 分类规则可以配置(需要Spring框架)
• 分类后别名自定义 且可以重复
• 自定义报表展示模板,横向,纵向单元格合并
适用场景(2)
• 支持自定义格式,自定义单元格合并(包含
条件格式,需要代码实现,暂未做成可以
配置)
• 支持使用定义的jsp tag用于html页面输出
• 支持excel导出
• Excel导出与html页面输出公用url,excel导
出仅仅需要加上参数format=excel
具体思路(宏观)
Jsp页面输出
(css, jsp tag)
分类好数据
并求和
定义模板文
件(合并单元
格,样式等等)
生成中间层的表格数
据模型(生成xml)转
java对象
Excel导出
定制代码(可
选)
具体思路(微观)一
分类好数据
并求和
多表多字段依赖
OrginalComplexKeyRule
和ClassifyStatisticsKey
在spring中配置
DefaultClassifyStatisticsKeyFactory
用于处理spring配置文件中配置的复杂
规则
从数据库中取得要统计
的目标数据集(可以多表)
默认求和统计器
DefaultSumStatistics
针对你的报表逻辑定义
SumStatisticsProperty实现
统计ok
具体思路(微观)二
定义模板文
件(合并单元
格,样式等等)
模板采用velocity填充
模板语法与velocity同步
模板内容受
sencloudReportTemplate.xsd
约束
具体思路(微观)三
定制代码(可
选)
支持值 与样式定制
实现ISCReportCustom接口即
可以,在vm模板中做相应配
置
具体思路(微观)四
生成中间层的表格数
据模型(生成xml)转
java对象
Vm模板被数据填充后生
成xml
Xml转成Template对象,再
转成Table对象或列表
具体思路(微观)五
Jsp页面输出
基于Table数据对象
自定义tag,用得不顺手可
以自定迭代table对象
SCTableTag
用法可以参照任意用这
种方式的报表jsp页面
具体思路(微观)六
Excel导出
同样基于Table数据对象
在BaseReportAction中已
经支持通用能力,只需
要在各自action中触发
即可
与生成报表页面通用url,
仅需要增加参数
&format=excel
后续可以支持
• 分类编辑器,模板编辑器(现有velocity编辑
器可以支持语法高亮自动补全等,但不支
持图形化)
• 性能改善,即支持大数据量。并行分类,
并行求和。
• 更好的编码规范。改为provider和adapter模
式。
• 更多的可以配置,与插件扩展式
• 更漂亮的页面控件
关于分类器配置的使用(一)
• 分类器针对单表单字段分类的场景
•
•
•
•
•
•
•
•
•
比较简单。主要需要配置DefaultClassifyStatisticsKeyFactory类中的
categoryProperty2Warper属性
categoryProperty2Warper具体配法也很简单,改属性是一个map
Key为类别名称,value为ClassifyStatisticsKey的实例
ClassifyStatisticsKey类是个关键点,是支持整个分类机制,以及快速分类的核心!
这个类有三个属性,别名,key,注释
别名用于页面显示分类名称,比如“耗材”
Key是真正用于分类的key,不对界面呈现(当你上面名称相同的时候,key可以加一些不可
见字符用于区分,比如\b)
注释就是解释下这个分类,同时用于展现的时候的alt或title的属性值,以实现鼠标悬浮
提示
注意这些实例在spring中尽量配置成scope=“prototype”,因为是有状态的,所以不能单
例,相应用这些分类器的服务类也要非单例
关于分类器配置的使用(二)
• 分类器针对单表多字段分类的场景
•
稍复杂。直接看app-report-config.xml注释

similar documents