数仓搭建-ADS层

太过爱你忘了你带给我的痛 2023-03-03 11:10 121阅读 0赞

目录

    • 设备主题
        • 活跃设备数(日、周、月)
        • 每日新增设备
        • 沉默用户数
        • 本周回流用户数
        • 流失用户数
        • 留存率
        • 最近连续三周活跃用户数
        • 最近七天内连续三天活跃用户数
    • 会员主题
        • 会员主题信息
        • 漏斗分析
    • 商品主题
        • 商品个数信息
        • 商品销量排名
        • 商品收藏排名
        • 商品加入购物车排名
        • 商品退款率排名(最近 30 天)
        • 商品差评率
    • 营销主题(用户+商品+购买行为)
        • 下单数目统计
        • 支付信息统计
        • 复购率
    • 各个阶层的代码

设备主题

活跃设备数(日、周、月)

需求定义:
日活:当日活跃的设备数
周活:当周活跃的设备数
月活:当月活跃的设备数
在这里插入图片描述

每日新增设备

在这里插入图片描述

沉默用户数

需求定义:
沉默用户:只在安装当天启动过,且启动时间是在 7 天前
在这里插入图片描述

本周回流用户数

需求定义:
本周回流用户:上周未活跃,本周活跃的设备,且不是本周新增设备
DWT层拿不到历史数据,所以往DWS拿数据
在这里插入图片描述
解释一下最后一排为啥where last_wk.mid_id=null
在这里插入图片描述

流失用户数

需求定义:
流失用户:最近 7 天未活跃的设备
在这里插入图片描述

留存率

在这里插入图片描述
在这里插入图片描述

最近连续三周活跃用户数

在这里插入图片描述
解释having count(*)=3 因为三周所以三个1
在这里插入图片描述

最近七天内连续三天活跃用户数

思路一 根据dt-rank来算相同的时间
在这里插入图片描述
在这里插入图片描述
思路二 dt-lead=2说明三天连续
在这里插入图片描述
在这里插入图片描述

会员主题

会员主题信息

会员新鲜度=新增会员数/活跃会员数
在这里插入图片描述

漏斗分析

统计“浏览->购物车->下单->支付”的转化
思路:统计各个行为的人数,然后计算比值。
在这里插入图片描述

商品主题

商品个数信息

sku不去重 spu要去重 在业务中尽量不要使用count(distinct(spu))
在这里插入图片描述

商品销量排名

求前十
在这里插入图片描述

商品收藏排名

在这里插入图片描述

商品加入购物车排名

在这里插入图片描述

商品退款率排名(最近 30 天)

在这里插入图片描述

商品差评率

在这里插入图片描述

营销主题(用户+商品+购买行为)

下单数目统计

需求分析:统计每日下单数,下单金额及下单用户数
在这里插入图片描述

支付信息统计

每日支付金额、支付人数、支付商品数、支付笔数以及下单到支付的平均时长(取自DWD)
运用了3张表
在这里插入图片描述

复购率

需求各一级品类下月品牌复购率
在这里插入图片描述

各个阶层的代码

  1. insert into table ads_continuity_wk_count
  2. select
  3. '$do_date',
  4. concat(date_add(next_day('$do_date','MO'),-7*3),'_',date_add(next_day('$do_date','MO'),-1)),
  5. count(*)
  6. from
  7. (select
  8. mid_id
  9. from
  10. (
  11. select
  12. mid_id
  13. from dws_uv_detail_daycount
  14. where dt>=date_add(next_day('$do_date','MO'),-7)
  15. and dt<=date_add(next_day('$do_date','MO'),-1)
  16. group by mid_id
  17. union all
  18. select
  19. mid_id
  20. from dws_uv_detail_daycount
  21. where dt>=date_add(next_day('$do_date','MO'),-7*2)
  22. and dt<=date_add(next_day('$do_date','MO'),-1-7)
  23. group by mid_id
  24. union all
  25. select
  26. mid_id
  27. from dws_uv_detail_daycount
  28. where dt>=date_add(next_day('$do_date','MO'),-7*3)
  29. and dt<=date_add(next_day('$do_date','MO'),-1-7*2)
  30. group by mid_id
  31. )t1
  32. group by mid_id
  33. having count(*)=3)t2;
  34. insert into table ads_continuity_uv_count
  35. select
  36. '$do_date',
  37. concat(date_add('$do_date',-6),'_','$do_date'),
  38. count(*)
  39. from
  40. (select
  41. mid_id
  42. from
  43. (select
  44. mid_id,
  45. datediff
  46. from
  47. (select
  48. mid_id,
  49. (lead-dt) datediff
  50. from
  51. (select
  52. mid_id,
  53. dt,
  54. lead(dt,2,'1970-01-01') over(partition by mid_id order by dt) lead
  55. from dws_uv_detail_daycount)t1)t2
  56. where datediff=2)t3
  57. group by mid_id)t4;
  58. insert into table ads_user_topic
  59. select
  60. '$do_date',
  61. sum(if(login_date_last='$do_date',1,0)),
  62. sum(if(login_date_first='$do_date',1,0)),
  63. sum(if(payment_date_first='$do_date',1,0)),
  64. sum(if(payment_count>0,1,0)),
  65. count(*),
  66. sum(if(login_date_last='$do_date',1,0))/count(*),
  67. sum(if(payment_count>0,1,0))/count(*),
  68. sum(if(login_date_first='$do_date',1,0))/
  69. sum(if(login_date_last='$do_date',1,0))
  70. from dwt_user_topic;
  71. insert into table ads_user_action_convert_day
  72. select
  73. uv.dt,
  74. uv.day_count,
  75. cart_count,
  76. cart_count/uv.day_count,
  77. order_count,
  78. order_count/cart_count,
  79. payment_count,
  80. payment_count/order_count
  81. from
  82. (
  83. select
  84. '$do_date' dt,
  85. sum(if(cart_count>0,1,0)) cart_count,
  86. sum(if(order_count>0,1,0)) order_count,
  87. sum(if(payment_count>0,1,0)) payment_count
  88. from dws_user_action_daycount
  89. where dt='$do_date'
  90. )ua
  91. join ads_uv_count uv
  92. on ua.dt=uv.dt;
  93. insert into table ads_product_info
  94. select
  95. '$do_date' dt,
  96. sku_num,
  97. spu_num
  98. from
  99. (
  100. select
  101. '$do_date' dt,
  102. count(*) sku_num
  103. from dwt_sku_topic
  104. )tmp_sku_num
  105. join
  106. (
  107. select
  108. '$do_date' dt,
  109. count(*) spu_num
  110. from
  111. (
  112. select
  113. spu_id
  114. from
  115. dwt_sku_topic
  116. group by spu_id
  117. )tmp_spu_id
  118. )tmp_spu_num
  119. on tmp_spu_num.dt=tmp_sku_num.dt;
  120. insert into table ads_product_sale_topN
  121. select
  122. '$do_date',
  123. sku_id,
  124. payment_amount
  125. from dws_sku_action_daycount
  126. where dt='$do_date'
  127. order by payment_amount desc;
  128. insert into table ads_product_favor_topN
  129. select
  130. '$do_date',
  131. sku_id,
  132. favor_count
  133. from dws_sku_action_daycount
  134. where dt='$do_date'
  135. order by favor_count desc
  136. limit 10;
  137. insert into table ads_product_cart_topN
  138. select
  139. '$do_date',
  140. sku_id,
  141. cart_num
  142. from dws_sku_action_daycount
  143. where dt='$do_date'
  144. order by cart_num desc
  145. limit 10;
  146. insert into table ads_product_refund_topN
  147. select
  148. '$do_date',
  149. sku_id,
  150. refund_last_30d_count/payment_last_30d_count*100 refund_ratio
  151. from dwt_sku_topic
  152. order by refund_ratio desc
  153. limit 10;
  154. insert into table ads_appraise_bad_topN
  155. select
  156. '$do_date',
  157. sku_id,
  158. appraise_bad_count/(appraise_good_count+appraise_mid_count+
  159. appraise_bad_count+appraise_default_count) appraise_bad_ratio
  160. from dws_sku_action_daycount
  161. where dt='$do_date'
  162. order by appraise_bad_ratio desc
  163. limit 10;
  164. insert into table ads_order_daycount
  165. select
  166. '$do_date',
  167. sum(order_count),
  168. sum(order_amount),
  169. sum(if(order_count>0,1,0))
  170. from dws_user_action_daycount
  171. where dt='$do_date';
  172. insert into table ads_payment_daycount
  173. select
  174. tmp_payment.dt,
  175. tmp_payment.payment_count,
  176. tmp_payment.payment_amount,
  177. tmp_payment.payment_user_count,
  178. tmp_skucount.payment_sku_count,
  179. tmp_time.payment_avg_time
  180. from
  181. (
  182. select
  183. '$do_date' dt,
  184. sum(payment_count) payment_count,
  185. sum(payment_amount) payment_amount,
  186. sum(if(payment_count>0,1,0)) payment_user_count
  187. from dws_user_action_daycount
  188. where dt='$do_date'
  189. )tmp_payment
  190. join
  191. (
  192. select
  193. '$do_date' dt,
  194. sum(if(payment_count>0,1,0)) payment_sku_count
  195. from dws_sku_action_daycount
  196. where dt='$do_date'
  197. )tmp_skucount
  198. on tmp_payment.dt=tmp_skucount.dt
  199. join
  200. (
  201. select
  202. '$do_date' dt,
  203. sum(unix_timestamp(payment_time)-
  204. unix_timestamp(create_time))/count(*)/60
  205. payment_avg_time
  206. from dwd_fact_order_info
  207. where dt='$do_date' and payment_time is not null
  208. )tmp_time
  209. on tmp_payment.dt=tmp_time.dt;
  210. insert into table ads_payment_daycount
  211. select
  212. tmp_payment.dt,
  213. tmp_payment.payment_count,
  214. tmp_payment.payment_amount,
  215. tmp_payment.payment_user_count,
  216. tmp_skucount.payment_sku_count,
  217. tmp_time.payment_avg_time
  218. from
  219. (
  220. select
  221. '$do_date' dt,
  222. sum(payment_count) payment_count,
  223. sum(payment_amount) payment_amount,
  224. sum(if(payment_count>0,1,0)) payment_user_count
  225. from dws_user_action_daycount
  226. where dt='$do_date'
  227. )tmp_payment
  228. join
  229. (
  230. select
  231. '$do_date' dt,
  232. sum(if(payment_count>0,1,0)) payment_sku_count
  233. from dws_sku_action_daycount
  234. where dt='$do_date'
  235. )tmp_skucount
  236. on tmp_payment.dt=tmp_skucount.dt
  237. join
  238. (
  239. select
  240. '$do_date' dt,
  241. sum(unix_timestamp(payment_time)-
  242. unix_timestamp(create_time))/count(*)/60
  243. payment_avg_time
  244. from dwd_fact_order_info
  245. where dt='$do_date' and payment_time is not null
  246. )tmp_time
  247. on tmp_payment.dt=tmp_time.dt;

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读