最近在做营销活动的评估功能,这个功能se也没有做过多的设计,就是知道要哪些指标,而这些指标的数据没有过多的分析设计,也没有根据我们现有能力考虑。
因为汲及到时间维度,所以我建 个时间维度表,三个字段,年:2014,月:201410,日20142022;然后是和mm_sale_campaign表做了个视图
create or replace view mm_sale_campaign_time as
select t.year as year,t.month as month,t.day as day,a.oid as campaignid from t_dim_time t,mm_sale_campaign a
year month day campaignid
2014 201410 20141022 20141022abc
然后是我的客户接触表
create or replace view mm_sale_campaign_touchNum as
select x.camid,x.createMonth,x.createTime,count(distnct x.msisdn) as amount from
(select mst.campaignId as camid,to_char(mst.createTime,"yyyyMM") as createMonth,mst.createTime as createTime,mst.msisdn as msisdn from mm_sale_touch mst) x
group by x.camid,x.createMonth,x.createTime
然后dashboard使用这两个视图关联查询,输出图形
--按月展示,
select ct.month,ct.campaignid,Decode(cn.amount,'',0.cn.amount) from mm_sale_campaign_time ct left join mm_sale_campaign_touchNum cn on ct.campaignid=cn.camid and ct.month=cn.createMonth where ct.campaignid='20141022abc' and ct.year="2014"
这样就把2014年1-12月的数据都展示出来了,如果当月没有产生客户接触,则客户接触数为0
ct.month, ct.camid amount
201401 20141022abc 0
...
201410 20141022abc 12
结论:
要使用复杂sql得到相应的指标分析数据,可以多写几个视图。
优点:就像java抽方法一样,便于修改,阅读;
据点 如果基表数据大时,要考虑多字段分组的性能
现实:
功能已经实现,后续测试测出性能,再作修改,可能会作日表,月表之类的