|
@@ -94,9 +94,6 @@ def get_pitcher_panel_overview(pitcher):
|
|
return get_dict_list(key,data)
|
|
return get_dict_list(key,data)
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
def get_channel_overview(channel,start,end,page,page_size,order_by,order):
|
|
def get_channel_overview(channel,start,end,page,page_size,order_by,order):
|
|
sql="""select channel,toString(dt) date,
|
|
sql="""select channel,toString(dt) date,
|
|
view_count,click_count,
|
|
view_count,click_count,
|
|
@@ -135,99 +132,212 @@ def get_channel_overview(channel,start,end,page,page_size,order_by,order):
|
|
return ck.execute(sql)
|
|
return ck.execute(sql)
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
def get_channel_again_order_trend(channel,date):
|
|
def get_channel_again_order_trend(channel,date):
|
|
- a=[{'date':'2020-12-01',
|
|
|
|
- 'channel':'宝珠书屋',
|
|
|
|
- 'book':'熊出没',
|
|
|
|
- 'cost':23.23,
|
|
|
|
- 'reg_amount':23421.11,
|
|
|
|
- 'roi':0.23,
|
|
|
|
- 'new_follow':23,
|
|
|
|
- 'new_follow_per_cost':234.11,
|
|
|
|
- 'reg_user':111,
|
|
|
|
- 'reg_count':123,
|
|
|
|
- 'cost_per_user':123,
|
|
|
|
- 'avg_again_order_rate':0.24,
|
|
|
|
- 'avg_order_amount':1231.11,
|
|
|
|
- 'order_count':11,
|
|
|
|
- 'data':[{'user_order_count' :1,
|
|
|
|
- 'd1':{'origin':12,
|
|
|
|
- 'new':1231,
|
|
|
|
- 'move':12,
|
|
|
|
- 'now':2134,
|
|
|
|
- 'follow_order_rate':0.12},
|
|
|
|
- 'd2': {'origin': 12,
|
|
|
|
- 'new': 1231,
|
|
|
|
- 'move': 12,
|
|
|
|
- 'now': 2134,
|
|
|
|
- 'follow_order_rate': 0.12},
|
|
|
|
- 'd3': {'origin': 12,
|
|
|
|
- 'new': 1231,
|
|
|
|
- 'move': 12,
|
|
|
|
- 'now': 2134,
|
|
|
|
- 'follow_order_rate': 0.12},
|
|
|
|
- 'd4': {'origin': 12,
|
|
|
|
- 'new': 1231,
|
|
|
|
- 'move': 12,
|
|
|
|
- 'now': 2134,
|
|
|
|
- 'follow_order_rate': 0.12},
|
|
|
|
- 'd5': {'origin': 12,
|
|
|
|
- 'new': 1231,
|
|
|
|
- 'move': 12,
|
|
|
|
- 'now': 2134,
|
|
|
|
- 'follow_order_rate': 0.12},
|
|
|
|
- 'd6': {'origin': 12,
|
|
|
|
- 'new': 1231,
|
|
|
|
- 'move': 12,
|
|
|
|
- 'now': 2134,
|
|
|
|
- 'follow_order_rate': 0.12},
|
|
|
|
- 'd7': {'origin': 12,
|
|
|
|
- 'new': 1231,
|
|
|
|
- 'move': 12,
|
|
|
|
- 'now': 2134,
|
|
|
|
- 'follow_order_rate': 0.12}
|
|
|
|
- }
|
|
|
|
- ]
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }]
|
|
|
|
- return a
|
|
|
|
-
|
|
|
|
-def get_channel_active(channel,start,end):
|
|
|
|
-
|
|
|
|
- a=[{
|
|
|
|
- 'date':'2020-12-01',
|
|
|
|
- 'channel':'宝珠书屋',
|
|
|
|
- 'book':'魏汝稳',
|
|
|
|
- 'cost':234.11,
|
|
|
|
- 'reg_amount':123.11,
|
|
|
|
- 'roi':0.45,
|
|
|
|
- 'new_follow_user':11,
|
|
|
|
- 'new_follow_per_cost':234.11,
|
|
|
|
- 'order_user':222,
|
|
|
|
- 'order_count':12312,
|
|
|
|
- 'order_user_per_cost':123.11,
|
|
|
|
- 'day7_avg_act_rate':0.14,
|
|
|
|
- 'day7_avg_act_per_cost':5.23,
|
|
|
|
- 'day30_avg_act_rate':0.9334,
|
|
|
|
- 'day30_avg_act_rate':5.23,
|
|
|
|
- 'act_per_cost':43.11,
|
|
|
|
- 'd1':{
|
|
|
|
- 'act_user':12,
|
|
|
|
- 'act_cost_per_cost':23.11,
|
|
|
|
- 'act_rate':0.4512},
|
|
|
|
- 'd2': {
|
|
|
|
- 'act_user': 12,
|
|
|
|
- 'act_cost_per_cost': 23.11,
|
|
|
|
- 'act_rate': 0.4512},
|
|
|
|
- 'd3': {
|
|
|
|
- 'act_user': 12,
|
|
|
|
- 'act_cost_per_cost': 23.11,
|
|
|
|
- 'act_rate': 0.4512}
|
|
|
|
- }]
|
|
|
|
- return a
|
|
|
|
-
|
|
|
|
|
|
+ sql=f"""select toString(dt) date,
|
|
|
|
+ channel,book,
|
|
|
|
+ round(cost,2) cost,
|
|
|
|
+ round(reg_order_amount,2) reg_amount,
|
|
|
|
+ round(reg_order_amount/cost,4) roi,
|
|
|
|
+ follow_user new_follow,
|
|
|
|
+ round(cost/follow_user,2) new_follow_per_cost,
|
|
|
|
+ reg_order_count reg_count,reg_order_user reg_user,
|
|
|
|
+ round(cost/reg_order_user,2) cost_per_user,
|
|
|
|
+ round(reg_order_amount/reg_order_user,2) avg_order_amount,
|
|
|
|
+ round(reg_order_user2/reg_order_user,4) avg_again_order_rate,
|
|
|
|
+ order_count
|
|
|
|
+
|
|
|
|
+ from dw_daily_channel where channel='{channel}' and dt='{date}'
|
|
|
|
+ """
|
|
|
|
+ data=ck.execute(sql)
|
|
|
|
+ key1=['date','channel','book','cost','reg_amount','roi','new_follow','new_follow_per_cost',
|
|
|
|
+ 'reg_count','reg_user','cost_per_user','avg_order_amount','avg_again_order_rate','order_count']
|
|
|
|
+ json1=get_dict_list(key1,data)[0]
|
|
|
|
+ # print(json1)
|
|
|
|
+ sql2="""select
|
|
|
|
+ date ,
|
|
|
|
+ count(1) c1,
|
|
|
|
+ sum(if(count>1,1,0)) c2,
|
|
|
|
+ sum(if(count>2,1,0)) c3,
|
|
|
|
+ sum(if(count>3,1,0)) c4,
|
|
|
|
+ sum(if(count>4,1,0)) c5
|
|
|
|
+
|
|
|
|
+ from (
|
|
|
|
+
|
|
|
|
+ select count(1) count,date
|
|
|
|
+ from order where channel='玉龙书社' and date>='2020-09-19' and date<=addDays(toDate('2020-09-19'),6)
|
|
|
|
+ and formatDateTime(reg_time,'%Y-%m-%d')='2020-09-19' group by user_id,date
|
|
|
|
+ ) a group by date"""
|
|
|
|
+
|
|
|
|
+ df=ck.getData_pd(sql2,[['date','c1','c2','c3','c4','c5']])
|
|
|
|
+ # print(df)
|
|
|
|
+ reg_user=json1["reg_user"]
|
|
|
|
+ li=[]
|
|
|
|
+ for i in range(1,5):
|
|
|
|
+ d1={}
|
|
|
|
+ d1["origin"]=df.iat[0,i]
|
|
|
|
+ d1["new"]=0
|
|
|
|
+ d1["move"]=df.iat[0,i+1]
|
|
|
|
+ d1["now"]=d1["origin"]+d1['new']-d1["move"]
|
|
|
|
+ d1["follow_order_rate"]=round(d1["now"]/reg_user,2)
|
|
|
|
+ d2={}
|
|
|
|
+ d2["origin"] = d1["now"]
|
|
|
|
+ d2["new"] = df.iat[1,i]
|
|
|
|
+ d2["move"] = df.iat[1, i+1]
|
|
|
|
+ d2["now"] = d2["origin"] +d2['new']- d2["move"]
|
|
|
|
+ d2["follow_order_rate"] = round(d2["now"] / reg_user, 2)
|
|
|
|
+ d3={}
|
|
|
|
+ d3["origin"] = d2["now"]
|
|
|
|
+ d3["new"] = df.iat[2, i]
|
|
|
|
+ d3["move"] = df.iat[2, i+1]
|
|
|
|
+ d3["now"] = d3["origin"] +d3['new']- d3["move"]
|
|
|
|
+ d3["follow_order_rate"] = round(d3["now"] / reg_user, 2)
|
|
|
|
+ d4={}
|
|
|
|
+ d4["origin"] = d3["now"]
|
|
|
|
+ d4["new"] = df.iat[3, i]
|
|
|
|
+ d4["move"] = df.iat[3, i+1]
|
|
|
|
+ d4["now"] = d4["origin"] +d4['new']- d4["move"]
|
|
|
|
+ d4["follow_order_rate"] = round(d4["now"] / reg_user, 2)
|
|
|
|
+ d5={}
|
|
|
|
+ d5["origin"] = d4["now"]
|
|
|
|
+ d5["new"] = df.iat[4, i]
|
|
|
|
+ d5["move"] = df.iat[4, i+1]
|
|
|
|
+ d5["now"] = d5["origin"] +d5['new']- d5["move"]
|
|
|
|
+ d5["follow_order_rate"] = round(d4["now"] / reg_user, 2)
|
|
|
|
+ d6 = {}
|
|
|
|
+ d6["origin"] = d5["now"]
|
|
|
|
+ d6["new"] = df.iat[5, i]
|
|
|
|
+ d6["move"] = df.iat[5, i+1]
|
|
|
|
+ d6["now"] = d6["origin"] +d6['new']- d6["move"]
|
|
|
|
+ d6["follow_order_rate"] = round(d6["now"] / reg_user, 2)
|
|
|
|
+ d7 = {}
|
|
|
|
+ d7["origin"] = d6["now"]
|
|
|
|
+ d7["new"] = df.iat[6, i]
|
|
|
|
+ d7["move"] = df.iat[6, i+1]
|
|
|
|
+ d7["now"] = d7["origin"] +d7['new']- d7["move"]
|
|
|
|
+ d7["follow_order_rate"] = round(d7["now"] / reg_user, 2)
|
|
|
|
+ d={}
|
|
|
|
+ d["user_order_count"]=i
|
|
|
|
+ d['d1']=d1
|
|
|
|
+ d['d2']=d2
|
|
|
|
+ d['d3']=d3
|
|
|
|
+ d['d4']=d4
|
|
|
|
+ d['d5']=d5
|
|
|
|
+ d['d6']=d6
|
|
|
|
+ d['d7']=d7
|
|
|
|
+ li.append(d)
|
|
|
|
+ json1['data']=li
|
|
|
|
+ return [json1]
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def get_channel_active(channel,start,end,page,page_size,order_by,order):
|
|
|
|
+ sql=f"""select formatDateTime(a.dt,'%Y-%m-%d') date, '{channel}' channel,book,cost,reg_amount,roi,new_follow_user,new_follow_per_cost,order_user,order_count,
|
|
|
|
+ order_user_per_cost,day7_avg_act_rate,day7_avg_act_per_cost,day30_avg_act_rate,ay30_avg_act_cost,
|
|
|
|
+ act_per_cost,
|
|
|
|
+ concat(toString(reg_order_user1),',',toString(cost/reg_order_user1),',',toString(reg_order_user1/order_user)),
|
|
|
|
+ concat(toString(reg_order_user2),',',toString(cost/reg_order_user2),',',toString(reg_order_user2/order_user)),
|
|
|
|
+ concat(toString(reg_order_user3),',',toString(cost/reg_order_user3),',',toString(reg_order_user3/order_user)),
|
|
|
|
+ concat(toString(reg_order_user4),',',toString(cost/reg_order_user4),',',toString(reg_order_user4/order_user)),
|
|
|
|
+ concat(toString(reg_order_user5),',',toString(cost/reg_order_user5),',',toString(reg_order_user5/order_user)),
|
|
|
|
+ concat(toString(reg_order_user6),',',toString(cost/reg_order_user6),',',toString(reg_order_user6/order_user)),
|
|
|
|
+ concat(toString(reg_order_user7),',',toString(cost/reg_order_user7),',',toString(reg_order_user7/order_user)),
|
|
|
|
+ concat(toString(reg_order_user8),',',toString(cost/reg_order_user8),',',toString(reg_order_user8/order_user)),
|
|
|
|
+ concat(toString(reg_order_user9),',',toString(cost/reg_order_user9),',',toString(reg_order_user9/order_user)),
|
|
|
|
+ concat(toString(reg_order_user10),',',toString(cost/reg_order_user10),',',toString(reg_order_user10/order_user)),
|
|
|
|
+ concat(toString(reg_order_user11),',',toString(cost/reg_order_user11),',',toString(reg_order_user11/order_user)),
|
|
|
|
+ concat(toString(reg_order_user12),',',toString(cost/reg_order_user12),',',toString(reg_order_user12/order_user)),
|
|
|
|
+ concat(toString(reg_order_user13),',',toString(cost/reg_order_user13),',',toString(reg_order_user13/order_user)),
|
|
|
|
+ concat(toString(reg_order_user14),',',toString(cost/reg_order_user14),',',toString(reg_order_user14/order_user)),
|
|
|
|
+ concat(toString(reg_order_user15),',',toString(cost/reg_order_user15),',',toString(reg_order_user15/order_user)),
|
|
|
|
+ concat(toString(reg_order_user16),',',toString(cost/reg_order_user16),',',toString(reg_order_user16/order_user)),
|
|
|
|
+ concat(toString(reg_order_user17),',',toString(cost/reg_order_user17),',',toString(reg_order_user17/order_user)),
|
|
|
|
+ concat(toString(reg_order_user18),',',toString(cost/reg_order_user18),',',toString(reg_order_user18/order_user)),
|
|
|
|
+ concat(toString(reg_order_user19),',',toString(cost/reg_order_user19),',',toString(reg_order_user19/order_user)),
|
|
|
|
+ concat(toString(reg_order_user20),',',toString(cost/reg_order_user20),',',toString(reg_order_user20/order_user)),
|
|
|
|
+ concat(toString(reg_order_user21),',',toString(cost/reg_order_user21),',',toString(reg_order_user21/order_user)),
|
|
|
|
+ concat(toString(reg_order_user22),',',toString(cost/reg_order_user22),',',toString(reg_order_user22/order_user)),
|
|
|
|
+ concat(toString(reg_order_user23),',',toString(cost/reg_order_user23),',',toString(reg_order_user23/order_user)),
|
|
|
|
+ concat(toString(reg_order_user24),',',toString(cost/reg_order_user24),',',toString(reg_order_user24/order_user)),
|
|
|
|
+ concat(toString(reg_order_user25),',',toString(cost/reg_order_user25),',',toString(reg_order_user25/order_user)),
|
|
|
|
+ concat(toString(reg_order_user26),',',toString(cost/reg_order_user26),',',toString(reg_order_user26/order_user)),
|
|
|
|
+ concat(toString(reg_order_user27),',',toString(cost/reg_order_user27),',',toString(reg_order_user27/order_user)),
|
|
|
|
+ concat(toString(reg_order_user28),',',toString(cost/reg_order_user28),',',toString(reg_order_user28/order_user)),
|
|
|
|
+ concat(toString(reg_order_user29),',',toString(cost/reg_order_user29),',',toString(reg_order_user29/order_user)),
|
|
|
|
+ concat(toString(reg_order_user30),',',toString(cost/reg_order_user30),',',toString(reg_order_user30/order_user))
|
|
|
|
+
|
|
|
|
+ from (
|
|
|
|
+
|
|
|
|
+select dt,book,cost,
|
|
|
|
+ reg_order_amount reg_amount,
|
|
|
|
+ if(cost=0,0,reg_order_amount/cost) roi,
|
|
|
|
+ follow_user new_follow_user,
|
|
|
|
+ if(follow_user=0,0,cost/follow_user) new_follow_per_cost,
|
|
|
|
+ reg_order_user order_user,
|
|
|
|
+ reg_order_count order_count,
|
|
|
|
+ if(reg_order_user=0,0,cost/reg_order_user) order_user_per_cost,
|
|
|
|
+ if(follow_user=0,0,reg_order_user7/follow_user) day7_avg_act_rate ,
|
|
|
|
+ if(reg_order_user7=0,0,cost/reg_order_user7) day7_avg_act_per_cost,
|
|
|
|
+ if(follow_user=0,0,reg_order_user30/follow_user) day30_avg_act_rate,
|
|
|
|
+ if(reg_order_user30=0,0,cost/reg_order_user30) ay30_avg_act_cost,
|
|
|
|
+ if(reg_order_user=0,0,cost/reg_order_user) act_per_cost
|
|
|
|
+ from dw_daily_channel where channel='{channel}' and dt>='{start}' and dt<='{end}') a
|
|
|
|
+left outer join (
|
|
|
|
+
|
|
|
|
+select toDate(formatDateTime(reg_time,'%Y-%m-%d')) dt,
|
|
|
|
+ count(distinct if(subtractDays(date, 1)>reg_time,'',user_id))-1 reg_order_user1,
|
|
|
|
+ count(distinct if(subtractDays(date, 2)>reg_time,'',user_id))-1 reg_order_user2,
|
|
|
|
+ count(distinct if(subtractDays(date, 3)>reg_time,'',user_id))-1 reg_order_user3,
|
|
|
|
+ count(distinct if(subtractDays(date, 4)>reg_time,'',user_id))-1 reg_order_user4,
|
|
|
|
+ count(distinct if(subtractDays(date, 5)>reg_time,'',user_id))-1 reg_order_user5,
|
|
|
|
+ count(distinct if(subtractDays(date, 6)>reg_time,'',user_id))-1 reg_order_user6,
|
|
|
|
+ count(distinct if(subtractDays(date, 7)>reg_time,'',user_id))-1 reg_order_user7,
|
|
|
|
+ count(distinct if(subtractDays(date, 8)>reg_time,'',user_id))-1 reg_order_user8,
|
|
|
|
+ count(distinct if(subtractDays(date, 9)>reg_time,'',user_id))-1 reg_order_user9,
|
|
|
|
+ count(distinct if(subtractDays(date, 10)>reg_time,'',user_id))-1 reg_order_user10,
|
|
|
|
+ count(distinct if(subtractDays(date, 11)>reg_time,'',user_id))-1 reg_order_user11,
|
|
|
|
+ count(distinct if(subtractDays(date, 12)>reg_time,'',user_id))-1 reg_order_user12,
|
|
|
|
+ count(distinct if(subtractDays(date, 13)>reg_time,'',user_id))-1 reg_order_user13,
|
|
|
|
+ count(distinct if(subtractDays(date, 14)>reg_time,'',user_id))-1 reg_order_user14,
|
|
|
|
+ count(distinct if(subtractDays(date, 15)>reg_time,'',user_id))-1 reg_order_user15,
|
|
|
|
+ count(distinct if(subtractDays(date, 16)>reg_time,'',user_id))-1 reg_order_user16,
|
|
|
|
+ count(distinct if(subtractDays(date, 17)>reg_time,'',user_id))-1 reg_order_user17,
|
|
|
|
+ count(distinct if(subtractDays(date, 18)>reg_time,'',user_id))-1 reg_order_user18,
|
|
|
|
+ count(distinct if(subtractDays(date, 19)>reg_time,'',user_id))-1 reg_order_user19,
|
|
|
|
+ count(distinct if(subtractDays(date, 20)>reg_time,'',user_id))-1 reg_order_user20,
|
|
|
|
+ count(distinct if(subtractDays(date, 21)>reg_time,'',user_id))-1 reg_order_user21,
|
|
|
|
+ count(distinct if(subtractDays(date, 22)>reg_time,'',user_id))-1 reg_order_user22,
|
|
|
|
+ count(distinct if(subtractDays(date, 23)>reg_time,'',user_id))-1 reg_order_user23,
|
|
|
|
+ count(distinct if(subtractDays(date, 24)>reg_time,'',user_id))-1 reg_order_user24,
|
|
|
|
+ count(distinct if(subtractDays(date, 25)>reg_time,'',user_id))-1 reg_order_user25,
|
|
|
|
+ count(distinct if(subtractDays(date, 26)>reg_time,'',user_id))-1 reg_order_user26,
|
|
|
|
+ count(distinct if(subtractDays(date, 27)>reg_time,'',user_id))-1 reg_order_user27,
|
|
|
|
+ count(distinct if(subtractDays(date, 28)>reg_time,'',user_id))-1 reg_order_user28,
|
|
|
|
+ count(distinct if(subtractDays(date, 29)>reg_time,'',user_id))-1 reg_order_user29,
|
|
|
|
+ count(distinct if(subtractDays(date, 30)>reg_time,'',user_id))-1 reg_order_user30
|
|
|
|
+ from order where channel='{channel}' and dt>='{start}' group by formatDateTime(reg_time,'%Y-%m-%d')) b on a.dt=b.dt
|
|
|
|
+ order by {order_by} {order} limit {page},{page_size}
|
|
|
|
+"""
|
|
|
|
+ data=ck.execute(sql)
|
|
|
|
+ key=['date','channel','book','cost','reg_amount','roi','new_follow_user','new_follow_per_cost','order_user','order_count','order_user_per_cost',
|
|
|
|
+ 'day7_avg_act_rate','day7_avg_act_per_cost','day30_avg_act_rate','day30_avg_act_cost','act_per_cost','d1','d2','d3','d4','d5','d6','d7','d8','d9','d10',
|
|
|
|
+ 'd11','d12','d13','d14','d15','d16','d17','d18','d19','d20','d21','d22','d23','d24','d25','d26','d27','d28','d29','d30']
|
|
|
|
+
|
|
|
|
+ x=get_dict_list(key,get_round(data))
|
|
|
|
+ li=[]
|
|
|
|
+
|
|
|
|
+ for i in x:
|
|
|
|
+ di = {}
|
|
|
|
+ for j in i:
|
|
|
|
+ if j in ['d1','d2','d3','d4','d5','d6','d7','d8','d9','d10',
|
|
|
|
+ 'd11','d12','d13','d14','d15','d16','d17','d18','d19','d20','d21','d22','d23','d24','d25','d26','d27','d28','d29','d30']:
|
|
|
|
+ k=i[j].split(",")
|
|
|
|
+ k[0]=round(float(k[0]),0)
|
|
|
|
+ k[1]=round(float(k[1]),2)
|
|
|
|
+ k[2]=round(float(k[2]),4)
|
|
|
|
+ di[j]= dict(zip(['act_user','act_cost_per_cost','act_rate'],k))
|
|
|
|
+ else:
|
|
|
|
+ di[j]=i[j]
|
|
|
|
+ li.append(di)
|
|
|
|
+ return li
|
|
|
|
|
|
def get_channel_order_trend(channel,start,end):
|
|
def get_channel_order_trend(channel,start,end):
|
|
a=[{
|
|
a=[{
|
|
@@ -300,5 +410,7 @@ def get_channel_summary(channel,pitcher):
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
# a=get_channel_overview('','','',1,10,'date','desc')
|
|
# a=get_channel_overview('','','',1,10,'date','desc')
|
|
- a=get_channel_summary('','')
|
|
|
|
|
|
+ # a=get_channel_summary('','')
|
|
|
|
+ # a=get_channel_again_order_trend('玉龙书社','2020-09-19')
|
|
|
|
+ a=get_channel_active('玉龙书社','2020-09-15','2020-09-20',1,10,'date','desc')
|
|
print(a)
|
|
print(a)
|