JIRA Filters and JQL
As a JIRA project grows, finding the right issues quickly becomes critical. The default board and backlog views show everything at once, which is overwhelming in large projects. JIRA Filters and JQL (JIRA Query Language) solve this by letting teams create precise, reusable searches that return exactly the issues they need in seconds. Mastering JQL transforms a JIRA user from a basic practitioner into a power user.
What Is a JIRA Filter?
A JIRA Filter is a saved search that returns a specific list of issues based on criteria. Filters are reusable — save once and use any time. Filters power dashboards, board configurations, quick filters, and email subscription reports. Any user can create, save, and share filters.
Analogy: A JIRA Filter works like a saved search on an e-commerce website. Setting the search to "Electronics under ₹5000 with 4+ star rating" and bookmarking it returns the same filtered results every visit. A JIRA filter does the same for project issues — set the criteria once and retrieve the matching issues instantly anytime.
Basic Search vs Advanced Search
| Aspect | Basic Search | Advanced Search (JQL) |
|---|---|---|
| How it works | Dropdown selectors for Project, Type, Status, Assignee | Text-based query language with operators |
| Learning curve | Zero — no syntax knowledge needed | Moderate — requires learning JQL syntax |
| Flexibility | Limited to predefined filter options | Extremely flexible — any field, any operator, any combination |
| Reusability | Can be saved as a filter | Can be saved as a filter |
| Power | Suitable for simple queries | Required for complex, multi-condition queries |
| Switch between modes | Yes — JIRA converts basic to JQL automatically | Yes — but complex JQL cannot always convert back to basic |
JQL Syntax Structure
A JQL query follows a simple structure: Field → Operator → Value. Multiple conditions connect using AND, OR, and NOT. Parentheses group conditions for complex logic.
Basic JQL Structure
| Part | Description | Example |
|---|---|---|
| Field | The issue property to search on | assignee, status, priority, project, issuetype |
| Operator | The comparison operator | =, !=, >, <, in, not in, is, is not, ~ |
| Value | The value to match | "In Progress", currentUser(), "High", "MBA" |
| Connector | Joins multiple conditions | AND, OR, NOT |
| Order By | Sorts the results | ORDER BY created DESC |
JQL Operators Reference
| Operator | Meaning | Example |
|---|---|---|
| = | Equals — exact match | status = "In Progress" |
| != | Not equals | status != "Done" |
| > | Greater than (for numbers and dates) | priority > Medium |
| < | Less than | story_points < 5 |
| in | Matches any value in a list | status in ("To Do", "In Progress") |
| not in | Does not match any value in a list | status not in ("Done", "Cancelled") |
| ~ | Contains (text search) | summary ~ "login" |
| !~ | Does not contain | summary !~ "draft" |
| is EMPTY | Field has no value | assignee is EMPTY |
| is not EMPTY | Field has any value | due date is not EMPTY |
JQL Functions
JQL functions generate dynamic values at query runtime. They make filters smart — a filter using currentUser() always returns the logged-in user's issues, whoever runs it.
| Function | What It Returns | Example Usage |
|---|---|---|
currentUser() | The username of the logged-in user | assignee = currentUser() |
now() | The current date and time | due < now() (overdue issues) |
startOfDay() | Midnight at the start of today | created > startOfDay() (today's issues) |
endOfWeek() | End of the current week (Sunday) | due < endOfWeek() |
openSprints() | All currently running sprints | sprint in openSprints() |
closedSprints() | All completed sprints | sprint in closedSprints() |
membersOf("group") | All users in a JIRA group | assignee in membersOf("dev-team") |
releasedVersions() | All released fix versions | fixVersion in releasedVersions() |
Essential JQL Queries for Daily Use
These queries cover the most common JIRA search scenarios that project managers, developers, and QA engineers use every day.
| Use Case | JQL Query |
|---|---|
| All issues assigned to me that are not done | assignee = currentUser() AND status != Done |
| All issues in the current sprint | sprint in openSprints() |
| All high-priority bugs in project MBA | project = MBA AND issuetype = Bug AND priority in (High, Highest) |
| All overdue issues | due < now() AND status != Done |
| Issues updated in the last 7 days | updated > -7d |
| All unassigned issues in current sprint | sprint in openSprints() AND assignee is EMPTY |
| All issues created today | created >= startOfDay() |
| All issues I reported this week | reporter = currentUser() AND created > startOfWeek() |
| All issues in epics under a specific label | labels = security AND issuetype != Epic |
| All stories not yet estimated | issuetype = Story AND story_points is EMPTY AND sprint in openSprints() |
| All issues blocked (using link type) | issueFunction in linkedIssuesOf("status = 'In Progress'", "is blocked by") |
| All issues in a specific component | project = MBA AND component = "Authentication" AND status != Done |
Saving a Filter
Once a JQL query returns the correct results, save it as a named filter for reuse.
How to Save a Filter
| Step | Action |
|---|---|
| 1 | Open the Issues menu from the top navigation bar and click Search for Issues |
| 2 | Switch to Advanced mode and type the JQL query |
| 3 | Verify the results are correct |
| 4 | Click Save As and give the filter a descriptive name |
| 5 | Click Submit — the filter now appears in Filters → My Filters |
Sharing Filters
Saved filters can be shared with specific users, groups, or the entire organization. Sharing makes a filter available in other users' "Filters" menu and available to use in dashboards and board configurations.
| Share With | Effect |
|---|---|
| Private (default) | Only the creator can see and use the filter |
| A specific Project | All members of that project can use the filter |
| A specific Group | All members of that JIRA group can use the filter |
| Any logged-in user | All users in the JIRA instance can use the filter |
Filter Subscriptions
JIRA allows users to subscribe to a filter with an email schedule. JIRA runs the filter automatically at the set frequency and emails the resulting issue list to the subscriber. This is useful for daily or weekly reports sent without any manual effort.
| Field | Example Setting |
|---|---|
| Filter Name | Open High Priority Bugs — MBA Project |
| Recipient | priya.sharma@company.com (Project Manager) |
| Frequency | Every day at 9:00 AM |
| Send if no results | No — skip email when zero issues match |
ORDER BY in JQL
Adding ORDER BY at the end of any JQL query sorts the results. Multiple sort fields are supported.
| Goal | ORDER BY Clause |
|---|---|
| Newest issues first | ORDER BY created DESC |
| Oldest issues first | ORDER BY created ASC |
| Highest priority first | ORDER BY priority ASC |
| Most recently updated first | ORDER BY updated DESC |
| Alphabetically by assignee | ORDER BY assignee ASC |
Summary
JIRA Filters and JQL give teams the ability to find and surface exactly the right issues at the right time. Basic search covers simple needs. JQL handles complex, multi-condition queries. Functions like currentUser() and openSprints() make filters dynamic and reusable for any team member. Saving, sharing, and subscribing to filters turns one-time searches into permanent productivity tools. The ability to build precise filters is a foundational skill for creating useful JIRA dashboards — the visual reporting surfaces where filters become interactive management tools.
