«Выручка выросла» — но за счёт чего: пришли новые клиенты или вернулись старые? Это разные истории (привлечение vs удержание), и считаются они отдельным паттерном. Разбираем по DAX Patterns SQLBI.
В учебном наборе нет таблицы клиентов, поэтому примеры — на типовой рознице: факт Продажи с КодКлиента и справочник Клиенты. Логика универсальна.
Определения
- Новый клиент в периоде — тот, чья первая в истории покупка попала в этот период.
- Вернувшийся — покупал в периоде, но первая покупка была раньше.
- (Иногда добавляют потерянных — покупали раньше, в периоде нет.)
Ключ ко всему — дата первой покупки каждого клиента.
Мера новых клиентов
Идея: клиент новый, если его первая покупка за всю историю лежит внутри текущего периода.
Новые клиенты =
VAR _Период = VALUES ( Календарь[Дата] )
RETURN
COUNTROWS (
FILTER (
VALUES ( Клиенты[КодКлиента] ),
VAR _ПерваяПокупка =
CALCULATE ( MIN ( Продажи[Дата] ), ALL ( Календарь ) )
RETURN
_ПерваяПокупка IN _Период
)
)
Для каждого клиента берём его первую покупку за всю историю (ALL(Календарь) снимает фильтр периода), и считаем клиента новым, если эта дата попадает в текущий период.
Вернувшиеся — через разницу
Вернувшиеся = все активные в периоде минус новые:
Активные клиенты = DISTINCTCOUNT ( Продажи[КодКлиента] )
Вернувшиеся клиенты = [Активные клиенты] - [Новые клиенты]
Просто и надёжно: кто покупал в периоде, но не новый, — значит вернулся.
Всё держится на «первой покупке за всю историю». CALCULATE ( MIN(Дата), ALL(Календарь) ) даёт дату первого заказа клиента независимо от выбранного периода — а дальше сравниваем её с текущим окном.
Тонкости
- Окно «новизны». «Новый за месяц» и «новый за год» — разные меры; решите гранулярность.
- Производительность. Перебор клиентов с
MINпо каждому — дорого на больших базах; на проде оптимизируют через предрасчёт даты первой покупки (расчётный столбец вКлиенты). - Граница периода. Аккуратно с
ALL(Календарь)— он должен снимать только фильтр дат, не трогая другие срезы (регион, канал).
Частая ошибка: «новый = первая покупка в этом месяце среди покупок этого месяца». Так любой активный окажется новым. Новизна — относительно всей истории, поэтому и нужен ALL(Календарь).
Зачем бизнесу
Разделение притока и удержания меняет решения: растёт за счёт новых — вопрос к привлечению и удержанию (удержим ли?); растёт за счёт вернувшихся — здоровая лояльная база. Связка с LFL (сопоставимые продажи) и когортным анализом даёт полную картину динамики клиентов.
Что дальше
Приток и возврат разобрали. Дальше — третья сторона клиентской динамики: удержание и когортный анализ (сколько из пришедших осталось). Следующий урок.