一個動作讓你節省超過90%的GA4 BigQuery SQL成本
一個動作讓你節省超過90%的GA4 BigQuery SQL成本
你是否對於在Google Analytics 4 (GA4) BigQuery (BQ)查詢工作階段數據而花費了大筆的金錢感到無奈?我有一個好消息!我找到了一個巧妙的解決方案,可以在計數工作階段時,讓你的GA4 BQ SQL成本降低超過90%。讓我告訴你如何做。
GA4中計數工作階段的問題
在GA4中計數工作階段通常需要展開整個數據集來獲取工作階段ID。這個過程可能會非常耗時且昂貴,特別是對於大型數據集。但別擔心,我找到了一個可以大幅減少你成本的解決方案。
介紹Campaign ID方法
我建議使用Campaign ID來替代傳統的工作階段計數方法。你可能會問為什麼選擇Campaign ID?因為Campaign ID很少被使用,並且在GA4的數據處理上,Google會幫你自動拉取放在事件層而不需要您展開數據集。這給我們提供了一個獨特的機會來利用它進行工作階段計數。
方法講解
以下是你如何實施這種節省成本技巧:
- 創建一個自定義的HTML代碼,生成模擬工作階段行為的cookies。這些cookies應該有30分鐘的到期時間。
- 捕獲cookies並將其放在Campaign ID參數中。
- 在查詢數據時,使用
collected_traffic_source.manual_campaign_id
作為工作階段ID,而不是傳統的方法。 - 享受節省的成本和提高的效率!
考慮的限制
像所有的解決方案一樣,這個方法也有一些限制。以下是兩個主要的要點:
- Cookies:此方法依賴cookies來保存開始時間並使其值能被Google Tag Manager (GTM) 讀取。如果cookies被阻止,則無法保存開始時間,也無法讀取其值。
- 工作階段數量稍有變化:需要注意的是,由於Google的工作階段歸屬邏輯,工作階段數量可能不會完全相符。然而,在對真實流量數據進行嚴格測試後,我有信心這種工作階段計數是準確計數工作階段的足夠好的方法。
教學
首先,設置cookies的代碼。
<script>
function captureInitialVisitStartTime(cookie_name) {
var sessionData = getSessionData(cookie_name);
if (!sessionData) {
var currentTime = Math.floor(Date.now() / 1000);
var expiryTime = new Date();
expiryTime.setTime(expiryTime.getTime() + (30 * 60 * 1000)); // 30 minutes expiry time
document.cookie = cookie_name + '=' + currentTime + '; expires=' + expiryTime.toUTCString() + '; path=/';
}
}
function refreshTTL(cookie_name) {
var sessionData = getSessionData(cookie_name);
if (sessionData) {
var expiryTime = new Date();
expiryTime.setTime(expiryTime.getTime() + (30 * 60 * 1000)); // 30 minutes expiry time
document.cookie = cookie_name + '=' + sessionData + '; expires=' + expiryTime.toUTCString() + '; path=/';
}
}
function isSessionActive(cookie_name) {
var sessionData = getSessionData(cookie_name);
if (sessionData) {
return true;
}
return false;
}
function getSessionData(cookie_name) {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.startsWith(cookie_name + '=')) {
var cookieValue = cookie.substring(cookie_name.length + 1);
return cookieValue;
}
}
return null;
}
var cookie_name = 'start_time'
// Capture initial visit start time of a user
captureInitialVisitStartTime(cookie_name);
// Refresh the TTL window whenever a user visits a page
refreshTTL(cookie_name);
// Check if a session is active for a user
var sessionActive = isSessionActive(cookie_name);
</script>
選擇initilaisation 作為觸發
設置cookies 變量
把值放在您的GA4代碼上,大功告成!
演示
一般SQL (感謝由 ga4sql 提供)
大小: Bytes processed:3.17 KB
SELECT
COUNT(DISTINCT session_id) AS sessions
FROM
(
SELECT
CONCAT(
user_pseudo_id,
(
SELECT
value.int_value
FROM
UNNEST (event_params)
WHERE
key = 'ga_session_id'
)
) AS session_id
FROM
`XXYYZZ.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20231030' AND '20231102'
GROUP BY
session_id
)
更新後的SQL
大小:Bytes processed:165 B
SELECT
collected_traffic_source.manual_source,
collected_traffic_source.manual_medium,
COUNT(DISTINCT collected_traffic_source.manual_campaign_id) as session,
FROM
`XXYYZZ.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20231030' AND '20231102'
AND collected_traffic_source.manual_source IS NOT NULL
GROUP BY
1,2
先不講在SQL的配置已經乾淨整潔多,數據處理大小是3.17KB/165B = 19.2121212 差了接近20倍的大小!
總結
通過利用這種創新的Campaign ID方法,你可以在GA4 BQ SQL成本上節省大量的金錢。不僅可以減少你的支出,還可以享受更加流線化的工作階段計數方法。還等什麼?今天就嘗試這種節省成本的技巧!
請繼續關注更多關於GA4的文章。