Advertisement
kirzecy670

Untitled

Dec 3rd, 2024
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.66 KB | None | 0 0
  1. WITH users AS (
  2. SELECT
  3. uid,
  4. COUNT(*) AS days, -- Total number of active days
  5. SUM(LENGTH(open) + LENGTH(open_first)) AS sessions, -- Total sessions across open types
  6. SUM(notEmpty(open)) AS open_actions, -- Total count of 'open' actions
  7. SUM(notEmpty(open_function_records)) AS open_func_records, -- Total count of 'open_function_records'
  8. -- SUM(notEmpty(listen_live_clicked)) AS listen_live_clicks, -- Optional: Total 'listen_live_clicked' actions
  9. -- SUM(notEmpty(listen_live_started)) AS listen_live_starts, -- Optional: Total 'listen_live_started' actions
  10. SUM(notEmpty(open_function_noise)) AS open_func_noise, -- Total count of 'open_function_noise'
  11. -- SUM(notEmpty(noise_sent)) AS noise_sent_clicks, -- Optional: Total 'noise_sent' actions
  12. -- SUM(notEmpty(noise_requested)) AS noise_requests, -- Optional: Total 'noise_requested' actions
  13. SUM(notEmpty(open_function_zones)) AS open_func_zones, -- Total count of 'open_function_zones'
  14. -- SUM(notEmpty(zones_place_create)) AS zones_place_creates, -- Optional: Total 'zones_place_create' actions
  15. -- SUM(notEmpty(zones_place_create_done)) AS zones_place_creates_done, -- Optional: Total 'zones_place_create_done' actions
  16. SUM(notEmpty(open_parent_activity)) AS open_parent_activity, -- Total count of 'open_parent_activity'
  17. SUM(notEmpty(open_function_appstat)) AS open_func_appstat -- Total count of 'open_function_appstat'
  18. FROM
  19. analytics.parent_actions pa
  20. WHERE
  21. dt >= date_trunc('week', today()) - INTERVAL '30 day'
  22. AND dt < date_trunc('week', today())
  23. GROUP BY
  24. uid
  25. ),
  26. metrics AS (
  27. SELECT
  28. region,
  29. platform,
  30. full_reg_datetime,
  31. uid,
  32. days,
  33. sessions,
  34. CASE
  35. WHEN dateDiff('day', full_reg_datetime, now()) < 7 THEN 'A. 1 week'
  36. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 7 AND 29 THEN 'B. 2-4 weeks'
  37. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 30 AND 59 THEN 'C. 2 month'
  38. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 60 AND 89 THEN 'D. 3 month'
  39. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 90 AND 119 THEN 'E. 4 month'
  40. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 120 AND 149 THEN 'F. 5 month'
  41. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 120 AND 179 THEN 'G. 6 months'
  42. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 180 AND 364 THEN 'H. 7-12 months'
  43. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 365 AND 729 THEN 'I. 1-2 years'
  44. ELSE 'J. > 2 years'
  45. END AS weeks_group,
  46. CASE
  47. WHEN child_android_cnt > 0 AND child_ios_cnt > 0 THEN 'both'
  48. WHEN child_android_cnt > 0 THEN 'android'
  49. WHEN child_ios_cnt > 0 THEN 'ios'
  50. WHEN child_watch_cnt > 0 THEN 'watch'
  51. ELSE 'other'
  52. END AS child_group,
  53. CASE
  54. WHEN days BETWEEN 29 AND 30 THEN 'F. 29-30 days'
  55. WHEN days BETWEEN 22 AND 28 THEN 'E. 22-28 days'
  56. WHEN days BETWEEN 15 AND 21 THEN 'D. 15-21 days'
  57. WHEN days BETWEEN 8 AND 14 THEN 'C. 8-14 days'
  58. WHEN days BETWEEN 3 AND 7 THEN 'B. 3-7 days'
  59. WHEN days BETWEEN 1 AND 2 THEN 'A. 1-2 days'
  60. ELSE 'Other'
  61. END AS activity_group,
  62. ROUND(sessions / NULLIF(days, 0), 0) AS avg_sessions_p_day
  63. FROM
  64. analytics.parent_properties pp
  65. JOIN
  66. users USING (uid)
  67. WHERE
  68. is_full_register
  69. AND full_reg_datetime >= '2016-01-01'
  70. AND full_reg_datetime < date_trunc('week', today())
  71. )
  72. SELECT
  73. region,
  74. platform,
  75. activity_group,
  76. child_group,
  77. weeks_group,
  78. -- avg_sessions_p_day,
  79. SUM(metrics.sessions) AS session,
  80. SUM(days) AS day,
  81. uniqExact(uid) AS users
  82. FROM
  83. metrics
  84. WHERE
  85. region IN ('ru', 'global')
  86. AND platform IN ('iOS', 'Android')
  87. GROUP BY
  88. 1, 2, 3, 4, 5, 6
  89. ORDER BY
  90. 1, 2, 3, 4, 5, 6;
  91.  
  92. --// Гистограммы для ресерчей
  93. WITH users AS (
  94. SELECT
  95. uid,
  96. COUNT(*) AS days,
  97. SUM(LENGTH(open) + LENGTH(open_first)) AS sessions
  98. FROM
  99. analytics.parent_actions
  100. WHERE
  101. dt >= date_trunc('week', today()) - INTERVAL '30 day'
  102. AND dt < date_trunc('week', today())
  103. GROUP BY
  104. uid
  105. ),
  106. metrics AS (
  107. SELECT
  108. region,
  109. platform,
  110. full_reg_datetime,
  111. uid,
  112. days,
  113. sessions,
  114. ROUND(sessions / days) as avg_sessions,
  115. dateDiff('week', full_reg_datetime, now()) AS weeks_difference,
  116. CASE
  117. WHEN child_android_cnt > 0 AND child_ios_cnt > 0 THEN 'both'
  118. WHEN child_android_cnt > 0 THEN 'android'
  119. WHEN child_ios_cnt > 0 THEN 'ios'
  120. WHEN child_watch_cnt > 0 THEN 'watch'
  121. ELSE 'other'
  122. END AS child_group
  123. FROM
  124. analytics.parent_properties
  125. JOIN
  126. users USING (uid)
  127. WHERE
  128. is_full_register
  129. AND full_reg_datetime >= '2016-01-01'
  130. AND full_reg_datetime < date_trunc('week', today())
  131. )
  132. SELECT
  133. region,
  134. platform,
  135. child_group,
  136. days,
  137. IF(weeks_difference >= 156, 157, weeks_difference) AS weeks_difference,
  138. avg_sessions AS avg_sessions_p_day,
  139. uniqExact(uid) AS users
  140. FROM
  141. metrics
  142. WHERE
  143. region IN ('ru', 'global')
  144. AND platform IN ('iOS', 'Android')
  145. GROUP BY
  146. region, platform, child_group, days, weeks_difference, avg_sessions_p_day
  147. ORDER BY
  148. region, platform, child_group, weeks_difference, days, avg_sessions_p_day;
  149.  
  150. --//
  151. SELECT
  152. uid,
  153. COUNT(*) AS days,
  154. SUM(LENGTH(open) + LENGTH(open_first)) AS sessions
  155. FROM
  156. analytics.parent_actions pa
  157. WHERE
  158. dt >= date_trunc('week', today()) - INTERVAL '30 day'
  159. AND dt < date_trunc('week', today())
  160. GROUP BY
  161. uid
  162. LIMIT 100;
  163.  
  164. --// Страны_Тиры
  165. SELECT dt, ipc, os
  166. FROM billing.a_full_register_traction;
  167.  
  168. --// L1
  169. Сегменты
  170. - По регионам
  171. - По Кол-ву детей
  172. - По вторым родителям
  173. - Дети Андроид/iOS дети, Both.
  174. - Сколько Активных Детей
  175. - Возраст детей?
  176. - ???
  177. - Сегменты по Фичам (Использовал/Не_Использовал), Статистика + Фичи на главном экране (Лета, Места, Звук и т.д.)
  178. - Сегменты по использованию
  179. - Сегменты по использованию приложения (Кака-то активность в апке, напр. Кол-во дней использования? Кол-во входов? ХЗ)
  180.  
  181. --// L2
  182. -- Посмотреть разделение по устройствам и платформам, а также гео. (сделано)*
  183. -- Посмотреть разделение по траффику: органика и неорганика. (еще не сделано)*
  184. -- Сделать разбивку по Подписке (еще не сделано)*
  185. -- Сделать разбивку по Фичам (еще не сделано)*
  186.  
  187. --// L3
  188. -- Разбил пользователей на группы, по кол-ву дней. Может надо было брать минимум 30 дней назад окно за месяц?
  189. -- Фильтр по дате реги нужен, динамический (есть в Табло уже) // Посмотрел но там +/- голяк. Нужно было как-то брать окна с даты реги или что-то такое ХЗ, тк фильтры я делало под WAU а не когорты.
  190. -- Надо как-то глянуть на активных с кучей дней активности, как у них сессии внутри распределены, FLAT по дням или есть какие-то пики например в начале, а потом 1-2 просмотра карты в день условно.
  191. -- Убрать ПЕРЕУСТАНОВЩИКОВ
  192.  
  193. --// Гистограммы V2 с фичами
  194. WITH
  195. pre_aggregated_data AS (
  196. SELECT
  197. uid,
  198. dt,
  199. LENGTH(open) + LENGTH(open_first) AS session_length,
  200. notEmpty(open_function_records) AS is_open_func_records,
  201. LENGTH(open_function_records) AS len_func_records,
  202. notEmpty(open_function_noise) AS is_open_func_noise,
  203. LENGTH(open_function_noise) AS len_func_noise,
  204. notEmpty(open_function_zones) AS is_open_func_zones,
  205. LENGTH(open_function_zones) AS len_func_zones,
  206. notEmpty(open_parent_activity) AS is_open_parent_activity,
  207. LENGTH(open_parent_activity) AS len_parent_activity,
  208. notEmpty(open_function_appstat) AS is_open_func_appstat,
  209. LENGTH(open_function_appstat) AS len_func_appstat
  210. FROM
  211. analytics.parent_actions pa
  212. WHERE
  213. dt >= date_trunc('week', today()) - INTERVAL '30 day'
  214. AND dt < date_trunc('week', today())
  215. ),
  216. users AS (
  217. SELECT
  218. uid,
  219. COUNT(uid) AS days, -- Aggregate days
  220. SUM(session_length) AS sessions,
  221. SUM(is_open_func_records) AS open_func_records,
  222. SUM(len_func_records) AS len_func_records,
  223. SUM(is_open_func_noise) AS open_func_noise,
  224. SUM(len_func_noise) AS len_func_noise,
  225. SUM(is_open_func_zones) AS open_func_zones,
  226. SUM(len_func_zones) AS len_func_zones,
  227. SUM(is_open_parent_activity) AS open_parent_activity,
  228. SUM(len_parent_activity) AS len_parent_activity,
  229. SUM(is_open_func_appstat) AS open_func_appstat,
  230. SUM(len_func_appstat) AS len_func_appstat
  231. FROM
  232. pre_aggregated_data
  233. GROUP BY
  234. uid
  235. ORDER BY
  236. sessions DESC
  237. ),
  238. metrics AS (
  239. SELECT
  240. region,
  241. platform,
  242. toDate(full_reg_datetime) as full_reg_datetime,
  243. uid,
  244. days,
  245. sessions,
  246. open_func_records,
  247. len_func_records,
  248. open_func_noise,
  249. len_func_noise,
  250. open_func_zones,
  251. len_func_zones,
  252. open_parent_activity,
  253. len_parent_activity,
  254. open_func_appstat,
  255. len_func_appstat,
  256. CASE
  257. WHEN dateDiff('day', full_reg_datetime, now()) < 7 THEN 'A. 1 week'
  258. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 7 AND 29 THEN 'B. 2-4 weeks'
  259. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 30 AND 59 THEN 'C. 2 month'
  260. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 60 AND 89 THEN 'D. 3 month'
  261. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 90 AND 119 THEN 'E. 4 month'
  262. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 120 AND 149 THEN 'F. 5 month'
  263. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 120 AND 179 THEN 'G. 6 months'
  264. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 180 AND 364 THEN 'H. 7-12 months'
  265. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 365 AND 729 THEN 'I. 1-2 years'
  266. ELSE 'J. > 2 years'
  267. END AS weeks_group,
  268. CASE
  269. WHEN child_android_cnt > 0 AND child_ios_cnt > 0 THEN 'both'
  270. WHEN child_android_cnt > 0 THEN 'android'
  271. WHEN child_ios_cnt > 0 THEN 'ios'
  272. WHEN child_watch_cnt > 0 THEN 'watch'
  273. ELSE 'other'
  274. END AS child_group,
  275. CASE
  276. WHEN days BETWEEN 29 AND 30 THEN 'F. 29-30 days'
  277. WHEN days BETWEEN 22 AND 28 THEN 'E. 22-28 days'
  278. WHEN days BETWEEN 15 AND 21 THEN 'D. 15-21 days'
  279. WHEN days BETWEEN 8 AND 14 THEN 'C. 8-14 days'
  280. WHEN days BETWEEN 3 AND 7 THEN 'B. 3-7 days'
  281. WHEN days BETWEEN 1 AND 2 THEN 'A. 1-2 days'
  282. ELSE 'Other'
  283. END AS activity_group,
  284. ROUND(sessions / NULLIF(days, 0), 0) AS avg_sessions_p_day
  285. FROM
  286. analytics.parent_properties pp
  287. JOIN
  288. users USING (uid)
  289. WHERE
  290. is_full_register
  291. AND full_reg_datetime >= '2016-01-01'
  292. AND full_reg_datetime < date_trunc('week', today())
  293. )
  294. SELECT * FROM metrics
  295. WHERE
  296. region IN ('ru', 'global')
  297. AND platform IN ('iOS', 'Android')
  298. order by days DESC, sessions desc, uid;
  299.  
  300. --// Статистика
  301. WITH users AS (
  302. SELECT
  303. uid,
  304. COUNT(uid) AS days,
  305. uniqExact(dt) FILTER (WHERE action = 'appstat') as open_func_appstat_new,
  306. uniqExact(dt) FILTER (WHERE action = 'open_function_appstat') as open_func_appstat,
  307. count(uid) FILTER (WHERE action = 'appstat') AS len_func_appstat_new,
  308. count(uid) FILTER (WHERE action = 'open_function_appstat') AS len_func_appstat
  309. FROM
  310. stat.funnelTrack
  311. WHERE
  312. dt BETWEEN date_trunc('week', today()) - INTERVAL '1 month' AND date_trunc('week', today())
  313. AND action in ('appstat', 'open_function_appstat')
  314. GROUP BY
  315. uid
  316. )
  317. SELECT
  318. sum(open_func_appstat_new) as appstat_new,
  319. sum(open_func_appstat) as appstat,
  320. round(appstat_new/appstat*100, 1) as CR,
  321. uniqExact(uid) FILTER (WHERE open_func_appstat_new > 0) as uniq_func_appstat_new,
  322. uniqExact(uid) FILTER (WHERE open_func_appstat > 0) as uniq_func_appstat,
  323. round(uniq_func_appstat_new/uniq_func_appstat*100, 1) as CR_
  324. FROM
  325. users
  326. limit 100;
  327.  
  328. metrics AS (
  329. SELECT
  330. region,
  331. platform,
  332. full_reg_datetime,
  333. uid,
  334. days,
  335. sessions,
  336. CASE
  337. WHEN dateDiff('day', full_reg_datetime, now()) < 7 THEN 'A. 1 week'
  338. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 7 AND 29 THEN 'B. 2-4 weeks'
  339. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 30 AND 59 THEN 'C. 2 month'
  340. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 60 AND 89 THEN 'D. 3 month'
  341. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 90 AND 119 THEN 'E. 4 month'
  342. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 120 AND 149 THEN 'F. 5 month'
  343. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 120 AND 179 THEN 'G. 6 months'
  344. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 180 AND 364 THEN 'H. 7-12 months'
  345. WHEN dateDiff('day', full_reg_datetime, now()) BETWEEN 365 AND 729 THEN 'I. 1-2 years'
  346. ELSE 'J. > 2 years'
  347. END AS weeks_group,
  348. CASE
  349. WHEN child_android_cnt > 0 AND child_ios_cnt > 0 THEN 'both'
  350. WHEN child_android_cnt > 0 THEN 'android'
  351. WHEN child_ios_cnt > 0 THEN 'ios'
  352. WHEN child_watch_cnt > 0 THEN 'watch'
  353. ELSE 'other'
  354. END AS child_group,
  355. CASE
  356. WHEN days BETWEEN 29 AND 30 THEN 'F. 29-30 days'
  357. WHEN days BETWEEN 22 AND 28 THEN 'E. 22-28 days'
  358. WHEN days BETWEEN 15 AND 21 THEN 'D. 15-21 days'
  359. WHEN days BETWEEN 8 AND 14 THEN 'C. 8-14 days'
  360. WHEN days BETWEEN 3 AND 7 THEN 'B. 3-7 days'
  361. WHEN days BETWEEN 1 AND 2 THEN 'A. 1-2 days'
  362. ELSE 'Other'
  363. END AS activity_group,
  364. ROUND(sessions / NULLIF(days, 0), 0) AS avg_sessions_p_day
  365. FROM
  366. analytics.parent_properties pp
  367. JOIN
  368. users USING (uid)
  369. WHERE
  370. is_full_register
  371. AND full_reg_datetime >= '2016-01-01'
  372. AND full_reg_datetime < date_trunc('week', today())
  373. )
  374. SELECT
  375. region,
  376. platform,
  377. activity_group,
  378. child_group,
  379. weeks_group,
  380. -- avg_sessions_p_day,
  381. SUM(metrics.sessions) AS session,
  382. SUM(days) AS day,
  383. uniqExact(uid) AS users
  384. FROM
  385. metrics
  386. WHERE
  387. region IN ('ru', 'global')
  388. AND platform IN ('iOS', 'Android')
  389. GROUP BY
  390. 1, 2, 3, 4, 5, 6
  391. ORDER BY
  392. 1, 2, 3, 4, 5, 6;
  393.  
  394.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement