基于ETL的抽取数据的报表实现
2015-07-02 16:42
218 查看
1、查询分析器
查询分析器主要工作是从不同来源的数据库中抽取对应指标值。
界面原型参考如下(仿 IREPORT):
图1 数据来源切换
2、报表科目与查询分析字段映射
图2 字段映射
这里,字段选择的地方增加一列,用作选择数据科目的映射。
图3 SQL最后修改
图形化界面生成SQL后,可以手工修改SQL,点击OK生成XML格式的数据抽取脚本。
3、ETL工具
我使用的是Scriptella,这个工具的好处是,我不用去把查找指定数据的SQL用xml工具去重新解析封装,这种设计对于后期的产品维护,二次开发省了不少事。
在Scriptella启动之前,我们可以通过查询分析器来指定数据连接的数据表,通过对表的查询,获取到表中的数据字段,字段类型等信息,接着,在系统界面中设置字段对应的数据科目,设置过程可以选择老版本的配置映射进行修改,保存后生产新的映射模板。
在所有模板设置完成以后,出发脚本生成事件,生成供Scriptella执行的XML脚本。
XML实例如下:
<!DOCTYPE etl SYSTEM " http://scriptella.javaforge.com/dtd/etl.dtd "> <etl> <connection id="db1" url="jdbc:oracle:thin:@uri_1:1521:orcl" user="username" password="password" classpath="external.jar"/> <connection id="db2" url="jdbc:oracle:thin:@uri_2:1521:pcis" user="username" password="password"/> <query connection-id="db1"> <!-- Select product from software category in db1--> SELECT * FROM web_org_oper; <!-- for each row execute a script --> <script connection-id="db2"> <!-- 这里也可以创建表 --> <!-- CREATE TABLE Track ( ID INT, ALBUM_ID INT, NAME VARCHAR(100), DATA LONGVARBINARY ); --> <!-- Insert all selected products to db2 use ? to reference properties, columns or ?{expressions}--> INSERT INTO web_org_oper(C_OPER_ID, C_OPER_CNM, C_PASSWD,C_IS_VALID,T_PWD_STRT_TM,T_PWD_END_TM,C_SRC,C_REL_CDE,C_DPT_PERM,C_DPT_DIFF,C_PRD_DIFF,C_OP_DIFF,C_CRT_CDE,T_CRT_TM,C_UPD_CDE,T_UPD_TM,C_OWN_DPT_CDE,C_CSS_STYLE,C_EDU_CDE,C_STATUS,C_LMT_FLAG,C_TRANS_MRK,T_TRANS_TM,C_ID_NO,C_OPER_CNM_BAK) values (?C_OPER_ID, ?C_OPER_CNM, ?C_PASSWD,?C_IS_VALID,?T_PWD_STRT_TM,?T_PWD_END_TM,?C_SRC,?C_REL_CDE,?C_DPT_PERM,?C_DPT_DIFF,?C_PRD_DIFF,?C_OP_DIFF,?C_CRT_CDE,?T_CRT_TM,?C_UPD_CDE,?T_UPD_TM,?C_OWN_DPT_CDE,?C_CSS_STYLE,?C_EDU_CDE,?C_STATUS,?C_LMT_FLAG,?C_TRANS_MRK,?T_TRANS_TM,?C_ID_NO,?C_OPER_CNM_BAK); </script> </query> </etl>
JAVA代码调用(需要依赖 odbc5.jar、scriptella.jar)---这里只写一种,很多种调用方法:
EtlExecutor.newExecutor(Test.class.getResource("etl.xml")).execute();
4、科目勾稽关系校验及日志记录。
设置对应科目勾稽关系校验公式与模型。
勾稽方向 | 误差值 | 上勾稽字段 | 计算方法 | 下勾稽字段 | 描述 |
= | 0 | F0 | - | F1,F2,F3,F4 | F0-SUM(F1,F2,F3,F4)=0 |
< | 0 | F0 | - | F1,F2,F3,F4 | F0-SUM(F1,F2,F3,F4)<0 |
> | 0 | F0 | + | F1,F2,F3,F4 | SUM(F0,F1,F2,F3,F4)>0 |
5、输出设置
设置最后数据输出的方式,包含XML输出、EXCEL输出、word输出、PDF输出等。
相关文章推荐
- iOS 轮播图实现
- osg预定义几何体设置颜色
- iphone模拟器不可以安装ipa文件
- java调用其他程序读取文件前对文件进行排序
- vc++读写ini文件
- RedHat6下源码安装MySQL5.6
- noproguard.classes-with-local.dex
- 模拟地图撒点,将随机产生的一些点以圆的形式画在画布上并保存为png格式的图片
- 虚继承与虚基类的内存布局
- 关于如何用JAVA代码生成随机图片验证码
- iOS手势 清扫和长按
- Android Studio开发JNI工程
- ORA-01219:数据库未打开:仅允许在固定表/视图中查询
- storm与hadoop的对比
- css3 shape-out
- TCP/IP 问答
- 【Oracle错误集锦】:ORA-00119 & ORA-00132
- Asp.Net远程调试
- Linq 常用方法解释
- 短文本合并重复(去重)的简单有效做法