2017-06-02 92 views
4

我們計劃使用Keen作爲我們的跟蹤核心,但是結合請求和提取數據對我們來說是一件大事。如何識別X次執行操作的用戶? [keen-io]

如果我們有例如命名爲pageviews一個集合,與用戶作爲它的一個屬性(像這樣:{"name": "pageviews", "properties":{"user":{"id":"4242"},"url":"https://keen.io/"}}),以及另一個集合名爲purchases具有相同user屬性裏面:

  1. 哪有我們獲得了訪問過至少3次一個網址並已完成另一個事件「購買」的唯一用戶數量?

  2. 我們如何提取這些人?是否有可能通過Amazon S3進行數據複製? (與亞馬遜雅典娜?)。 「提取」功能似乎不能滿足我們的提取問題,因爲我們不能應用「group by」語句,並且我們不能將多個事件組合起來(我錯了嗎?)。

我們的目標是使用基恩不僅作爲統計分析儀,而且作爲我們分割/提取使用的強大數據支持。

回答

4

這裏有多種選擇來解決這個問題:

解決方案1:你們用設置一個簡單的標準是什麼? Keen的funnel分析類型具有自然語法,用於識別已完成(或未完成)操作A,B,C等的特定用戶清單。然而,它不具有基於快速filter次數該操作已完成。這一部分標準有多重要?你能代替確定誰擁有用戶:

程序步驟

  1. 觀看/keen.io/
  2. /keen.io/products
  3. 進行購買

這種簡化會瞬間讓你的問題交代在一個funnel query

解決方案2:兩步查詢過程。 在這個解決方案中,我們將運行兩個單獨的查詢來得出結果。首先,我們將使用select_unique來識別執行了更爲罕見的操作(購買)的用戶。在下一個查詢中,我們將count該特定頁面的所有視圖和group_byuser.id以計算每個用戶查看該頁面的次數。我們將使用查詢1的結果作爲查詢2中的過濾器的一部分,以便我們只查詢已完成購買的相關用戶。然後,我們可以挑選出哪些用戶已購買並查看了該頁面3次或更多次。

var client = new Keen({ 
 
    projectId: "PROJECT_ID", 
 
    readKey: "READ_KEY" 
 
}); 
 

 
var usersWhoPurchased = [] 
 

 
// Query 1 
 
var usersWhoPurchasedQuery = new Keen.Query("select_unique", { 
 
    event_collection: "purchases", 
 
    target_property: "user.id", 
 
    timeframe: "this_7_days" 
 
}); 
 

 
// Get Query 1 Results 
 
client.run(usersWhoPurchasedQuery, function(err, response){ 
 
    usersWhoPurchased = response['result'] 
 
}); 
 

 

 
// Query 2 
 
var activityCountsByUserQuery = new Keen.Query("count", { 
 
    event_collection: "pageviews", 
 
    group_by: "user.id", 
 
    timeframe: "this_7_days", 
 
    filters: [ 
 
    \t { 
 
    \t property_name: "url", 
 
    \t operator: "eq", 
 
    \t property_value: https://keen.io/ 
 
    \t }, 
 
    \t { 
 
    \t property_name: "user.id", 
 
    \t operator: "in", 
 
    \t property_value: usersWhoPurchased 
 
    \t } 
 
    ] 
 
}); 
 
    
 
// Get Query 2 Results 
 
client.run(activityCountsByUserQuery, function(err, response){ 
 
    console.log(response) 
 
    var countsByUser = response['result'] 
 
}); 
 

 

 
// countsByUser = [ 
 
// { 
 
//  "user.id": "A", 
 
//  "result": 1 
 
// }, 
 
// { 
 
//  "user.id": "B", 
 
//  "result": 0 
 
// }, 
 
// { 
 
//  "user.id": "C", 
 
//  "result": 3 
 
// } 
 
// ] 
 
// Sort countsByUser to identfy those with >3

這種方法,您縮放,並開始從最大用戶數您可以在一個過濾器(數百或數千根據ID的長度)有一些注意事項。他們可以分解並分批查詢。

解決方案3:包括事件計數。 這種方法在所有情況下都不起作用,但是當它出現時,它可以非常強大和優雅。這個想法是在客戶端運行計數,並將它們作爲用戶屬性包含在事件中。例如,在你的網頁瀏覽事件的用戶對象可能包含如下屬性:

{ 
    "collection_name":"pageviews", 
    "properties":{ 
     "user":{ 
     "id":"4242" 
     }, 
     "url":"https://keen.io/", 
     "product_views_this_session":4 
    } 
} 

有了這樣的數據,你可以再次使用一個簡單的漏斗過濾,以確定誰符合條件

漏斗用戶步驟

  1. 瀏覽過的頁面 'https://keen.io',其中product_views_this_sessiongt4
  2. 進行購買

解決方案4:使用S3流+ AWS拉姆達+ RDS或DynamoDB

如果你還沒有擁有它開啓實現櫃檯,使您所有的原始數據熱衷到Amazon S3的流。一旦它在那裏,您可以對傳入的數據和靜止的數據執行各種附加步驟。

你的過程可能是這樣的:

  1. 打開Keen IO Streaming to S3
  2. 寫一個AWS Lambda job一種審查輸入數據和
  3. 計數每個用戶多少次每個動作
  4. 中查找RDS表中的每個用戶
  5. 遞增該用戶的計數和該操作
  6. 在同一個Lambda作業中,使用新屬性將事件重新發送回新的集合中的Keen,如下所示。

新事件:

{ 
    "collection_name":"user_product_view_enriched", 
    "properties":{ 
     "user":{ 
     "id":"4242" 
     }, 
     "url":"https://store.io/productA45", 
     "view_history":{ 
     "product":"A45", 
     "lifetime_views":5, 
     "counting_since":"<timestamp>" 
     } 
    } 
} 

把數據回熱衷於這種格式允許你使用標準漏斗在方案3中描述:

程序步驟

  1. 用戶產品「A45」和lifetime_views>
  2. 中的事件發生在 user_product_view_enriched
  3. 進行購買的用戶

該方法的侷限性在於,您不能隨意更改計數器「啓動」的時間和方式。例如,也許你以後決定,你只想在過去的三週而不是一生中計算觀點。你必須查詢S3中的原始數據才能得到這樣的新數據,但是你已經有了這些數據,所以並不是那麼重要。

解決方案5:使用EMR和/或雅典娜

撰寫定期批處理作業來查詢您的原始S3數據,並確定你有興趣的用戶原始S3數據實現更復雜的查詢有這裏有各種各樣的選擇,我不是專家,但我知道是可能的。

+0

謝謝你的完整答案! 第一個和第三個解決方案不適用:第一個解決方案是有限的,因爲過濾用戶的行爲次數標準是我們想要構建的營銷項目中的主要標準之一。 第三個涉及到做一些服務器端邏輯,但由於我們將構建我們的項目,它將完全在客戶端。 解決方案2是完美的,除了限制。我們肯定會在過濾器中擁有超過數百/數千人。 S3複製是否有機會拯救我們? – Norzn

+0

是的,讓我給上面添加一個解決方案4,並概述另一個涉及S3中數據的選項。 –