Advertisement
volday

Доля транз по камп в ROPO-транз за последние 30д с конв-окно

Sep 17th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.95 KB | None | 0 0
  1. #standardSQL
  2. --Доля транзакций по кампаниям в ROPO-транзакциях за последние 30 дней с конверсионными окном 2 недели в сравнении между моделью атрибуции [New] Funnel Based with Completed Orders и онлайн-транзакциями
  3. SELECT
  4.             metric_online_only, --доля транзакций ONLINE
  5.             metric_ropo, --доля транзакций ROPO
  6.  
  7.         trafficSource_source, --источник трафика
  8.         trafficSource_medium, --канал
  9.         trafficSource_campaign --campaign
  10.  
  11.  
  12. FROM
  13. (
  14.  
  15.     SELECT
  16.             SOURCE AS trafficSource_source,
  17.             medium AS trafficSource_medium,
  18.             campaign AS trafficSource_campaign,
  19.            
  20.         SAFE_DIVIDE(transactions_count_online_only, transactions_count_online_only_summary) AS metric_online_only,
  21.         SAFE_DIVIDE(transactions_count_ropo, transactions_count_ropo_summary) AS metric_ropo
  22.  
  23.  
  24.     FROM
  25.     (
  26.         SELECT
  27.                 SOURCE,
  28.                 medium,
  29.                 campaign,
  30.                     transactions_count_online_only,
  31.     transactions_count_ropo
  32.         ,
  33.         SUM(transactions_count_online_only) OVER() AS transactions_count_online_only_summary,
  34.         SUM(transactions_count_ropo) OVER() AS transactions_count_ropo_summary
  35.  
  36.         FROM
  37.         (
  38.             SELECT
  39.                     SOURCE,
  40.                     medium,
  41.                     campaign,
  42.                                 SUM(IF(has_offline = 0 AND has_online = 1, 1, 0)) AS transactions_count_online_only,
  43.             SUM(IF(has_offline = 1 AND has_online = 1, 1, 0)) AS transactions_count_ropo
  44.  
  45.             FROM
  46.             (
  47.                 SELECT
  48.                         VALUES.SOURCE AS SOURCE,
  49.                         VALUES.medium AS medium,
  50.                         VALUES.campaign AS campaign,
  51.                     has_offline,
  52.                     has_online,
  53.                     attributed_revenue
  54.                 FROM
  55.                 (
  56.                     SELECT
  57.                         session_id,
  58.                         transaction_id,
  59.                         user_id,
  60.                             MIN(SOURCE) AS SOURCE,
  61.                             MIN(medium) AS medium,
  62.                             MIN(campaign) AS campaign,
  63.                         SUM(revenue * VALUE) AS attributed_revenue,
  64.                         SUM(IF(active_step = 5, 1, 0)) AS transactions_count,
  65.                         MAX(has_offline) AS has_offline,
  66.                         MAX(has_online) AS has_online,
  67.                         MIN(sessionTimeInSeconds) AS sessionTimeInSeconds
  68.                     FROM
  69.                     (
  70.                         SELECT
  71.                             session_id,
  72.                             transaction_id,
  73.                             VALUE,
  74.                             user_id,
  75.                                 IFNULL(SOURCE, 'NULL') AS SOURCE,
  76.                                 IFNULL(medium, 'NULL') AS medium,
  77.                                 IFNULL(campaign, 'NULL') AS campaign,
  78.                             revenue,
  79.                             active_step,
  80.                             TIME / 1000 AS sessionTimeInSeconds,
  81.                             MAX(IF(data_source=101, 1, 0)) OVER(partition BY transaction_id) AS has_offline,
  82.                             MAX(IF(data_source=101, 0, 1)) OVER(partition BY transaction_id) AS has_online,
  83.     RANK() OVER(PARTITION BY transaction_id ORDER BY DATE DESC) AS rowf
  84.                         FROM
  85.                             `owox-140513.Funnel_Based_with_Completed_Orders.values`
  86.                         WHERE
  87.                             _PARTITIONTIME BETWEEN TIMESTAMP_ADD(TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY)), INTERVAL -30 DAY)), INTERVAL -1209600 SECOND) AND TIMESTAMP_ADD(TIMESTAMP_ADD(TIMESTAMP_TRUNC(TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY)), INTERVAL -1 DAY)), DAY), INTERVAL 1 DAY), INTERVAL -1 SECOND)
  88.                             AND TIMESTAMP_MILLIS(transaction_time) BETWEEN TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY)), INTERVAL -30 DAY)) AND TIMESTAMP_ADD(TIMESTAMP_ADD(TIMESTAMP_TRUNC(TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY)), INTERVAL -1 DAY)), DAY), INTERVAL 1 DAY), INTERVAL -1 SECOND)
  89.                     )
  90.                     WHERE
  91.                         rowf = 1 AND ((has_offline = 1 AND has_online = 1) OR (has_offline = 0 AND has_online = 1))
  92.                     GROUP BY
  93.                         session_id,
  94.                         transaction_id,
  95.                         user_id
  96.                 ) AS VALUES
  97.             )
  98.             GROUP BY
  99.                     SOURCE,
  100.                     medium,
  101.                     campaign
  102.         )
  103.     )
  104. )
  105.  
  106.  
  107.         ORDER BY metric_online_only DESC
  108.         LIMIT 2500
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement