-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsql_analysis.sql
More file actions
110 lines (90 loc) · 2.16 KB
/
Copy pathsql_analysis.sql
File metadata and controls
110 lines (90 loc) · 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
WITH base AS (
SELECT
user_pseudo_id,
event_name,
event_timestamp,
geo.country AS country,
traffic_source,
device,
-- витягнули один раз
(SELECT value.int_value
FROM UNNEST(event_params)
WHERE key = 'ga_session_id') AS session_id,
(SELECT value.string_value
FROM UNNEST(event_params)
WHERE key = 'page_location') AS page_location
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
),
prepared AS (
SELECT
*,
CONCAT(user_pseudo_id, '-', CAST(session_id AS STRING)) AS user_session_id
FROM base
WHERE session_id IS NOT NULL
),
sessions_info AS (
SELECT
user_session_id,
user_pseudo_id,
session_id,
COALESCE(
REGEXP_EXTRACT(page_location, r'https?://[^/]+(/.*)'),
REGEXP_EXTRACT(page_location, r'(/.*)')
) AS landing_page_location,
country,
traffic_source.source AS source,
traffic_source.medium AS medium,
traffic_source.name AS campaign,
device.category AS device_category,
device.language AS device_language,
device.operating_system AS operating_system
FROM prepared
WHERE event_name = 'session_start'
),
events AS (
SELECT
user_session_id,
user_pseudo_id,
session_id,
event_name,
TIMESTAMP_MICROS(event_timestamp) AS event_time,
DATE(TIMESTAMP_MICROS(event_timestamp)) AS event_date,
CASE event_name
WHEN 'session_start' THEN 1
WHEN 'view_item' THEN 2
WHEN 'add_to_cart' THEN 3
WHEN 'begin_checkout' THEN 4
WHEN 'add_shipping_info' THEN 5
WHEN 'add_payment_info' THEN 6
WHEN 'purchase' THEN 7
END AS funnel_step
FROM prepared
WHERE event_name IN (
'session_start',
'view_item',
'add_to_cart',
'begin_checkout',
'add_shipping_info',
'add_payment_info',
'purchase'
)
)
SELECT
e.user_session_id,
e.user_pseudo_id,
e.session_id,
e.event_time,
e.event_date,
e.event_name,
e.funnel_step,
s.landing_page_location,
s.country,
s.device_category,
s.device_language,
s.operating_system,
s.source,
s.medium,
s.campaign
FROM events e
INNER JOIN sessions_info s
USING (user_session_id)