Skip to main content

Overview

Filters let you narrow down data to specific segments. Trodo provides a visual query builder with AND/OR logic and type-specific operators for precise filtering.

Filter Types

You can filter by these categories:
Filter TypeDescriptionExample
Event FiltersFilter by event name and propertiesEvents where event_name = "agent_run_completed"
User Profile FiltersFilter by user propertiesUsers where plan = "pro"
Time FiltersFilter by date/time rangesEvents in last 30 days
Cohort FiltersFilter by cohort membershipUsers in "Power Users" cohort

Query Builder

Trodo uses a visual query builder with AND/OR logic:
Filter where:
├── event_name = "agent_run_completed"
├── AND outcome = "success"
└── OR (
    ├── duration_seconds > 120
    └── AND plan = "enterprise"
)
Combine conditions with:
  • AND: All conditions must be true
  • OR: At least one condition must be true
  • Grouping: Nest conditions for complex logic

String Operators

For text properties like country, browser_name, event_name:
OperatorDescriptionExample
isExact matchcountry is "US"
is_notDoes not equalcountry is_not "US"
containsContains substringemail contains "@gmail"
does_not_containDoes not contain substringemail does_not_contain "test"
is_setProperty has any valueemail is_set
is_not_setProperty has no valueemail is_not_set

String Examples

# Exact match
country is "United States"

# Exclude specific value
browser_name is_not "Safari"

# Partial match
current_url contains "/workflows"
page_title contains "Dashboard"

# Check existence
email is_set
workspace_id is_not_set

Number Operators

For numeric properties like amount_usd, session_count, duration_seconds:
OperatorDescriptionExample
equalEqualsamount equal 100
not_equalDoes not equalamount not_equal 0
greater_thanGreater thanamount greater_than 100
greater_than_equalGreater than or equalamount greater_than_equal 100
less_thanLess thanamount less_than 1000
less_than_equalLess than or equalamount less_than_equal 1000
betweenIn range (inclusive)amount between 100 and 1000
not_betweenOutside rangeamount not_between 100 and 1000
is_numericHas a numeric valueprice is_numeric
is_not_numericNot a number (null/NaN)price is_not_numeric

Number Examples

# Exact value
successful_runs equal 0            # Never completed a run

# Comparisons
seat_count greater_than 10         # Larger workspaces
duration_seconds less_than 5       # Very fast runs

# Range filtering
mrr_usd between 100 and 10000      # Mid-market accounts

# Existence checks
trial_end_date is_numeric

Boolean Operators

For true/false properties like has_completed_onboarding, is_paying_customer:
OperatorDescriptionExample
is_trueProperty is truehas_completed_onboarding is_true
is_falseProperty is falsehas_completed_onboarding is_false

Boolean Examples

has_completed_onboarding is_true
is_paid_customer is_false
beta_opt_in is_true

Datetime Operators

For date/time properties like timestamp, created_at, last_seen:
OperatorDescriptionExample
lastWithin the last N days/hourstimestamp last 7 days
not_in_the_lastNot within the last N daystimestamp not_in_the_last 7 days
betweenBetween two datestimestamp between Jan 1 and Jan 31
not_betweenOutside date rangetimestamp not_between Jan 1 and Jan 31
onOn specific datetimestamp on Jan 15
not_onNot on specific datetimestamp not_on Jan 1
before_the_lastBefore the last N daystimestamp before_the_last 30 days
beforeBefore specific datetimestamp before Jan 1, 2024
sinceSince specific datetimestamp since Jan 1, 2024
in_the_nextWithin the next N daysexpiry_date in_the_next 7 days

Datetime Examples

# Relative time filters
timestamp last 30 days             # Last month's activity
timestamp last 24 hours            # Today's events
created_at not_in_the_last 90 days # Older users only

# Date range
timestamp between "2024-01-01" and "2024-01-31"
timestamp not_between "2024-12-24" and "2024-12-26"  # Exclude holidays

# Specific date
timestamp on "2024-01-15"          # Single day
timestamp not_on "2024-01-01"      # Exclude New Year

# Before/after
timestamp before "2024-06-01"      # Before June
timestamp since "2024-01-01"       # This year only
first_seen before_the_last 365 days  # Users over a year old

# Future dates (for expiry, subscription end, etc.)
subscription_end in_the_next 30 days  # Expiring soon

List Operators

For array properties like enabled_integrations, feature_flags, tags:
OperatorDescriptionExample
any_in_listAny item matchesenabled_integrations any_in_list ["slack", "notion"]
all_in_listAll items matchrequired_tags all_in_list ["verified", "active"]
List operators can be combined with nested operators based on item type:

List with String Items

# Any integration is slack OR notion
enabled_integrations any_in_list where item is "slack" OR item is "notion"

# Feature flag prefix
feature_flags any_in_list where item contains "beta_"

# All tags must be from approved list
tags all_in_list where item is "verified" OR item is "premium"

List with Number Items

# Any invoice line over $1000
invoice_line_amounts any_in_list where item greater_than 1000

# Seat counts per workspace all above zero
workspace_seats all_in_list where item greater_than 0

Filter Combinations

AND Logic

All conditions must be true:
Events where:
├── event_name is "agent_run_completed"
├── AND outcome is "success"
├── AND duration_seconds greater_than 10
└── AND timestamp last 7 days

→ Successful runs taking more than 10s in the last week

OR Logic

At least one condition must be true:
Users where:
├── plan is "pro"
└── OR successful_runs greater_than 100

→ Pro users OR very heavy users

Nested Groups

Combine AND/OR with grouping:
Events where:
├── event_name is "agent_run_completed"
└── AND (
    ├── workflow_id is "weekly_report"
    └── OR workflow_id is "crm_sync"
)
└── AND (
    ├── duration_seconds greater_than 60
    └── OR plan is "enterprise"
)

→ Long-running or enterprise runs for key workflows

Event Filters

Filter events by name and properties:
Events:
├── event_name is "agent_run_completed"
├── Properties:
│   ├── outcome is "success"
│   └── AND duration_seconds less_than 60

Common Event Filters

FilterUse Case
event_name is "signup_completed"Signup conversions
event_name is "agent_run_completed"Completed runs
custom_properties.campaign is "summer"Campaign-specific events

User Profile Filters

Filter by user attributes:
Users:
├── plan is "pro"
├── AND country is "US"
└── AND has_completed_onboarding is_true

Common User Filters

FilterUse Case
plan is "enterprise"Enterprise accounts
first_seen last 30 daysNew users
session_count greater_than 10Engaged users
workspace_id is_setWorkspace members

Cohort Filters

Filter by cohort membership:
Users:
├── IN cohort "Power Users"
└── AND NOT IN cohort "Churned Users"
Cohort filters are particularly useful for:
  • Comparing behavior across segments
  • Excluding specific user groups
  • Analyzing high-value users

Time Filters

Every report supports time range selection:
Time Range: Last 30 days
Granularity: Daily

OR

Custom Range: Jan 1, 2024 - Jan 31, 2024
Granularity: Weekly
See Time Controls for detailed time range options.

Saved Filters

Save frequently used filters for reuse:
  1. Build your filter combination
  2. Click Save Filter
  3. Name it descriptively: “US Pro activated users”
  4. Apply to any report with one click

Best Practices

Be Specific

✅ Good: event_name is "agent_run_completed" AND outcome is "success"
❌ Vague: event_name contains "run"

Use Appropriate Operators

✅ For exact match: is / equal
✅ For ranges: between / greater_than
✅ For text search: contains

❌ Using contains for exact values
❌ Using is for partial matches

Test Filter Results

Before building complex reports, verify your filters:
  1. Apply filter to simple metric (total events)
  2. Check count makes sense
  3. Spot-check sample records if possible

Document Complex Filters

For complex nested logic, add comments:
# High-engagement paying customers
Users where:
├── plan is "pro"
└── OR (
    ├── successful_runs greater_than 20
    └── AND session_count greater_than 50
)

Next Steps

Breakdowns

Segment data by properties

Time Controls

Configure time ranges