Le query avanzate in questa pagina si applicano ai dati di esportazione degli eventi di BigQuery per Google Analytics. Per esempi più semplici, consulta la pagina Query di base.
Prodotti acquistati dai clienti che hanno acquistato un determinato prodotto
La seguente query mostra quali altri prodotti sono stati acquistati dai clienti che hanno acquistato un prodotto specifico. Questo esempio non presuppone che i prodotti siano stati acquistati nello stesso ordine.
L'esempio ottimizzato si basa sulle funzionalità di scripting di BigQuery per definire una variabile che dichiara gli elementi su cui filtrare. Sebbene non migliori il rendimento, questo è un approccio più leggibile per la definizione delle variabili rispetto alla creazione di una tabella a valore singolo utilizzando una clausola WITH. La query semplificata utilizza quest'ultimo approccio utilizzando la clausola WITH.
La query semplificata crea un elenco separato di "acquirenti del prodotto A" ed esegue un join con questi dati. La query ottimizzata, invece, crea un elenco di tutti gli articoli acquistati da un utente in tutti gli ordini utilizzando la funzione ARRAY_AGG. Quindi, utilizzando la clausola WHERE esterna, la query filtra gli elenchi di acquisti di tutti gli utenti per target_item e vengono visualizzati solo gli articoli pertinenti.
Semplificato
-- Example: Products purchased by customers who purchased a specific product.
--
-- `Params` is used to hold the value of the selected product and is referenced
-- throughout the query.
WITH
Params AS (
-- Replace with selected item_name or item_id.
SELECT 'Google Navy Speckled Tee' AS selected_product
),
PurchaseEvents AS (
SELECT
user_pseudo_id,
items
FROM
-- Replace table name.
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
-- Replace date range.
_TABLE_SUFFIX BETWEEN '20201101' AND '20210131'
AND event_name = 'purchase'
),
ProductABuyers AS (
SELECT DISTINCT
user_pseudo_id
FROM
Params,
PurchaseEvents,
UNNEST(items) AS items
WHERE
-- item.item_id can be used instead of items.item_name.
items.item_name = selected_product
)
SELECT
items.item_name AS item_name,
SUM(items.quantity) AS item_quantity
FROM
Params,
PurchaseEvents,
UNNEST(items) AS items
WHERE
user_pseudo_id IN (SELECT user_pseudo_id FROM ProductABuyers)
-- item.item_id can be used instead of items.item_name
AND items.item_name != selected_product
GROUP BY 1
ORDER BY item_quantity DESC;
Ottimizzata
-- Optimized Example: Products purchased by customers who purchased a specific product.
-- Replace item name
DECLARE target_item STRING DEFAULT 'Google Navy Speckled Tee';
SELECT
IL.item_name AS item_name,
SUM(IL.quantity) AS quantity
FROM
(
SELECT
user_pseudo_id,
ARRAY_AGG(STRUCT(item_name, quantity)) AS item_list
FROM
-- Replace table
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`, UNNEST(items)
WHERE
-- Replace date range
_TABLE_SUFFIX BETWEEN '20201201' AND '20201210'
AND event_name = 'purchase'
GROUP BY
1
),
UNNEST(item_list) AS IL
WHERE
target_item IN (SELECT item_name FROM UNNEST(item_list))
-- Remove the following line if you want the target_item to appear in the results
AND target_item != IL.item_name
GROUP BY
item_name
ORDER BY
quantity DESC;
Spesa media per sessione di acquisto
Le seguenti query calcolano l'importo medio di denaro speso per sessione, tenendo conto solo delle sessioni in cui un utente ha effettuato un acquisto. Entrambe le query utilizzano un'espressione di tabella comune (CTE) per calcolare prima la spesa totale per ogni sessione di acquisto unica.
1. Importo medio speso per sessione di acquisto PER UTENTE:
Questa query mostra la spesa media per sessione per ogni singolo utente:
-- Calculates the average session spend per user.
WITH
session_spend AS (
SELECT
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id,
SUM(
COALESCE(
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'value'),
(SELECT value.float_value FROM UNNEST(event_params) WHERE key = 'value'),
(SELECT value.double_value FROM UNNEST(event_params) WHERE key = 'value'),
0.0)
) AS total_session_spend
FROM
-- Replace table name.
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
event_name = 'purchase'
-- Replace date range.
AND _TABLE_SUFFIX BETWEEN '20201101' AND '20210131'
AND EXISTS(SELECT 1 FROM UNNEST(event_params) WHERE key = 'ga_session_id' AND value.int_value IS NOT NULL)
GROUP BY
user_pseudo_id, session_id
)
SELECT
user_pseudo_id,
COUNT(session_id) AS number_of_purchase_sessions,
AVG(total_session_spend) AS avg_spend_per_session_by_user
FROM
session_spend
GROUP BY
user_pseudo_id
ORDER BY
avg_spend_per_session_by_user DESC;
2. Importo medio speso IN TUTTE le sessioni di acquisto:
Questa query calcola la spesa media complessiva per ogni sessione di acquisto unica di tutti gli utenti:
-- Calculates the overall average session spend across all users and sessions.
WITH
session_spend AS (
SELECT
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id,
SUM(
COALESCE(
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'value'),
(SELECT value.float_value FROM UNNEST(event_params) WHERE key = 'value'),
(SELECT value.double_value FROM UNNEST(event_params) WHERE key = 'value'),
0.0)
) AS total_session_spend
FROM
-- Replace table name.
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
event_name = 'purchase'
-- Replace date range.
AND _TABLE_SUFFIX BETWEEN '20201101' AND '20210131'
AND EXISTS(SELECT 1 FROM UNNEST(event_params) WHERE key = 'ga_session_id' AND value.int_value IS NOT NULL)
GROUP BY
user_pseudo_id, session_id
)
SELECT
COUNT(session_id) AS total_purchase_sessions,
AVG(total_session_spend) AS overall_avg_spend_per_session
FROM
session_spend;
ID sessione e numero di sessione più recenti per gli utenti
La seguente query fornisce l'elenco degli ultimi ga_session_id e ga_session_number degli ultimi 4 giorni per un elenco di utenti. Puoi fornire un elenco user_pseudo_id o un elenco user_id.
user_pseudo_id
-- Get the latest ga_session_id and ga_session_number for specific users during last 4 days.
-- Replace timezone. List at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
DECLARE REPORTING_TIMEZONE STRING DEFAULT 'America/Los_Angeles';
-- Replace list of user_pseudo_id's with ones you want to query.
DECLARE USER_PSEUDO_ID_LIST ARRAY<STRING> DEFAULT
[
'1005355938.1632145814', '979622592.1632496588', '1101478530.1632831095'];
CREATE TEMP FUNCTION GetParamValue(params ANY TYPE, target_key STRING)
AS (
(SELECT `value` FROM UNNEST(params) WHERE key = target_key LIMIT 1)
);
CREATE TEMP FUNCTION GetDateSuffix(date_shift INT64, timezone STRING)
AS (
(SELECT FORMAT_DATE('%Y%m%d', DATE_ADD(CURRENT_DATE(timezone), INTERVAL date_shift DAY)))
);
SELECT DISTINCT
user_pseudo_id,
FIRST_VALUE(GetParamValue(event_params, 'ga_session_id').int_value)
OVER (UserWindow) AS ga_session_id,
FIRST_VALUE(GetParamValue(event_params, 'ga_session_number').int_value)
OVER (UserWindow) AS ga_session_number
FROM
-- Replace table name.
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
user_pseudo_id IN UNNEST(USER_PSEUDO_ID_LIST)
AND RIGHT(_TABLE_SUFFIX, 8)
BETWEEN GetDateSuffix(-3, REPORTING_TIMEZONE)
AND GetDateSuffix(0, REPORTING_TIMEZONE)
WINDOW UserWindow AS (PARTITION BY user_pseudo_id ORDER BY event_timestamp DESC);
user_id
-- Get the latest ga_session_id and ga_session_number for specific users during last 4 days.
-- Replace timezone. List at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
DECLARE REPORTING_TIMEZONE STRING DEFAULT 'America/Los_Angeles';
-- Replace list of user_id's with ones you want to query.
DECLARE USER_ID_LIST ARRAY<STRING> DEFAULT ['<user_id_1>', '<user_id_2>', '<user_id_n>'];
CREATE TEMP FUNCTION GetParamValue(params ANY TYPE, target_key STRING)
AS (
(SELECT `value` FROM UNNEST(params) WHERE key = target_key LIMIT 1)
);
CREATE TEMP FUNCTION GetDateSuffix(date_shift INT64, timezone STRING)
AS (
(SELECT FORMAT_DATE('%Y%m%d', DATE_ADD(CURRENT_DATE(timezone), INTERVAL date_shift DAY)))
);
SELECT DISTINCT
user_pseudo_id,
FIRST_VALUE(GetParamValue(event_params, 'ga_session_id').int_value)
OVER (UserWindow) AS ga_session_id,
FIRST_VALUE(GetParamValue(event_params, 'ga_session_number').int_value)
OVER (UserWindow) AS ga_session_number
FROM
-- Replace table name.
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
user_id IN UNNEST(USER_ID_LIST)
AND RIGHT(_TABLE_SUFFIX, 8)
BETWEEN GetDateSuffix(-3, REPORTING_TIMEZONE)
AND GetDateSuffix(0, REPORTING_TIMEZONE)
WINDOW UserWindow AS (PARTITION BY user_pseudo_id ORDER BY event_timestamp DESC);