Oracle分析函数三、基于model函数建设口径统一的统计指标库
2018-03-22 14:02
519 查看
口径困境
做数据分析的同学经常被一个问题困扰,就是口径统一问题。核对数据、反复取数是很多IT部门永远的主题,造成这一困境有很多原因:不同的技术人员对同一口径的理解不一样,导致取出数据不一致;
2.技术人员脚本编写随意,导致在不同时间对同一口径取出的数据不一致;
3.业务和技术理解不一致导致取出的数据不符合要求。
如何减少这类无效劳动,从个人的经验看,可以从两个方面入手改善:
1. 非技术层面,技术部门应与业务部门加强沟通,彻底理解需求
要拿出“准确”的数据,首先需要技术人员理解“真实”的需求,这一点对技术人员的要求很高,因为经常会碰到下面这种熟悉的场景:(1) 有时候业务人员自己都没有搞明白需求,只是传达一下领导的口头表述,就向技术部门要数据。
(2)大部分业务人员对技术是不了解的,简单的业务表述在技术理解上却是有歧义的。比如说“按月统计销售额”,在技术人员看来是完全无法处理的,比如说“按月”的时间是按销售日期,还是按收款日期?退款的交易如何统计?
因此,即使一个简单的数据统计,绝不是需求部门写两句话,技术部门就可以马上拿出数据了,而是需要技术人员主动反复、详细地与业务人员沟通,罗列各种可能的技术口径,直至双方达成一致的理解。
2.技术层面,建立统计指标库来统一口径
经过详尽的沟通以及技术分析,对常用的统计口径建立指标库,有利于改善口径不一致的现象,从而减少重复劳动。建立指标库的方法有很多,这里介绍一种结合model函数使用的指标库建立方法。
用Model分析函数搭建统计指标库
以下用本人做过的一个税务局的数据分析项目为例进行说明,部分步骤或功能做了简化处理,记录一下关键内容。1.口径明细表
--口径代码表,主要配置了各个口径的取数SQL CREATE TABLE T_DM_KJ (KJ_DM VARCHAR2(20) --口径代码 ,KJ_MC VARCHAR2(50) --口径名称 ,MODSQL VARCHAR2(1000) --Model函数SQL ,YXBZ VARCHAR2(1) DEFAULT 'Y' --有效标志 ,XGSJ DATE DEFAULT SYSDATE --修改时间 );
下面是部分配置样例
2.常用指标表
--指标代码表 --这是一个常用统计指标的字典,包含口径说明、业务负责人对口径的解释负责、 --技术负责人对技术口径实现负责。 CREATE TABLE T_DM_ZB (ZB_DM VARCHAR2(20) --指标代码 ,ZB_MC VARCHAR2(50) --指标名称 ,KJSM VARCHAR2(1000) --口径说明 ,YWRY VARCHAR2(20) --业务负责人 ,JSRY VARVHAR2(20) --技术负责人 ,YXBZ VARCHAR2(1) DEFAULT 'Y' --有效标志,Y-有效 N-无效 ,XGSJ DATE DEFAULT SYSDATE --修改时间 );
配置样例:
3.指标对应口径
--指标口径对应表 CREATE TABLE T_ZB_KJ (ZB_DM VARCHAR2(20) --口径代码 ,KJ_DM VARCHAR2(50) --口径名称 ,PXH NUMBER --排序号 ,XSMC VARCHAR2(50) --显示名称 );
配置样例:
4.组装model语句的函数
基础表建好后,需要写一个函数,组装model子句--组装MODEL语句 CREATE OR REPLACE FUNCTION F_MODELSQL( V_ZBDM VARCHAR2, --指标代码 V_TJZ VARCHAR2, --统计值(月累计-VALM、年累计-VALY) V_TJGS VARCHAR2 DEFAULT 'SUM' --统计公式(合计、计数、平均) ) RETURN clob is V_SQLOUT clob; begin FOR REC_KJ IN (SELECT A.KJ_DM,B.MODSQL FROM T_ZB_KJ A,T_DM_KJ B WHERE A.ZB_DM=V_ZBDM AND A.KJ_DM=B.KJ_DM) LOOP V_SQLOUT:=V_SQLOUT||CHR(10)||V_TJZ||'[''0'','''||TRIM(REC_KJ.KJ_DM)||''']='||V_TJGS||'('||V_TJZ||')['||REC_KJ.MODSQL||',ANY],'; END LOOP; RETURN rtrim(V_SQLOUT,','); end F_MODELSQL;
返回的语句经常会超过4000个字符,因此返回类型 用了clob类型。看一下执行结果:
5.应用
调用上面这个函数可以采用动态SQL,比如用于统计分税种税收收入:V_SQL:= 'SELECT NY,SRXM,SE FROM ( SELECT TO_CHAR(RKRQ,''YYYYMM'') AS NY,ZSPM_DM,RPAD(''0'',50,''0'') SRXM,SUM(SE) AS SE FROM ZS_RKMX WHERE RKRQ>=DATE''2016-01-01'' AND RKRQ<DATE''2017-01-01'' GROUP BY TO_CHAR(RKRQ,''YYYYMM'') ) MODEL RETURN UPDATED ROWS PARTITION BY (NY) DIMENSION BY (ZSPM_DM,SRXM) MEASURES (SE) ('||F_MODELSQL('FSZSSSR','SE','SUM')||')'
实际应用中还要比上面的更加复杂很多,比如:
基础数据先进行加工汇总,一个数据只能有一个基础数据来源;
对where条件进行口径抽象,建成一个公用的筛选口径表,等等,不再详细赘述了。
总之,围绕model分析函数建立起一套统一口径的取数规则和取数程序,确实大大降低了口径解释、重复取数等工作量。
相关文章推荐
- 20090901_ 利用Oracle内置分析函数进行高效统计汇总
- Oracle分析函数——统计分析函数
- ORACLE统计分析函数
- Oracle的统计分析函数(STDDEV函数)
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- 利用Oracle内置分析函数进行高效统计汇总
- oracle 统计/分析函数
- 利用Oracle内置分析函数进行高效统计汇总(2)
- oracle 统计/分析函数
- oracle基于函数的索引分析
- oracle 统计/分析函数
- oracle中LAG()和LEAD()等分析统计函数的用法
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- oracle基于函数的索引分析
- Oracle统计分析函数集之一(转载)
- 分段统计与Oracle的分析函数、逻辑判断等知识点的综合运用
- Oracle分析函数model使用时需要注意的几个地方(二)
- 转:oracle 统计分析函数之lead
- oracle 统计分析函数之lead和lag
- oracle 统计分析函数