电信计费系统ETL开发

本项目进行电信计费系统开发,基于ETL工具Informatica,SQL,数据库Oracle和PL/SQL进行开发,数据来源微信公众号数据爱分享的数据。

小王子

业务需求分析:

电信运营情况分析:从各业务系统数据(用户表、地区表、通话表)分析公司运营情况(本项目只分析通话,暂不分析流量)
报表结果:
统计各维度与各指标的用户量与运营收入情况
维度(时间,地区,产品)
指标(用户数,运营收入)

电信计费系统数据
用户表(oltp)
地区表(oltp)
通话表(oltp)
产品表(file_csv)

开发流程
OLTP------->ODS-------->EDW--------->DM

计费系统开发流程及开发逻辑:
A:地区表处理
B:开发过程
1: 先计算每个号码每个月的累计通话时长
SQ 组件来进行计算
2: 关联客户表(得到用户所使用的产品及地区),
关联产品表(得到免费通话时长,及通话计算标准)
计算每个号码每个月的费用
C: 根据地区维度,产品维度,来统计用户数及整个收入费用

业务系统数据抽取至 ODS 层

Oracle用户下用户表(oltp)、地区表(oltp)、通话表(oltp)以及产品表(file_csv)抽取至ODS层



创建任务,修改任务映射源表与目标表的连接数据库层,通过任务启动工作流


A:地区表处理
地区维度表进行相应的处理
将地区分为 区局--->端局(镇)--->社区
SQL开发思路分析

select * from ods_department where dept_type_no=5;--社区
select * from ods_department where dept_type_no=4;--端局
select * from ods_department where dept_type_no=2;--区局



将区局、端局、社区整合到地区维度表

select quju.dept_id,quju.dept_name,
       duanju.dept_id,duanju.dept_name,
       shequ.dept_id,shequ.dept_name
from
(select dept_id,dept_name,level_no
from ods_department where dept_type_no=2)quju,--区局
( select dept_id,dept_name,level_no
from ods_department where dept_type_no=4)duanju,--端局(镇)
( select dept_id,dept_name,level_no
from ods_department where dept_type_no=5)shequ--社区
WHERE substr(duanju.level_no,1,3)=quju.level_no
and substr(shequ.level_no,1,6)=duanju.level_no


ETL工具informatica开发过程
创建地区维度表,导入到informatica的目标源

CREATE TABLE edw_department_dim
(
      quju_id VARCHAR2(40),
      quju_name VARCHAR2(40),
      duanju_id VARCHAR2(40),
      duanju_name VARCHAR2(40),
      shequ_id VARCHAR2(40),
      shequ_name VARCHAR2(40)
)

将源表与目标表拖入mapping,编辑SQ组件,保留和目标表相同的字段(保留id和name),记住端口字段顺序与SQL输出字段保持一致(即目标表quju端口是第一顺序,与SQL的输出字段quju是第一顺序保持一致),连接映射关系,ctrl+s保存


创建任务,修改任务映射连接相应的数据库层,保存,连接任务,启动工作流

检测工作流执行完毕,检查目标数据

B:用户费用开发过程
SQL开发思路分析
在通话记录表中取其中的一个用户的一个月的通话记录来做测试计算,使用使用窗口函数的聚合函数sum(),以电话号码、月份进行分组,以日期和开始通话时间进行排序,统计出用户每月的累计通话时长

SELECT call_id,
       call_date,
       phone_no,
       begin_time,
       time_long,
       SUM(time_long)OVER(PARTITION BY phone_no,to_char(call_date,'yyyy-mm')
                          ORDER BY to_char(call_date,'yyyy-mm-dd'),begin_time)leiji
--使用窗口函数的聚合函数sum(),以电话号码、月份进行分组
,以日期和开始通话时间进行排序,统计出每个用户每月的累计通话时长
FROM ods_Call_Record 
WHERE phone_no = '13421728761' AND to_char(call_date,'yyyy-mm')='2018-03'  
 --测试,一个用户一个月的通话时长

查看数据,可以知道号码为13421728761的用户,在2018-03月份中的通话时长为218分钟



该号码的用户在用户表(ods_cust_info)中查询套餐为4G58,在产品表中查询该套餐免费通话时长为30分钟和每分钟0.19的话费计费



获取该号码用户累计的通话时长和话费,知道该用户的免费时长为30分钟和每分钟计费为0.19/min

WITH CALL_time_long AS (SELECT call_id,
       call_date,
       phone_no,
       begin_time,
       time_long,
       SUM(time_long)OVER(PARTITION BY phone_no,to_char(call_date,'yyyy-mm')
                          ORDER BY to_char(call_date,'yyyy-mm-dd'),begin_time)leiji
FROM ods_Call_Record 
WHERE phone_no = '13421728761' AND to_char(call_date,'yyyy-mm')='2018-03')   

SELECT phone_no,
       call_date,
       begin_time,
       time_long,
       leiji,
       CASE WHEN leiji>30 THEN    --免费通话时长为30分钟
            CASE WHEN (leiji-30-time_long)<0 THEN (leiji-30)*0.19
            ELSE time_long*0.19 END    --累计时长-30-当次通话时长小于0,说明当次通话时长还有免费时长,大于0说明当次通话时长没有免费时长
       ELSE 0 END call_fee    --在免费时长里没有产生费用
FROM CALL_time_long


ETL工具Informatica开发流程核心思想与步骤
1、计算累计通话时长
创建EDW层通话话费表edw_call_fee,导入目标表

create table EDW_CALL_FEE
(
  phone_no  VARCHAR2(20),
  month_id  VARCHAR2(20),
  product   VARCHAR2(20),
  adress    VARCHAR2(40),
  fee       NUMBER(20,2),
  basic_fee NUMBER(10)
)

需要源表ods_call_record、ods_cust_info、ods_product,同目标表一起拖入mapping进行开发,编辑ods_call_record的SQ组件,实现通话时长累计功能。


2、实现多表连接,获取相应需求字段

关联客户表(得到用户所使用的产品、地区),
关联产品表(得到免费通话时长、通话收费标准)
计算每个号码每个月的费用

获取月份
转化号码为字符串格式

第一步ods_call_record与ods_cust_info相连接,获取用户的地区(社区)和其使用的产品,使用joiner组件,并添加连接条件。
第二步与ods_product相连,获取产品的套餐以及套餐的免费时长与通话费用,使用joiner组件,并添加连接条件,
特别注意连接条件的字段要数据类型一致
连接表时只保留需要的字段,不需要就不相连



3、计算每次通话的费用
通过获取免费通话时长MF_TIME、通话费用CALL_MINUTE_FEE计算每次通话费用

iif(LEIJI>MF_TIME,
iif((LEIJI-MF_TIME-TIME_LONG)<0,(LEIJI-MF_TIME)*CALL_MINUTE_FEE,TIME_LONG*CALL_MINUTE_FEE),0)

下一步通过汇总组件按照(用户、月份、地区、套餐、基本月租)进行分组,计算每个用户每月的通话费用


sum(fee)+BASIC_FEE --当月的话费费用加上月租

连接映射,完成mapping


创建任务,修改任务的源表与目标表连接相应的数据库层,创建工作流,启动工作流

监控工作流流程,执行成功,检查数据

DM层 根据地区维度,产品维度,来统计用户数及整个收入费用
和已经处理的地区表EDW_DEPARTMENT_DIM关联,求每个地区每个月各套餐使用用户数及合计消费
在DM层创建DM_DEPT_CT_COMM表,导入目标源

create table DM_DEPT_CT_COMM
(
  month_id       VARCHAR2(10),
  area           VARCHAR2(40),
  prod_id        VARCHAR2(15),
  num_total      NUMBER(10),
  basic_fee      NUMBER(10),
  total_call_fee NUMBER(15,2)
)

将源表与目标表导入mapping



地区维度表与已完成的edw_call_fee表关联,实现地区是区局的用户数及收入费用的统计



对月份、区局、套餐进行分组,统计出用户数、总的收入费用

创建任务,修改源表与目标表的数据库层,创建工作流,通过任务启动工作流



检查数据

ODS层、EDW层、DM层开发全部完成,创建工作流,把各层的任务导入工作流,按照执行顺序连接任务ODS-->EDW-->DM

监控执行情况,查看日志

任务执行成功,数据全部导入数据库

到此ODS层,EDW层,DM层已开发成功,后续可根据不同维度,指标进一步分析!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,961评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,444评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,009评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,082评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,101评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,271评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,738评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,395评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,539评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,434评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,481评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,160评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,749评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,816评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,038评论 1 256
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,548评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,140评论 2 341

推荐阅读更多精彩内容