ניתוח מוצר בעזרת שפת SQL – הוספת מספרי session לאירועים

You are currently viewing ניתוח מוצר בעזרת שפת SQL – הוספת מספרי session לאירועים
Image by Manfred Steger from Pixabay
  • קטגוריה:שפת SQL
  • זמן קריאה:זמן קריאה 4 דקות

נכתב על ידי יובל מרנין.
לשרותי מנטורינג של דאטה אנליסט לחצו כאן.

הקדמה

על מנת לנתר פעילות משתמשים במוצר ולבצע עליהן אנליזות, המפתחים דואגים להוסיף אירועים שישלחו לדאטה-בייס. האירועים יכולים להיות בפורמט של 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_tsprev_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). בכל דאטה-בייס פונקציות חישוב משך הזמן שעבר בין שני משתני זמן יכולות להיות שונות ולכן עליכם לבדוק איך לחשב את משך הזמן שעובר בין אירועים בדאטה-בייס איתו אתם עובדים.

נכתב על ידי יובל מרנין.
לשרותי מנטורינג של דאטה אנליסט לחצו כאן.

 

Yuval Marnin

לחברות המעוניינות בשירותי פרילנס או מנטורינג של אנליסט, ניתן לפנות אליי ל[email protected]