Data Analyst Professional · Модуль 5 · Урок 18 із 51

LAG, LEAD і аналіз змін у часі

LAG читає попередній, а LEAD — наступний рядок у визначеному window order. Вони порівнюють періоди без self-join, але коректність залежить від повного calendar grain і стабільного порядку.

90 хвTime comparisonМінітест: 3 питання

Спочатку агрегуйте до потрібного періоду

WITH monthly AS ( SELECT DATE_TRUNC('month', ordered_at)::date AS month, channel, SUM(net_amount) AS revenue FROM seowork_lab.orders WHERE status = 'completed' GROUP BY 1, 2 ) SELECT month, channel, revenue, LAG(revenue) OVER (PARTITION BY channel ORDER BY month) AS previous_revenue FROM monthly;

LAG над order-level rows порівнював би сусідні orders, а не місяці. Window input grain має відповідати питанню.

Зміна й темп зростання

WITH compared AS ( SELECT m.*, LAG(revenue) OVER (PARTITION BY channel ORDER BY month) AS previous_revenue FROM monthly AS m ) SELECT *, revenue - previous_revenue AS absolute_change, (revenue - previous_revenue) / NULLIF(previous_revenue, 0) AS growth_rate FROM compared;

Перший period має NULL previous value. Zero denominator — окрема бізнес-ситуація, яку не можна приховувати довільним нулем.

Missing periods змінюють сенс

Якщо у channel немає лютого, LAG для березня поверне січень — попередній наявний row, а не попередній календарний місяць. Для month-over-month побудуйте calendar spine, CROSS JOIN із dimensions і LEFT JOIN facts.

Calendar grain

Один row на кожен очікуваний period × segment.

Complete series

Missing fact стає явним NULL або zero лише за затвердженим правилом.

Stable order

Period key унікальний усередині partition.

Boundary

Перший/останній row пояснено, а не втрачено.

Практика і QA

  • Побудуйте monthly revenue per channel.
  • Додайте previous revenue, absolute change і growth rate.
  • Знайдіть gaps у послідовності місяців.
  • Порівняйте LAG до і після calendar spine.
  • Звірте monthly totals із базовим control query.

Офіційна довідка

Модуль завершено

Після успішного тесту відкриється проєкт: відтворюване SQL-дослідження на навчальному наборі SEOWORK.

Практична перевірка · урок 18 з 51

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що повертає LAG(value)?
2. Що повертає LEAD(value)?
3. Що буде для першого row з LAG без default?