Advertisement
volday

Послед-ть шагов воронки по зак-м FBC за посл 30д

Sep 23rd, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.50 KB | None | 0 0
  1. #standardSQL
  2. --Последовательность шагов воронки по заказам в модели атрибуции [New] Funnel Based with Completed Orders за последние 30 дней
  3. CREATE TEMP FUNCTION AggArrayToGroupString(arr ARRAY<STRING>)
  4.     RETURNS STRING AS ( (
  5.     SELECT STRING_AGG(s_a, ' > ') FROM (
  6.     SELECT
  7.     IF (COUNT(n) = 1, ANY_VALUE(n), CONCAT(ANY_VALUE(n),' (x',CAST(COUNT(n) AS STRING),')')) AS s_a
  8.     FROM (
  9.     SELECT
  10.     COUNTIF(n != p) OVER(ORDER BY rn) AS nb, n, p, rn
  11.     FROM (
  12.     SELECT
  13.     LAG(n) OVER(ORDER BY rn) AS p, n, rn
  14.     FROM (
  15.     SELECT
  16.     e AS n, ROW_NUMBER() OVER() AS rn
  17.     FROM
  18.     UNNEST(arr) AS e)
  19.     ORDER BY
  20.     rn ))
  21.     GROUP BY
  22.     nb )));
  23.  
  24. SELECT
  25.     attribution_chain_transaction, --количество транзакций
  26.     chains_steps
  27. FROM
  28. (
  29.     SELECT
  30.         MIN(chain_transaction_summary) AS attribution_chain_transaction_summary,
  31.         SUM(transaction_count) AS attribution_chain_transaction, --количество транзакций
  32.         agg_string AS chains_steps
  33.     FROM
  34.     (
  35.         SELECT
  36.             transaction_id,
  37.             agg_string,
  38.             chain_transaction_summary,
  39.             transaction_count,
  40.             transaction_revenue,
  41.             SUM(transaction_revenue) OVER() AS chain_revenue_summary
  42.         FROM
  43.         (
  44.             SELECT
  45.                 transaction_id,
  46.                 AggArrayToGroupString(ARRAY_AGG(CONCAT(steps))) AS agg_string,
  47.                 MIN(revenue) AS transaction_revenue,
  48.                 COUNT(DISTINCT transaction_id) AS transaction_count,
  49.                 COUNT(DISTINCT transaction_id) OVER() AS chain_transaction_summary
  50.             FROM
  51.             (
  52.                 SELECT
  53.                     transaction_id AS transaction_id,
  54.                     revenue AS revenue,
  55.                     SOURCE,
  56.                     medium,
  57.                     campaign,
  58.                     CASE active_step
  59. WHEN 1 THEN '{AttributionPage.Edit.DetailTab.Columns.Step1.Title}'
  60. WHEN 2 THEN '{AttributionPage.Edit.DetailTab.Columns.Step3.Title}'
  61. WHEN 3 THEN '{AttributionPage.Edit.DetailTab.Columns.Step4.Title}'
  62. WHEN 4 THEN '{AttributionPage.Edit.DetailTab.Columns.Step5.Title}'
  63. WHEN 5 THEN 'Purchase Offline'
  64. ELSE '(not set)' END AS steps,
  65.     RANK() OVER(PARTITION BY transaction_id ORDER BY DATE DESC) AS rowf
  66.                     FROM
  67.                         `owox-140513.Funnel_Based_with_Completed_Orders.values`
  68.                     WHERE
  69.         DATE(_PARTITIONTIME) BETWEEN DATE(TIMESTAMP_ADD(TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY)), INTERVAL -30 DAY)), INTERVAL -30 DAY)) AND DATE(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))
  70.         AND DATE(TIMESTAMP_MILLIS(transaction_time)) BETWEEN DATE(TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY)), INTERVAL -30 DAY))) AND DATE(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))
  71.  
  72.                     ORDER BY
  73.                         TIME
  74.             )
  75.             WHERE
  76.                 rowf = 1
  77.             GROUP BY
  78.                 transaction_id
  79.         )
  80.     )
  81.         GROUP BY
  82.             agg_string
  83. )
  84.         ORDER BY attribution_chain_transaction DESC
  85.         LIMIT 2500
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement