你是否對於在Google Analytics 4 (GA4) BigQuery (BQ)查詢工作階段數據而花費了大筆的金錢感到無奈?我有一個好消息!我找到了一個巧妙的解決方案,可以在計數工作階段時,讓你的GA4 BQ SQL成本降低超過90%。讓我告訴你如何做。

GA4中計數工作階段的問題

在GA4中計數工作階段通常需要展開整個數據集來獲取工作階段ID。這個過程可能會非常耗時且昂貴,特別是對於大型數據集。但別擔心,我找到了一個可以大幅減少你成本的解決方案。

介紹Campaign ID方法

我建議使用Campaign ID來替代傳統的工作階段計數方法。你可能會問為什麼選擇Campaign ID?因為Campaign ID很少被使用,並且在GA4的數據處理上,Google會幫你自動拉取放在事件層而不需要您展開數據集。這給我們提供了一個獨特的機會來利用它進行工作階段計數。

方法講解

以下是你如何實施這種節省成本技巧:

  1. 創建一個自定義的HTML代碼,生成模擬工作階段行為的cookies。這些cookies應該有30分鐘的到期時間。
  2. 捕獲cookies並將其放在Campaign ID參數中。
  3. 在查詢數據時,使用collected_traffic_source.manual_campaign_id作為工作階段ID,而不是傳統的方法。
  4. 享受節省的成本和提高的效率!

考慮的限制

像所有的解決方案一樣,這個方法也有一些限制。以下是兩個主要的要點:

  1. Cookies:此方法依賴cookies來保存開始時間並使其值能被Google Tag Manager (GTM) 讀取。如果cookies被阻止,則無法保存開始時間,也無法讀取其值。
  2. 工作階段數量稍有變化:需要注意的是,由於Google的工作階段歸屬邏輯,工作階段數量可能不會完全相符。然而,在對真實流量數據進行嚴格測試後,我有信心這種工作階段計數是準確計數工作階段的足夠好的方法。

教學

首先,設置cookies的代碼。

step1

<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 作為觸發

step2

設置cookies 變量

step3

把值放在您的GA4代碼上,大功告成!

step4

演示

一般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的文章。