Фильтры и сегментация
Фильтры позволяют выбирать подмножество данных для анализа. С их помощью вы можете сегментировать пользователей, отбирать определённые события и строить сложные условия.
Что такое фильтры?
Фильтр — это набор условий, которые определяют, какие события или пользователи будут включены в анализ. Фильтры работают на уровне SQL-запросов (но вам не нужно знать SQL), обеспечивая быстрое и эффективное выполнение.
Структура фильтров
Фильтры в Metriox имеют иерархическую структуру:
- Фильтр
- Логика — AND или OR
- Предикаты
- Предикат 1
- Предикат 2
- и так далее
Логика фильтров
Определяет, как комбинируются условия:
- AND — все условия должны выполняться
- OR — хотя бы одно условие должно выполняться
Типы предикатов
Предикат — это отдельное условие фильтра. Он состоит из:
- Тип — событие, свойство или пользователь
- Оператор — операция сравнения
- Значение — с чем сравниваем
- Отрицание — NOT (опционально)
Эти четыре части собираются в одну строку в конструкторе фильтров. Так он выглядит на странице События: переключатель НЕ, поле, оператор и значение, а меню Добавить тип фильтра добавляет следующий предикат.

Предикаты для событий
Фильтрация по названию события:
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 false | Email не подтверждён |
props.has_completed_onboarding NOT equals false | Завершили онбординг (true или null) |
Комбинирование условий
Логика AND
Все условия должны выполняться одновременно.
Пример:
- AND
Event equals "purchase_completed"props.amount greater than 500props.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"
- OR
В выборку попадут клики премиум-пользователей.
Отрицание (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
- OR
Проблемные транзакции:
- AND
Event equals "payment_failed"props.attempt_number greater than 2props.amount greater than or equal 500
Сегментация пользователей
Молодая аудитория из России:
- AND
props.age less than 25props.country equals "RU"props.language equals "ru"
High-value пользователи:
- AND
props.total_spent greater than 5000props.is_premium equals trueprops.last_activity greater than "2026-02-01T00:00:00Z"
Применение фильтров
Каждый виджет имеет свои фильтры:
- Виджет «Премиум покупки»
- Тип — Series
- Метрика — Events
- Фильтр
- AND
Event equals "purchase_completed"props.plan equals "premium"
- AND
Технические детали
Компиляция в 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 осторожно (может быть медленнее)
Тестирование
- Проверяйте фильтры на небольших временных диапазонах
- Сравнивайте результаты с ожидаемыми
- Используйте таблицы для проверки деталей