Перейти к основному содержимому

Фильтры и сегментация

Фильтры позволяют выбирать подмножество данных для анализа. С их помощью вы можете сегментировать пользователей, отбирать определённые события и строить сложные условия.

Что такое фильтры?

Фильтр — это набор условий, которые определяют, какие события или пользователи будут включены в анализ. Фильтры работают на уровне SQL-запросов (но вам не нужно знать SQL), обеспечивая быстрое и эффективное выполнение.

Структура фильтров

Фильтры в Metriox имеют иерархическую структуру:

  • Фильтр
    • Логика — AND или OR
    • Предикаты
      • Предикат 1
      • Предикат 2
      • и так далее

Логика фильтров

Определяет, как комбинируются условия:

  • AND — все условия должны выполняться
  • OR — хотя бы одно условие должно выполняться

Типы предикатов

Предикат — это отдельное условие фильтра. Он состоит из:

  1. Тип — событие, свойство или пользователь
  2. Оператор — операция сравнения
  3. Значение — с чем сравниваем
  4. Отрицание — NOT (опционально)

Эти четыре части собираются в одну строку в конструкторе фильтров. Так он выглядит на странице События: переключатель НЕ, поле, оператор и значение, а меню Добавить тип фильтра добавляет следующий предикат.

Страница «События» в Metriox: слева навигация по разделам, сверху выбор бота и диапазон «Last 7 days», в конструкторе фильтров один предикат «НЕ · ID пользователя · равно · 160266» с бейджем «1 условие» и меню «Добавить тип фильтра» с вариантами «Событие», «Свойство» и «Пользователь»

Предикаты для событий

Фильтрация по названию события:

Event [NOT] equals "button_click"
Event [NOT] contains "purchase"

Операторы для событий:

  • equals — точное совпадение
  • contains — содержит подстроку

Примеры:

УсловиеЧто попадёт в выборку
Event equals "purchase_completed"Только события с названием purchase_completed
Event contains "button"События button_click, button_view, share_button и другие с этой подстрокой
Event NOT equals "bot_started"Все события, кроме bot_started

Предикаты для свойств

Фильтрация по свойствам событий:

Property [NOT] <operator> <value>

Операторы зависят от типа данных свойства.


Предикаты для пользователей

Отбирают не отдельные события, а пользователей целиком — по тому, как они вели себя за выбранный период. Например: «пользователи, которые запускали бота минимум в 5 разных дней» или «те, кто потратил больше 10 000». Такой предикат сначала считает показатель по каждому пользователю, а потом оставляет тех, кто проходит по порогу.

Предикат состоит из четырёх частей:

ЧастьЧто задаётПример
Показательчто считать по пользователюКоличество событий, Уникальных дней, Уникальных событий, Сумма
Считать событиякакие события учитывать (обязательно)successful_payment
Окносчитать за весь период или по каждому днюВсего / За день
Порогоператор и число> 10000

«Считать события» обязательно. Без указания, какие именно события учитывать, показатель не имеет смысла — «больше 5» чего? Запрос без этого поля отклоняется, а не считается по всем событиям подряд.

Показатель «Сумма» дополнительно требует числовое свойство и источник — по той же причине, что и метрика Sum: события одного платежа могут прийти от двух источников, и без привязки к одному сумма удвоится. Подробнее: Метрики. Порог для суммы может быть дробным, у остальных показателей — целым.

Окно различает два разных вопроса. «Всего» — это сумма за весь период («потратил больше 10 000 за месяц»). «За день» — это максимум по дням («хотя бы в один день потратил больше 1 000»).

Примеры:

СегментПоказательСчитать событияОкноПорог
Постоянные пользователиУникальных днейлюбое событие запускаВсего>= 5
ПлатящиеСумма ($tg.total_amount, Bot API)successful_paymentВсего> 10000
Крупная разовая покупкаСумма ($tg.total_amount, Bot API)successful_paymentЗа день> 5000

Операторы по типам данных

String (Строка)

Операторы:

  • equals — точное совпадение
  • contains — содержит подстроку
  • not equals — не равно

Примеры:

УсловиеЧто попадёт в выборку
props.plan equals "premium"Только события с plan = "premium"
props.button_name contains "buy"button_name: "buy_now", "buy_premium", "buy_subscription"
props.language NOT equals "en"Все языки, кроме английского

Number (Число)

Операторы:

  • equals (=) — равно
  • not equals (!=) — не равно
  • greater than (>) — больше
  • less than (<) — меньше
  • greater than or equal (>=) — больше или равно
  • less than or equal (<=) — меньше или равно

Примеры:

УсловиеЧто попадёт в выборку
props.price greater than 100Цена больше 100
props.quantity equals 1Количество равно 1
props.age greater than or equal 18Возраст 18 и старше
props.rating NOT less than 4.0Рейтинг 4.0 и выше

DateTime (Дата и время)

Операторы:

  • equals (=) — точное совпадение
  • not equals (!=) — не равно
  • greater than (>) — после даты
  • less than (<) — до даты
  • greater than or equal (>=) — начиная с даты
  • less than or equal (<=) — до даты включительно

Примеры:

УсловиеЧто попадёт в выборку
props.subscription_start greater than "2026-03-01T00:00:00Z"Подписки, начавшиеся после 1 марта 2026
props.trial_ends_at less than or equal "2026-03-31T23:59:59Z"Пробный период заканчивается до конца марта
props.last_login NOT equals "2026-03-02T10:00:00Z"Последний вход не в указанное время
Формат даты

Используйте ISO 8601 формат: YYYY-MM-DDTHH:mm:ssZ


Boolean (Логический)

Операторы:

  • equals — равно (true/false)
  • not equals — не равно

Примеры:

УсловиеЧто попадёт в выборку
props.is_premium equals trueТолько премиум-пользователи
props.email_verified equals falseEmail не подтверждён
props.has_completed_onboarding NOT equals falseЗавершили онбординг (true или null)

Комбинирование условий

Логика AND

Все условия должны выполняться одновременно.

Пример:

  • AND
    • Event equals "purchase_completed"
    • props.amount greater than 500
    • props.currency equals "RUB"

В выборку попадут покупки на сумму больше 500 рублей.

Логика OR

Хотя бы одно условие должно выполняться.

Пример:

  • OR
    • Event equals "purchase_completed"
    • Event equals "subscription_renewed"
    • Event equals "trial_started"

В выборку попадёт любое событие монетизации.

Вложенная логика

Комбинируйте AND и OR для сложных условий:

Пример:

  • AND
    • OR
      • Event equals "button_click"
      • Event equals "link_click"
    • props.plan equals "premium"

В выборку попадут клики премиум-пользователей.


Отрицание (NOT)

Добавьте NOT к любому предикату для инверсии условия:

УсловиеЧто попадёт в выборку
Event NOT equals "bot_started"Все события, кроме bot_started
props.plan NOT equals "free"Платные пользователи
props.age NOT less than 18Возраст 18 и старше — инверсия условия «меньше 18»

Примеры фильтров

Простые фильтры

Все покупки:

Event equals "purchase_completed"

Премиум-пользователи:

props.is_premium equals true

Покупки дороже 1000 руб:

  • AND
    • Event equals "purchase_completed"
    • props.amount greater than 1000

Сложные фильтры

Новые премиум-пользователи:

  • AND
    • Event equals "subscription_started"
    • props.plan equals "premium"
    • props.is_trial equals false

Активные пользователи (не боты):

  • AND
    • OR
      • Event contains "button"
      • Event contains "screen"
      • Event contains "message"
    • props.is_bot NOT equals true

Проблемные транзакции:

  • AND
    • Event equals "payment_failed"
    • props.attempt_number greater than 2
    • props.amount greater than or equal 500

Сегментация пользователей

Молодая аудитория из России:

  • AND
    • props.age less than 25
    • props.country equals "RU"
    • props.language equals "ru"

High-value пользователи:

  • AND
    • props.total_spent greater than 5000
    • props.is_premium equals true
    • props.last_activity greater than "2026-02-01T00:00:00Z"

Применение фильтров

Каждый виджет имеет свои фильтры:

  • Виджет «Премиум покупки»
    • Тип — Series
    • Метрика — Events
    • Фильтр
      • AND
        • Event equals "purchase_completed"
        • props.plan equals "premium"

Технические детали

Компиляция в SQL

Фильтры компилируются в условия SQL WHERE.

Фильтр:

  • AND
    • Event equals "purchase_completed"
    • props.amount greater than 500

SQL (концептуально):

WHERE event_name = 'purchase_completed'
AND JSONExtractFloat(props, 'amount') > 500
Примечание

Вам не нужно знать SQL — Metriox автоматически преобразует ваши фильтры в оптимизированные запросы.

Производительность

Metriox использует ClickHouse для быстрого выполнения запросов:

  • Индексация по event_name
  • Эффективная работа с JSON свойствами
  • Параллельное выполнение запросов

Оптимизация:

  • Фильтруйте по событиям в первую очередь
  • Используйте equals вместо contains где возможно
  • Ограничивайте временной диапазон

Лучшие практики

Построение фильтров

  • Начинайте с фильтрации по событиям
  • Добавляйте условия по свойствам
  • Используйте NOT осторожно (может быть медленнее)

Тестирование

  • Проверяйте фильтры на небольших временных диапазонах
  • Сравнивайте результаты с ожидаемыми
  • Используйте таблицы для проверки деталей

Что дальше?

  • Метрики — узнайте, какие метрики считать с фильтрами
  • Виджеты — применяйте фильтры в виджетах
  • События — структура событий и свойств