การค้นหาขั้นสูงในหน้านี้ใช้กับข้อมูลการส่งออกเหตุการณ์ BigQuery สําหรับ Google Analytics ดูตัวอย่างที่ง่ายกว่าได้ที่หน้าการค้นหาพื้นฐาน
ผลิตภัณฑ์ที่ซื้อโดยลูกค้าที่ซื้อผลิตภัณฑ์หนึ่งๆ
คําค้นหาต่อไปนี้แสดงผลิตภัณฑ์อื่นๆ ที่ลูกค้าซึ่งซื้อผลิตภัณฑ์หนึ่งๆ ซื้อด้วย ตัวอย่างนี้ไม่ได้ถือว่าผลิตภัณฑ์ ซื้อตามลำดับเดียวกัน
ตัวอย่างที่เพิ่มประสิทธิภาพจะใช้ฟีเจอร์การเขียนสคริปต์ BigQuery เพื่อกำหนดตัวแปร
ที่ประกาศรายการที่จะกรอง แม้ว่าวิธีนี้จะไม่ช่วยปรับปรุงประสิทธิภาพ แต่ก็เป็นวิธีที่อ่านได้ง่ายกว่าในการกำหนดตัวแปรเมื่อเทียบกับการสร้างตารางค่าเดียวโดยใช้คําสั่ง WITH คําค้นหาที่ลดความซับซ้อนจะใช้วิธีการหลัง
โดยใช้ประโยค WITH
คําค้นหาที่ง่ายขึ้นจะสร้างรายการ "ผู้ซื้อผลิตภัณฑ์ ก." แยกต่างหากและทําการ
รวมกับข้อมูลนั้น แต่คำค้นหาที่เพิ่มประสิทธิภาพจะสร้างรายการสินค้าทั้งหมดที่ผู้ใช้ซื้อในคำสั่งซื้อโดยใช้ฟังก์ชัน ARRAY_AGG จากนั้นเมื่อใช้
WHEREภายนอก ข้อความค้นหาจะกรองรายการซื้อของผู้ใช้ทั้งหมดสำหรับ
target_item และจะแสดงเฉพาะรายการที่เกี่ยวข้อง
แบบง่าย
-- 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;
เพิ่มประสิทธิภาพ
-- 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;
ค่าใช้จ่ายเฉลี่ยต่อเซสชันการซื้อ
คําค้นหาต่อไปนี้จะคํานวณจํานวนเงินที่ใช้โดยเฉลี่ยต่อเซสชัน โดยพิจารณาเฉพาะเซสชันที่ผู้ใช้ทําการซื้อ ทั้ง 2 คำค้นหาใช้ นิพจน์ตารางทั่วไป (CTE) เพื่อคำนวณค่าใช้จ่ายทั้งหมดสำหรับเซสชันการซื้อที่ไม่ซ้ำกันแต่ละเซสชันก่อน
1. จํานวนเงินที่ใช้โดยเฉลี่ยต่อเซสชันการซื้อโดยผู้ใช้
คําค้นหานี้แสดงการใช้จ่ายในเซสชันโดยเฉลี่ยสําหรับผู้ใช้แต่ละราย
-- 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. จํานวนเงินที่ใช้โดยเฉลี่ยในเซสชันการซื้อทั้งหมด
คําค้นหานี้จะคํานวณค่าใช้จ่ายเฉลี่ยโดยรวมในเซสชันการซื้อที่ไม่ซ้ำกันทั้งหมด จากผู้ใช้ทั้งหมด
-- 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;
รหัสเซสชันและหมายเลขเซสชันล่าสุดสําหรับผู้ใช้
คําค้นหาต่อไปนี้แสดงรายการ ga_session_id และ ga_session_number ล่าสุดจาก 4 วันที่ผ่านมาสําหรับรายชื่อผู้ใช้ คุณระบุได้ทั้งuser_pseudo_idรายการที่อนุญาตหรือ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);