נכתב על ידי יובל מרנין.
לשרותי מנטורינג של דאטה אנליסט לחצו כאן.
הקדמה
על מנת לנתר פעילות משתמשים במוצר ולבצע עליהן אנליזות, המפתחים דואגים להוסיף אירועים שישלחו לדאטה-בייס. האירועים יכולים להיות בפורמט של JSON או שורות בטבלה.
כאשר רוצים לנתח את הפעולות של משתמשים במוצר ולראות היכן הם נעצרים בפאנלים השונים צריך להתייחס ל-sessions של המשתמשים. כלומר, לפרק הזמן שבו הם היו פעילים באפליקציה. הבעיה היא שבהרבה מהמקרים האירועים שנשלחים לדאטה-בייס אינם מכילים sessions.
מה הוא session?
המונח session מתייחס לזמן בו המשתמש עשה שימוש במוצר ללא הפסקה. כלומר, ה- session מתחיל כאשר המשתמש נכנס לבצע פעולות במוצר ומסתיים כאשר הוא עוזב אותו. אם המשתמש לא ביצע פעולות במוצר בפרק זמן מסוים (למשל 30 דקות) אנחנו יודעים שה- session הסתיים.
למרבה הצער, ברוב המקרים המפתחים אינם שולחים אינדיקציה לכך ש- session התחיל או הסתיים ולכן יש ליצור את ה- sessions בעצמנו בעזרת פונקציות חלון בשפת SQL.
לצורך הדוגמה נגדיר טבלה היפותטית בשם events עם השדות הבאים:
- User_id- שם השתמש
- ts – הזמן של האירוע (בדקות)
- event_action – הפעולה שהמשתמש ביצע
ונריץ את הקוד הבא:
select
tab.*
,sum(ind_new_session) over
(
partition by user_id order by ts asc
rows between unbounded preceding and current row
) as session_num_for_user
,sum(ind_new_session)
over (order user_id, ts) as session_id
from
(
select
user_id
,action
,ts
,lag (ts,1) over (partition by user_id order by ts asc) as prev_event_ts
,case when (event_ts – prev_event_ts) >= 30 or prev_event_ts is null then 1 else 0
end
as ind_new_session
from
events
) as sessions
הסבר
בתת הטבלה הפנימית (sessions) הוספתי שדה בשם ind_new_session המעיד על תחילת ה- session בעזרת פונקציית LAG. פונקציית LAG אפשרה לי לקבל את מועד האירוע הבא של המשתמש ובכך לחשב את משך הזמן שעבר בין האירועים. אם עברו 30 דקות (או שלא היו אירועים לפני) אזי שיש session חדש.
בטבלה החיצונית אני מחשב שני סוגים של sessions:
- session_num_for_user – מספר ה- session בסדר עולה של המשתמש (אני סוכם בעזרת accumulative sum את השדה שיצרתי בתת השאילתה – ind_new_session)
- session_id – אני ממספר את ה- sessions ללא קשר למשתמש.
הערה – עבור חישוב משך הזמן שעבר בין האירועים השתמשתי בנוסחה (event_ts – prev_event_ts). בכל דאטה-בייס פונקציות חישוב משך הזמן שעבר בין שני משתני זמן יכולות להיות שונות ולכן עליכם לבדוק איך לחשב את משך הזמן שעובר בין אירועים בדאטה-בייס איתו אתם עובדים.
נכתב על ידי יובל מרנין.
לשרותי מנטורינג של דאטה אנליסט לחצו כאן.