أنماط إعداد التقارير الواقعية
نفّذ لوحات المعلومات الكلاسيكية: منحنيات الاحتفاظ، وأعلى N لكل فئة، وتقسيم الجلسات — وكل ذلك باستخدام دوال النوافذ
أنماط إعداد التقارير الواقعية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
نمط: أعلى N لكل مجموعة
أعلى 3 طلبات لكل مستخدم:
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;نمط: المجاميع التراكمية
الإيرادات التراكمية بمرور الوقت:
SELECT day, revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue;نمط: الظهور الأول
أول مرة ينفذ فيها كل مستخدم كل إجراء:
SELECT user_id, action, MIN(ts) AS first_at
FROM events
GROUP BY user_id, action;
-- Or with window functions for full row:
WITH firsts AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id, action ORDER BY ts) AS rn
FROM events
)
SELECT * FROM firsts WHERE rn = 1;نمط: الاحتفاظ بالمجموعة
تجميع المستخدمين حسب أسبوع التسجيل، ثم حساب الاحتفاظ في الأسبوع N:
WITH cohorts AS (
SELECT id AS user_id, date_trunc('week', created_at) AS cohort_week
FROM users
),
activities AS (
SELECT user_id, date_trunc('week', ts) AS active_week FROM events
)
SELECT c.cohort_week,
(a.active_week - c.cohort_week) / 7 AS week_offset,
COUNT(DISTINCT a.user_id) AS active
FROM cohorts c
JOIN activities a USING (user_id)
WHERE a.active_week >= c.cohort_week
GROUP BY c.cohort_week, week_offset
ORDER BY c.cohort_week, week_offset;نمط: تحليل المسار
عدد المستخدمين الذين يصلون إلى كل خطوة:
SELECT
COUNT(*) AS signed_up,
COUNT(*) FILTER (WHERE first_login_at IS NOT NULL) AS logged_in,
COUNT(*) FILTER (WHERE first_purchase_at IS NOT NULL) AS purchased
FROM users;نمط: تقسيم الجلسات
اجمع الأحداث في جلسات عندما يتجاوز الفاصل 30 دقيقة:
WITH gaps AS (
SELECT user_id, ts,
CASE
WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
> INTERVAL '30 min'
THEN 1 ELSE 0
END AS new_session
FROM events
)
SELECT user_id, ts,
SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;نمط: المقارنة بين الفترات
قارن الشهر الحالي بالشهر السابق:
SELECT month, revenue,
LAG(revenue) OVER (ORDER BY month) AS prev_month,
revenue - LAG(revenue) OVER (ORDER BY month) AS delta,
(revenue::FLOAT / NULLIF(LAG(revenue) OVER (ORDER BY month), 0) - 1) * 100 AS pct_change
FROM monthly_revenue
ORDER BY month;نمط: المخرجات المحورية
تنسيق عريض باستخدام FILTER:
SELECT user_id,
SUM(amount) FILTER (WHERE month = '2024-01') AS jan,
SUM(amount) FILTER (WHERE month = '2024-02') AS feb,
SUM(amount) FILTER (WHERE month = '2024-03') AS mar
FROM monthly_spend
GROUP BY user_id;نمط: المستخدمون النشطون اليوم
DAU وWAU وMAU:
SELECT
COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '1 day') AS dau,
COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '7 days') AS wau,
COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '30 days') AS mau
FROM events;نمط: ملء الفجوات
يجب أن تعرض الأيام التي لا توجد فيها أحداث القيمة 0، لا أن تكون مفقودة:
SELECT day, COALESCE(COUNT(e.id), 0) AS events
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, INTERVAL '1 day') AS day
LEFT JOIN events e ON date_trunc('day', e.ts) = day
GROUP BY day
ORDER BY day;دمج دوال النافذة لاستخلاص الرؤى
أعمدة متعددة تعتمد على النوافذ في استعلام واحد، مع الحفاظ على قابلية القراءة والسرعة:
SELECT day, revenue,
LAG(revenue) OVER w AS prev,
AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS avg_7d,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
WINDOW w AS (ORDER BY day)
ORDER BY day;خلاصة
تتكون معظم التقارير من عدد قليل من الأنماط: أعلى N، والمجاميع التراكمية، والمجموعات، والمسارات، وتقسيم الجلسات، والمقارنة بين الفترات، والجداول المحورية، وملء الفجوات. أتقن هذه الأنماط وستتمكن من إنشاء أي لوحة معلومات تحتاج إليها باستخدام SQL.
تحقق سريع
تنشئ تقريرًا عن "أفضل 5 منتجات لكل فئة". ما نمط SQL الاصطلاحي المناسب؟
الأسئلة الشائعة
هل درس «أنماط إعداد التقارير الواقعية» مجاني؟
نعم — نص درس «أنماط إعداد التقارير الواقعية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنماط إعداد التقارير الواقعية»؟
نفّذ لوحات المعلومات الكلاسيكية: منحنيات الاحتفاظ، وأعلى N لكل فئة، وتقسيم الجلسات — وكل ذلك باستخدام دوال النوافذ تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «أنماط إعداد التقارير الواقعية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عبارات الإطار: ROWS مقابل RANGE
- Lag/Lead مع نوافذ الإطار
- التجميع باستخدام NTILE وCume_Dist
- أنماط إعداد التقارير الواقعية