Фильтры
Фильтры позволяют выбирать подмножество данных для анализа. С их помощью вы можете сегментировать пользователей, отбирать определенные события и строить сложные условия.
Что такое фильтры?
Фильтр — это набор условий, которые определяют, какие события или пользователи будут включены в анализ. Фильтры работают на уровне 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, etc.
✅ Event NOT equals "bot_started"
→ Все события, кроме "bot_started"
Предикаты для свойств
Фильтрация по свойствам событий:
Property [NOT] <operator> <value>
Операторы зависят от типа данных свойства.
Операторы по типам данных
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 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"
Уровень дашборда
Глобальные фильтры применяются ко всем виджетам:
Дашборд фильтр:
└── props.country equals "RU"
Все виджеты будут показывать только данные из России
Технические детали
Компиляция в 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 осторожно (может быть медленнее)
Тестирование
- Проверяйте фильтры на небольших временных диапазонах
- Сравнивайте результаты с ожидаемыми
- Используйте таблицы для проверки деталей