በግራፋና ውስጥ የተጠቃሚ ስብስቦችን እንደ ግራፍ እንዴት መሰብሰብ እንደሚቻል [+ docker image with example]

በግራፋና ውስጥ የተጠቃሚ ስብስቦችን እንደ ግራፍ እንዴት መሰብሰብ እንደሚቻል [+ docker image with example]

Grafanaን በመጠቀም በፕሮሞፑልት አገልግሎት ውስጥ የተጠቃሚዎችን ስብስብ የማሳየት ችግርን እንዴት እንደፈታን።

ማስተዋወቅ - ብዙ ተጠቃሚዎች ያሉት ኃይለኛ አገልግሎት። በ 10 አመታት ውስጥ በስርአቱ ውስጥ የተመዘገቡት ምዝገባዎች ቁጥር ከአንድ ሚሊዮን በላይ ሆኗል. ተመሳሳይ አገልግሎቶችን ያጋጠማቸው ይህ የተጠቃሚዎች ስብስብ ተመሳሳይነት ያለው እንዳልሆነ ያውቃሉ።

አንድ ሰው ተመዝግቦ ለዘላለም "አንቀላፋ"። አንድ ሰው የይለፍ ቃሉን ረስቶ በስድስት ወር ጊዜ ውስጥ አንድ ባልና ሚስት ተጨማሪ ጊዜ ተመዝግቧል። አንድ ሰው ወደ ገንዘብ መመዝገቢያ ገንዘብ ያመጣል, እና አንድ ሰው ለነጻነት መጣ መሣሪያዎች. እና ከሁሉም ሰው የተወሰነ ትርፍ ማግኘት ጥሩ ይሆናል.

እንደ እኛ ባሉ ትላልቅ የውሂብ ስብስቦች ላይ የግለሰብ ተጠቃሚን ባህሪ መተንተን እና ጥቃቅን ውሳኔዎችን ማድረግ ምንም ፋይዳ የለውም. ነገር ግን አዝማሚያዎችን መያዝ እና ከትላልቅ ቡድኖች ጋር አብሮ መስራት የሚቻል እና አስፈላጊ ነው. በትክክል የምንሰራው የትኛው ነው.

ማጠቃለያ

  1. የቡድን ትንተና ምንድን ነው እና ለምን ያስፈልጋል?
  2. በSQL ውስጥ የተጠቃሚ ምዝገባ በወር የተመሳሳይ ሰዎች ስብስብ እንዴት እንደሚሰራ።
  3. የተመሳሳይ ሰዎች ስብስብ እንዴት እንደሚተላለፍ ግራፋና.

የቡድን ትንተና ምን እንደሆነ እና በSQL ውስጥ እንዴት እንደሚያደርጉት አስቀድመው ካወቁ በቀጥታ ወደ የመጨረሻው ክፍል ይዝለሉ።

1. የቡድን ትንተና ምንድን ነው እና ለምን ያስፈልጋል?

የቡድን ትንተና የተጠቃሚዎችን የተለያዩ ቡድኖች (ቡድኖች) በማወዳደር ላይ የተመሰረተ ዘዴ ነው። ብዙ ጊዜ ቡድኖቻችን የሚመሰረቱት ተጠቃሚው አገልግሎቱን መጠቀም በጀመረበት ሳምንት ወይም ወር ነው። ከዚህ የተጠቃሚው የህይወት ዘመን ይሰላል, እና ይህ በጣም ውስብስብ ትንታኔ ሊደረግበት በሚችልበት መሰረት አመላካች ነው. ለምሳሌ፡ ተረዱ፡-

  • የግዢ ቻናል በተጠቃሚው ህይወት ላይ እንዴት ተጽዕኖ እንደሚያሳድር;
  • የማንኛውም ባህሪ ወይም አገልግሎት አጠቃቀም የህይወት ዘመንን እንዴት እንደሚጎዳ;
  • የባህሪ X መጀመር ካለፈው ዓመት ጋር ሲነጻጸር እንዴት የህይወት ዘመንን እንደነካ።

2. በ SQL ውስጥ ስብስቦችን እንዴት መሥራት እንደሚቻል?

የጽሁፉ መጠን እና የጋራ አስተሳሰብ የእኛን እውነተኛ ውሂብ እዚህ እንድናቀርብ አይፈቅድልንም - በሙከራ ማጠራቀሚያ ውስጥ ፣ ለአንድ ዓመት ተኩል ስታቲስቲክስ: 1200 ተጠቃሚዎች እና 53 ግብይቶች። በዚህ ዳታ መጫወት እንድትችል ከ MySQL እና Grafana ጋር ሁሉንም ራስህ የምትለማመደው ዶከር ምስል አዘጋጅተናል። በአንቀጹ መጨረሻ ላይ ወደ GitHub አገናኝ።

እና እዚህ ቀለል ያለ ምሳሌን በመጠቀም የቡድን ስብስቦችን መፍጠር እናሳያለን.

አገልግሎት እንዳለን እናስብ። ተጠቃሚዎች እዚያ ተመዝግበው ለአገልግሎቶች ገንዘብ ያጠፋሉ. ከጊዜ በኋላ ተጠቃሚዎች ይተዋሉ። ተጠቃሚዎች ለምን ያህል ጊዜ እንደሚኖሩ እና ምን ያህል አገልግሎቱን ከተጠቀሙ ከ 1 ኛ እና 2 ኛ ወር በኋላ እንደሚወድቁ ለማወቅ እንፈልጋለን።

ለእነዚህ ጥያቄዎች መልስ ለመስጠት, በተመዘገቡበት ወር ላይ ተመስርተው ስብስቦችን መገንባት አለብን. እንቅስቃሴን በየወሩ በወጪ እንለካለን። ከወጪዎች ይልቅ ትዕዛዞች፣ የደንበኝነት ምዝገባ ክፍያዎች ወይም ሌላ ማንኛውም በጊዜ ላይ የተመሰረተ እንቅስቃሴ ሊኖር ይችላል።

ጥሬ ውሂብ

ምሳሌዎቹ በ MySQL ውስጥ ተሠርተዋል፣ ነገር ግን ለሌሎች ዲቢኤምኤስ ምንም ጉልህ ልዩነቶች ሊኖሩ አይገባም።

የተጠቃሚ ሰንጠረዥ - ተጠቃሚዎች:

የተጠቃሚው መለያ
የምዝገባ ቀን

1
2019-01-01

2
2019-02-01

3
2019-02-10

4
2019-03-01

የወጪ ሠንጠረዥ - የሂሳብ አከፋፈል;

የተጠቃሚው መለያ
ቀን
ድምር

1
2019-01-02
11

1
2019-02-22
11

2
2019-02-12
12

3
2019-02-11
13

3
2019-03-11
13

4
2019-03-01
14

4
2019-03-02
14

ሁሉንም የተጠቃሚ መዘጋቶች እና የምዝገባ ቀን ይምረጡ፡-

SELECT 
  b.userId, 
  b.Date,
  u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId

ውጤት:

የተጠቃሚው መለያ
ቀን
የምዝገባ ቀን

1
2019-01-02
2019-01-02

1
2019-02-22
2019-01-02

2
2019-02-12
2019-02-01

3
2019-02-11
2019-02-10

3
2019-03-11
2019-02-10

4
2019-03-01
2019-03-01

4
2019-03-02
2019-03-01

ስብስቦችን በወር እንገነባለን፤ ይህንን ለማድረግ ሁሉንም ቀኖች ወደ ወሮች እንቀይራለን፡

DATE_FORMAT(Date, '%Y-%m')

አሁን ተጠቃሚው ምን ያህል ወራት እንደነቃ ማወቅ አለብን - ይህ በዴቢት ወር እና በመመዝገቢያ ወር መካከል ያለው ልዩነት ነው. MySQL ተግባር አለው PERIOD_DIFF() - በሁለት ወራት መካከል ያለው ልዩነት። ወደ ጥያቄው PERIOD_DIFF() አክል፡

SELECT
    b.userId,
    DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
    DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
    PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId

የተጠቃሚው መለያ
የክፍያ ወር
የምዝገባ ቀን
ወራት ልዩነት

1
2019-01
2019-01
0

1
2019-02
2019-01
1

2
2019-02
2019-02
0

3
2019-02
2019-02
0

3
2019-03
2019-02
1

4
2019-03
2019-03
0

4
2019-03
2019-03
0

ተጠቃሚዎቹን በየወሩ እንደነቃ እንቆጥራለን - መዝገቦቹን በቢሊንግ ወር፣ RegistrationMonth እና MonthsDiff እንሰበስባለን፡

SELECT
    COUNT(DISTINCT(b.userId)) AS UsersCount,
    DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
    DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
    PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
GROUP BY BillingMonth, RegistrationMonth, MonthsDiff

ውጤት:

የተጠቃሚዎች ብዛት
የክፍያ ወር
የምዝገባ ወር
ወራት ልዩነት

1
2019-01
2019-01
0

1
2019-02
2019-01
1

2
2019-02
2019-02
0

1
2019-03
2019-02
1

1
2019-03
2019-03
0

በጃንዋሪ፣ ፌብሩዋሪ እና መጋቢት፣ እያንዳንዳቸው አንድ አዲስ ተጠቃሚ ታየ - MonthsDiff = 0. አንድ የጃንዋሪ ተጠቃሚ በፌብሩዋሪ ውስጥ ንቁ ነበር - RegistrationMonth = 2019-01፣ BillingMonth = 2019-02፣ እና አንድ የየካቲት ተጠቃሚ በማርች ንቁ ነበር።

በተፈጥሮ, ቅጦች በተሻለ የውሂብ ስብስብ ውስጥ በተሻለ ሁኔታ ይታያሉ.

ቡድኖችን ወደ ግራፋና እንዴት ማስተላለፍ እንደሚቻል

ቡድኖችን እንዴት መፍጠር እንደሚቻል ተምረናል፣ ነገር ግን ብዙ መዝገቦች ሲኖሩ፣ እነሱን ለመተንተን ቀላል አይሆንም። መዝገቦች ወደ ኤክሴል ሊላኩ እና ወደ ውብ ጠረጴዛዎች ሊፈጠሩ ይችላሉ, ግን ይህ የእኛ ዘዴ አይደለም!

የተመሳሳይ ሰዎች ስብስብ እንደ በይነተገናኝ ግራፍ ሊታዩ ይችላሉ። ግራፋና.

ይህንን ለማድረግ ውሂቡን ለግራፋና ተስማሚ ወደሆነ ቅርጸት ለመቀየር ሌላ መጠይቅ እንጨምራለን፡

SELECT
  DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
  SUM(s.Users) AS value,
  s.RegistrationMonth AS metric
FROM (
  ## старый запрос, возвращающий когорты
  SELECT 
    COUNT(DISTINCT(b.userId)) AS Users, 
    DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
    DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
    PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
  FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
  WHERE
    u.RegistrationDate BETWEEN '2018-01-01' AND CURRENT_DATE
  GROUP BY 
    BillingMonth, RegistrationMonth, MonthsDiff 
) AS s
GROUP BY 
  time_sec, metric

እና ውሂቡን ወደ ግራፋና ይስቀሉ።

ምሳሌ ግራፍ ከ ማሳያ:

በግራፋና ውስጥ የተጠቃሚ ስብስቦችን እንደ ግራፍ እንዴት መሰብሰብ እንደሚቻል [+ docker image with example]

በእጆችዎ ይንኩ;

GitHub ማከማቻ ከምሳሌ ጋር በኮምፒተርዎ ላይ ማስኬድ የሚችሉት ከ MySQL እና Grafana ጋር የዶክ ምስል ነው። የመረጃ ቋቱ አስቀድሞ ከጃንዋሪ 2018 እስከ ጁላይ 2019 ለአንድ ዓመት ተኩል የማሳያ መረጃ ይዟል።

ከፈለጉ, ውሂብዎን ወደዚህ ምስል መጫን ይችላሉ.

PS ስለ ስብስብ ትንተና በSQL ውስጥ ያሉ ጽሑፎች፡-

https://chartio.com/resources/tutorials/performing-cohort-analysis-using-mysql/

https://www.holistics.io/blog/calculate-cohort-retention-analysis-with-sql/

ምንጭ: hab.com

አስተያየት ያክሉ