2017-05-04 39 views
0

我正在提取主頁熱圖的數據,我只想看到瀏覽量上一頁是主頁。在BigQuery中計算上一頁路徑

我的數據是導入Google Analytics表 - BQ中不存在「上一頁路徑」度量標準,那麼我該如何解決這個問題?

這裏是我的查詢的一個基本的例子:

SELECT 
    hits.page.pagePath 
FROM (TABLE_DATE_RANGE([***.ga_sessions_], 
     DATE_ADD(CURRENT_TIMESTAMP(), -4, 'DAY'), 
     DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))) 
WHERE ? -- Where previous page path was the homepage? 
GROUP BY hits.page.pagePath 

我可以在WHERE子句中定義的前一頁路徑中使用什麼樣的?

回答

1

由於在您的查詢中使用TABLE_DATE_RANGE函數,我猜你正在使用傳統SQL。在這種情況下,您可以使用LAG函數,其中使您可以從窗口的上一行讀取數據。因此,如果您按每個會話的命中號碼(窗口)對每個會話的頁面進行排序,則可以獲取每個頁面的上一頁。

下面的查詢會做你想要什麼:

#legacySQL 
SELECT Page, count(*) as pageviews 
FROM(
    SELECT hits.page.pagePath as Page, 
      LAG(hits.page.pagePath, 1) OVER (PARTITION BY fullVisitorId, visitId, date ORDER BY hits.hitNumber ASC) as PreviousPage 
    FROM (TABLE_DATE_RANGE([****.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -4, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))) 
    WHERE hits.type='PAGE' 
) 
WHERE PreviousPage='/yourHomePage' 
GROUP BY Page 
-- ORDER BY pageviews desc 

,你必須與你的實際網頁URI來代替「/ yourHomePage」。

+0

謝謝波爾,完美! –

2

下面是BigQuery的標準SQL

#standardSQL 
SELECT Page, COUNT(*) AS PageViews 
FROM(
    SELECT hit.page.pagePath AS Page, 
      LAG(hit.page.pagePath, 1) OVER (PARTITION BY fullVisitorId, visitId, DATE ORDER BY hit.hitNumber ASC) AS PreviousPage 
    FROM `your_ga_sessions_table`, UNNEST(hits) AS hit 
    WHERE hit.type='PAGE' 
) 
WHERE PreviousPage='/yourHomePage' 
GROUP BY Page 
-- ORDER BY PageViews DESC 

也可以考慮以下的版本,在那裏你可以收集完整的路徑爲每個訪問者/訪問,不是由任何給定的路徑圖案用正則表達式

過濾
#standardSQL 
SELECT 
    fullVisitorId, 
    visitId, 
    STRING_AGG(hit.page.pagePath, '>' ORDER BY hit.hitNumber) AS path 
FROM `your_ga_sessions_table`, UNNEST(hits) AS hit 
WHERE hit.type='PAGE' 
GROUP BY fullVisitorId, visitId 
HAVING REGEXP_CONTAINS(path, r'/page1>/page1') 
-- ORDER BY 1, 2 

通過正確構建正則表達式,您可以查找任何長度和順序的任何頁面順序等,以支持示例漏斗分析