2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > ETL工具Informatica开发流程 综合应用 电信通话计费系统开发项目案例10

ETL工具Informatica开发流程 综合应用 电信通话计费系统开发项目案例10

时间:2021-09-26 07:58:12

相关推荐

ETL工具Informatica开发流程 综合应用 电信通话计费系统开发项目案例10

一、准备数据源

在Oracle数据库中创建 OLTP用户导入源数据 oracle_oltp_data.sql

在Mysql数据库中创建表,插入产品相关数据 mysql_product_data.sql

用户表ods_cust_info(oltp)

地区表department(oltp)

通话表call_record(oltp)

产品表product(mysql)

二、需求:

电信运营情况分析:从各业务系统数据分析一下公司运营情况(只分析通话,不分析流量)

报表结果:

统计各维度与各指标的用户量与运营收入情况

维度(时间,地区,产品)

指标(用户数,运营收入)

三、开发思路

1:对地区维度表进行相应的处理

社区 ----> 端局 ------> 区局

村镇县

create table department_dimension as

select

a.dept_id dq_id,a.dept_name dq_name,a.level_no dq_level_no,

b.dept_id ju_id,b.dept_name ju_name,b.level_no ju_level_no,

c.dept_id sq_id,c.dept_name sq_name,c.level_no sq_level_no

from

(select dept_id,dept_name,level_no from department t where dept_type_no = 2) a,

(select dept_id,dept_name,level_no from department t where dept_type_no = 4) b,

(select dept_id,dept_name,level_no from department t where dept_type_no = 5) c

where a.level_no=substr(b.level_no,1,3) and b.level_no=substr(c.level_no,1,6);

2:对通话表进行查找,计算出 每个电话 每个月 按照时间顺序 拨打电话的 累计时长,费用计算规则

然后限定条件出其中一个电话,一个月的数据,来分析情况,其他的就都一个道理。

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 call_record t

WHERE phone_no = 134*****678 --4G98 98 150 0.19

AND to_char(call_date,'yyyy-mm') = '-03';

select * from ods_cust_info where phone_no = 134*****678; --prod_id = '4G98'

select * from product where prod_id = '4G98'; -- mysql 98 150 0.19

--电话月份 套餐 套餐费用 通话时长 超出150分钟,0.19每分钟

--134*****678 -03 4G98 98 150 0.19

3:获得累计通话时长,及每次通话费用

select

call_id,

call_date,

phone_no,

begin_time,

time_long,

leiji,

(case when leiji>150 then

case when leiji-150-time_long<0 then (leiji-150)*0.19

else time_long*0.19 end

else 0 end) c_feiyong -- 超出套餐的每次通话费用

from

(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 call_record t

WHERE phone_no = 134*****678 --4G98 98 150 0.19

AND to_char(call_date,'yyyy-mm') = '-03' );

四、ETL工具Informatica开发流程核心思想与步骤

第一个功能:实现累计通话时长的输出

(暂时先只求一个电话一个月的)

1、导入源表

2、创建目标表,生成并执行sql

3、创建映射,编辑映射,连接并ctrl+S保存

4、创建任务,修改任务映射连接到对应的地方,保存,

5、创建工作流,连接任务,通过任务启动工作流,

6、监测执行完毕,检查目标数据。

第二个功能:实现多表连接,获取需求字段

目标计算每次通话的费用,需要知道用户的套餐类型(用户表)、套餐基本费用,免费时长、计费标准(产品表)等信息。

1、修改目标表,修改后生成并执行SQL

2、修改映射,delete映射与目标的连接 ,添加新的源和组件

3、断开W端,重新连接,刷新任务,修改任务映射,保存,然后从新启动任务。

4、查验数据

第三个功能:计算每次通话的费用

1、修改目标表

2、修改映射

iif( leiji>TO_DECIMAL(MF_TIME),

iif( leiji-TO_DECIMAL(MF_TIME)-TIME_LONG<0,

(leiji-TO_DECIMAL(MF_TIME))*CALL_MINUTE_FEE,

TIME_LONG*CALL_MINUTE_FEE),

0)

3、刷新任务,从新执行,查验数据

第四个功能:删除限定一个用户一个月的条件,edw层费用明细表完成

1、删除单用户单个月的限定条件

2、ctrl+ s 保存映射,刷新任务,保存ctrl+s ,M端重新启动任务,数据库查验数据结果。

第五个功能:计算每个号码每月的通话费用

1、修改目标表,生成并执行sql

2、修改映射,添加聚合组件,修改,连接,保存

3、刷新任务,保存,从新启动任务,查验数据

五、DM层(按照不同维度、指标作进一步需求的分析)

1、和已经处理的地区表department_dimension关联,求每个地区每个月各套餐使用用户数及合计消费

select

call_date,

dq_name,

prod_id,

count(phone_no) total,

max(basic_fee) basic_fee,

sum(call_fee) call_fee

from edw_call_record t1,oltp.department_dimension t2

where t1.address=t2.sq_name

group by call_date,dq_name,prod_id

order by 1,2,3;

2、更多的进一步细化分析,可以根据需求进一步去做分析。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。