Skip to content

Commit 216bf23

Browse files
authored
Ecommerce 2024 queries (#3786)
* Create top_vendors.sql * Create top_vendors_crux_rank.sql slightly adjusted ranks from 2021 * Create median_lighthouse_score_ecommsites.sql * Create core_web_vitals_passingmetrics_byvendor_bydevice.sql * Create top_analytics_providers_bydevice_wapp.sql * Create top_abtesting_bydevice.sql * Create percent_of_ecommsites_using_cmp.sql * Create top_cmp_bydevice.sql this is new. * Update top_vendors_crux_rank.sql updated for new schema * Delete sql/2024/ecommerce/top_vendors.sql included in the rank one * Update median_lighthouse_score_ecommsites.sql updated for new schema and also added rank for further analysis * Update median_lighthouse_score_ecommsites.sql * Update top_vendors_crux_rank.sql * Update median_lighthouse_score_ecommsites.sql * Update top_cmp_bydevice.sql * Update top_cmp_bydevice.sql * Delete sql/2024/ecommerce/percent_of_ecommsites_using_cmp.sql * Update core_web_vitals_passingmetrics_byvendor_bydevice.sql * Delete sql/2024/ecommerce/top_analytics_providers_bydevice_wapp.sql * Delete sql/2024/ecommerce/top_abtesting_bydevice.sql * Create top_shopsystem_by_geo.sql * Create core_web_vitals_yoy.sql * Create top_payment_by_geo.sql * Create top_shipping_by_geo.sql * Create top_shipping_yoy.sql * Create top_payment_yoy.sql * Delete sql/2024/ecommerce/top_cmp_bydevice.sql * Update top_vendors_crux_rank.sql Make it more like the CMS one to be 100% sure * Create top_ecommerce.sql * Update core_web_vitals_yoy.sql * Update core_web_vitals_yoy.sql remove havings * Update top_payment_yoy.sql * Update top_shipping_yoy.sql * Update top_ecommerce.sql * fix lintin errors
1 parent fd87798 commit 216bf23

10 files changed

Lines changed: 986 additions & 0 deletions
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#standardSQL
2+
# CrUX Core Web Vitals performance of Ecommerce vendors by device (fid was upated to inp, and is non optinal now)
3+
CREATE TEMP FUNCTION IS_GOOD (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
4+
good / (good + needs_improvement + poor) >= 0.75
5+
);
6+
7+
CREATE TEMP FUNCTION IS_NON_ZERO (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
8+
good + needs_improvement + poor > 0
9+
);
10+
11+
12+
SELECT
13+
client,
14+
ecomm,
15+
COUNT(DISTINCT origin) AS origins,
16+
# Origins with good LCP divided by origins with any LCP.
17+
SAFE_DIVIDE(
18+
COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)),
19+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))) AS pct_good_lcp,
20+
21+
# Origins with good INP divided by origins with any inp.
22+
SAFE_DIVIDE(
23+
COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)),
24+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))) AS pct_good_inp,
25+
26+
# Origins with good CLS divided by origins with any CLS.
27+
SAFE_DIVIDE(
28+
COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
29+
COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cls,
30+
31+
# Origins with good LCP, inp, and CLS divided by origins with any LCP, inp, and CLS.
32+
SAFE_DIVIDE(
33+
COUNT(DISTINCT IF(
34+
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
35+
IS_GOOD(fast_inp, avg_inp, slow_inp) AND
36+
IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
37+
COUNT(DISTINCT IF(
38+
IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND
39+
IS_NON_ZERO(fast_inp, avg_inp, slow_inp) AND
40+
IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cwv
41+
FROM
42+
`chrome-ux-report.materialized.device_summary`
43+
JOIN (
44+
SELECT
45+
_TABLE_SUFFIX AS client,
46+
url,
47+
app AS ecomm
48+
FROM
49+
`httparchive.technologies.2024_06_01_*`
50+
WHERE
51+
category = 'Ecommerce' AND
52+
(
53+
app != 'Cart Functionality' AND
54+
app != 'Google Analytics Enhanced eCommerce'
55+
)
56+
)
57+
ON
58+
CONCAT(origin, '/') = url AND
59+
IF(device = 'desktop', 'desktop', 'mobile') = client
60+
WHERE
61+
date = '2024-06-01'
62+
GROUP BY
63+
client,
64+
ecomm
65+
ORDER BY
66+
origins DESC
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
# app passing core web vitals
2+
# core_web_vitals_yoy.sql
3+
CREATE TEMP FUNCTION IS_GOOD (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
4+
good / (good + needs_improvement + poor) >= 0.75
5+
);
6+
7+
CREATE TEMP FUNCTION IS_NON_ZERO (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
8+
good + needs_improvement + poor > 0
9+
);
10+
11+
-- Year 2024
12+
SELECT
13+
2024 AS year,
14+
client,
15+
app,
16+
COUNT(DISTINCT origin) AS origins,
17+
-- Origins with good LCP divided by origins with any LCP.
18+
SAFE_DIVIDE(
19+
COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)),
20+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))
21+
) AS pct_good_lcp,
22+
23+
-- Origins with good INP divided by origins with any INP.
24+
SAFE_DIVIDE(
25+
COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)),
26+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))
27+
) AS pct_good_inp,
28+
29+
-- Origins with good CLS divided by origins with any CLS.
30+
SAFE_DIVIDE(
31+
COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
32+
COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))
33+
) AS pct_good_cls,
34+
35+
-- Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS.
36+
SAFE_DIVIDE(
37+
COUNT(DISTINCT IF(
38+
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
39+
IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND
40+
IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL
41+
)),
42+
COUNT(DISTINCT IF(
43+
IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND
44+
IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL
45+
))
46+
) AS pct_good_cwv
47+
FROM
48+
`chrome-ux-report.materialized.device_summary`
49+
JOIN (
50+
SELECT
51+
client,
52+
page AS url,
53+
technologies.technology AS app
54+
FROM
55+
`httparchive.all.pages`,
56+
UNNEST(technologies) AS technologies,
57+
UNNEST(technologies.categories) AS cats
58+
WHERE
59+
cats = 'Ecommerce' AND
60+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce') AND
61+
technologies.technology != '' AND
62+
date = '2024-06-01' AND
63+
is_root_page
64+
)
65+
ON
66+
CONCAT(origin, '/') = url AND
67+
IF(device = 'desktop', 'desktop', 'mobile') = client
68+
WHERE
69+
date = '2024-06-01'
70+
GROUP BY
71+
client,
72+
app
73+
74+
75+
UNION ALL
76+
77+
-- Year 2023
78+
SELECT
79+
2023 AS year,
80+
client,
81+
app,
82+
COUNT(DISTINCT origin) AS origins,
83+
SAFE_DIVIDE(
84+
COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)),
85+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))
86+
) AS pct_good_lcp,
87+
SAFE_DIVIDE(
88+
COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)),
89+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))
90+
) AS pct_good_inp,
91+
SAFE_DIVIDE(
92+
COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
93+
COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))
94+
) AS pct_good_cls,
95+
SAFE_DIVIDE(
96+
COUNT(DISTINCT IF(
97+
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
98+
IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND
99+
IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL
100+
)),
101+
COUNT(DISTINCT IF(
102+
IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND
103+
IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL
104+
))
105+
) AS pct_good_cwv
106+
FROM
107+
`chrome-ux-report.materialized.device_summary`
108+
JOIN (
109+
SELECT
110+
client,
111+
page AS url,
112+
technologies.technology AS app
113+
FROM
114+
`httparchive.all.pages`,
115+
UNNEST(technologies) AS technologies,
116+
UNNEST(technologies.categories) AS cats
117+
WHERE
118+
cats = 'Ecommerce' AND
119+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce') AND
120+
technologies.technology != '' AND
121+
date = '2023-06-01' AND
122+
is_root_page
123+
)
124+
ON
125+
CONCAT(origin, '/') = url AND
126+
IF(device = 'desktop', 'desktop', 'mobile') = client
127+
WHERE
128+
date = '2023-06-01'
129+
GROUP BY
130+
client,
131+
app
132+
133+
UNION ALL
134+
135+
-- Year 2022
136+
SELECT
137+
2022 AS year,
138+
client,
139+
app,
140+
COUNT(DISTINCT origin) AS origins,
141+
SAFE_DIVIDE(
142+
COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)),
143+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))
144+
) AS pct_good_lcp,
145+
SAFE_DIVIDE(
146+
COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)),
147+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))
148+
) AS pct_good_inp,
149+
SAFE_DIVIDE(
150+
COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
151+
COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))
152+
) AS pct_good_cls,
153+
SAFE_DIVIDE(
154+
COUNT(DISTINCT IF(
155+
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
156+
IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND
157+
IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL
158+
)),
159+
COUNT(DISTINCT IF(
160+
IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND
161+
IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL
162+
))
163+
) AS pct_good_cwv
164+
FROM
165+
`chrome-ux-report.materialized.device_summary`
166+
JOIN (
167+
SELECT
168+
client,
169+
page AS url,
170+
technologies.technology AS app
171+
FROM
172+
`httparchive.all.pages`,
173+
UNNEST(technologies) AS technologies,
174+
UNNEST(technologies.categories) AS cats
175+
WHERE
176+
cats = 'Ecommerce' AND
177+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce') AND
178+
technologies.technology != '' AND
179+
date = '2022-06-01' AND
180+
is_root_page
181+
)
182+
ON
183+
CONCAT(origin, '/') = url AND
184+
IF(device = 'desktop', 'desktop', 'mobile') = client
185+
WHERE
186+
date = '2022-06-01'
187+
GROUP BY
188+
client,
189+
app
190+
191+
192+
ORDER BY
193+
origins DESC
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
WITH technologies AS (
2+
SELECT
3+
client,
4+
page,
5+
category,
6+
technology,
7+
rank,
8+
lighthouse,
9+
COUNT(DISTINCT page) OVER (PARTITION BY client) AS total_websites
10+
FROM `httparchive.all.pages`,
11+
UNNEST(technologies) AS tech,
12+
UNNEST(categories) AS category
13+
WHERE
14+
date = '2024-06-01' AND
15+
is_root_page = TRUE
16+
)
17+
18+
SELECT
19+
client,
20+
rank,
21+
technology,
22+
ARRAY_AGG(DISTINCT category) AS categories,
23+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.performance.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_performance,
24+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.accessibility.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_accessibility,
25+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.seo.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_seo,
26+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.best-practices.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_best_practices,
27+
ANY_VALUE(total_websites) AS total_websites,
28+
COUNT(DISTINCT page) AS number_of_websites,
29+
COUNT(DISTINCT page) / ANY_VALUE(total_websites) AS percent_of_websites
30+
FROM technologies
31+
WHERE
32+
category = 'Ecommerce' AND
33+
(
34+
technology != 'Cart Functionality' AND
35+
technology != 'Google Analytics Enhanced eCommerce'
36+
)
37+
GROUP BY
38+
client,
39+
rank,
40+
technology
41+
ORDER BY
42+
client,
43+
number_of_websites DESC

0 commit comments

Comments
 (0)