هذا إصدار SQL من تقرير لوحة المعلومات لـ DAU/MAU.
يقدم هذا التقرير تحليلاً مفصلاً لنسبة المستخدمين النشطين يوميًا (DAU) إلى المستخدمين النشطين شهريًا (MAU) خلال نطاق تاريخي محدد. نسبة DAU/MAU هي مؤشر أداء رئيسي (KPI) يقيس تفاعل المستخدم من خلال مقارنة عدد المستخدمين النشطين الفريدين يوميًا بعدد المستخدمين النشطين الفريدين على مدى فترة 30 يومًا.
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2024-01-01
WITH date_series AS (
SELECT generate_series(:start_date::date, :end_date::date, '1 day'::interval) AS date
),
DAU AS (
SELECT date(date) AS day, COUNT(DISTINCT user_id) AS dau_count
FROM user_visits
JOIN date_series ON date(user_visits.visited_at) = date_series.date
GROUP BY date
),
MAU AS (
SELECT date_series.date, COUNT(DISTINCT user_visits.user_id) AS mau_count
FROM user_visits
JOIN date_series ON date(user_visits.visited_at) >= date_series.date - INTERVAL '30 days'
AND date(user_visits.visited_at) <= date_series.date
GROUP BY date_series.date
)
SELECT
DAU.day,
(DAU.dau_count::FLOAT / NULLIF(MAU.mau_count, 0)) * 100 AS "DAU/MAU",
DAU.dau_count,
MAU.mau_count
FROM DAU
JOIN MAU ON DAU.day = MAU.date
ORDER BY DAU.day
شرح استعلام SQL
يستخدم استعلام SQL تعبيرات الجدول المشتركة (CTEs) لإنشاء مجموعتي بيانات: واحدة لـ DAU والأخرى لـ MAU. ثم يجمع هاتين المجموعتين من البيانات لحساب نسبة DAU/MAU لكل يوم ضمن النطاق الزمني المحدد.
المعلمات
يقبل الاستعلام معلمتين، :start_date و :end_date، مما يسمح للمستخدم بتحديد النطاق الزمني للتقرير. تقبل كلتا معلمتي التاريخ تنسيق التاريخ YYYY-MM-DD.
تعبيرات الجدول المشتركة (CTEs)
- date_series: يقوم تعبير
date_seriesبإنشاء سلسلة من التواريخ من:start_dateإلى:end_date، بفاصل يوم واحد بين كل تاريخ. تُستخدم هذه السلسلة لضمان تضمين التقرير لكل يوم ضمن النطاق المحدد، حتى لو لم يكن هناك نشاط للمستخدم في بعض الأيام. - DAU: يحسب تعبير
DAUعدد المستخدمين الفريدين الذين زاروا الموقع في كل يوم (dau_count). يتم ذلك عن طريق ربط جدولuser_visitsبتعبيرdate_seriesبشرط أن يتطابق تاريخ الزيارة مع التاريخ الموجود في السلسلة. يتم تجميع النتيجة حسب التاريخ للحصول على عدد المستخدمين الفريدين لكل يوم. - MAU: يحسب تعبير
MAUعدد المستخدمين الفريدين الذين زاروا الموقع خلال الـ 30 يومًا السابقة لكل تاريخ فيdate_series. يتم ذلك عن طريق ربط جدولuser_visitsبتعبيرdate_series، حيث يكون تاريخ الزيارة بين 30 يومًا قبل التاريخ الموجود في السلسلة وحتى ذلك التاريخ، بما في ذلك. يتم تجميع النتيجة حسب التاريخ للحصول على عدد المستخدمين الفريدين لكل فترة 30 يومًا تسبق كل تاريخ.
التحديد النهائي
يحسب الجزء الأخير من الاستعلام نسبة DAU/MAU لكل يوم عن طريق قسمة عدد DAU على عدد MAU وضرب الناتج في 100 للحصول على نسبة مئوية. كما يحدد عدد DAU و MAU كمرجع. تُستخدم الدالة NULLIF لتجنب القسمة على صفر، والتي قد تحدث إذا لم يكن هناك MAU ليوم معين. يتم ترتيب النتيجة حسب اليوم لتوفير عرض زمني لتفاعل المستخدم.
نتائج مثال
| day | DAU/MAU | dau_count | mau_count |
|---|---|---|---|
| 2023-11-19 | 15.31914893617021 | 360 | 2350 |
| 2023-11-20 | 23.92223161453931 | 566 | 2366 |
| 2023-11-21 | 23.55648535564853 | 563 | 2390 |
| 2023-11-22 | 23.09929372663066 | 556 | 2407 |
| 2023-11-23 | 19.394944053046 | 468 | 2413 |
| … | … | … | … |