JQL: продвинутый поиск и фильтры в Jira
Продвинутое4 минРедакция Innovialabs
Коротко
JQL — язык запросов Jira: вы собираете поля, операторы и функции в условия вида assignee = currentUser() AND resolution = Unresolved, сохраняете их как фильтры и используете в дашбордах и рассылках.
Что такое JQL
JQL (Jira Query Language) — язык расширенного поиска в Jira. Запрос — это набор условий вида поле, оператор, значение, объединенных через AND, OR, NOT и при необходимости отсортированных через ORDER BY:
project = APP AND type = Bug AND resolution = Unresolved ORDER BY priority DESC
Переключите поиск задач из базового режима в режим JQL, и Jira будет подсказывать поля, значения и функции по мере ввода.
Операторы на каждый день
| Оператор | Значение | Пример |
|---|---|---|
= != | Равно, не равно | status = "In Progress" |
> >= < <= | Сравнение, чаще всего для дат | created >= -7d |
IN NOT IN | Одно из списка | priority IN (Highest, High) |
~ !~ | Содержит текст, не содержит | summary ~ "payment" |
IS EMPTY IS NOT EMPTY | Поле пустое или заполнено | assignee IS EMPTY |
WAS | Поле когда-то имело значение | status WAS "QA" |
CHANGED | Поле изменилось, можно уточнить как | status CHANGED TO Done AFTER -14d |
Советы:
- Значения с пробелами берите в двойные кавычки:
"In Progress". - Относительные даты пишутся с единицами:
-1d,-2w,-4h. - Ставьте скобки, когда смешиваете
ANDиOR:project = APP AND (priority = Highest OR labels = hotfix). statusCategory(To Do, In Progress, Done) надежнее, чем перечисление всех статусов по имени.
Функции, которые делают запрос динамическим
Функции вычисляются в момент поиска, поэтому один сохраненный запрос работает для всех и каждую неделю.
| Функция | Возвращает |
|---|---|
currentUser() | Того, кто выполняет запрос |
now() | Текущие дату и время |
startOfDay(), startOfWeek(), startOfMonth() | Начало текущего периода; принимают смещение, например startOfWeek(-1) |
endOfWeek(), endOfMonth() | Конец текущего периода |
openSprints(), closedSprints() | Активные или завершенные спринты |
membersOf("group") | Пользователей группы |
unreleasedVersions() | Еще не выпущенные версии |
Учтите: начало недели зависит от настроек локали и часового пояса в Jira.
Готовые запросы для менеджеров
Замените APP на ключ своего проекта.
Что осталось в текущем спринте:
project = APP AND sprint IN openSprints() AND statusCategory != Done ORDER BY Rank
Просроченные задачи:
project = APP AND duedate < now() AND resolution = Unresolved ORDER BY duedate ASC
Задачи, зависшие в работе на пять дней и больше:
project = APP AND status = "In Progress" AND updated <= -5d
Критичные баги без исполнителя:
project = APP AND type = Bug AND priority IN (Highest, High) AND assignee IS EMPTY AND resolution = Unresolved
Созданные на этой неделе и решенные на прошлой:
project = APP AND created >= startOfWeek()
project = APP AND resolved >= startOfWeek(-1) AND resolved < startOfWeek()
Вернувшиеся из QA за последние две недели:
project = APP AND status CHANGED FROM QA TO "In Progress" AFTER -14d
Над чем команда работает прямо сейчас:
assignee IN membersOf("dev-team") AND statusCategory = "In Progress" ORDER BY assignee
Сохраненные фильтры
Запрос становится фильтром, когда вы нажимаете Save as и даете ему имя. Дальше:
- Поделитесь им с группой, проектом или конкретными людьми; по умолчанию фильтр приватный.
- Называйте понятно: «APP — просрочено», а не «мой фильтр 3».
- Используйте повторно как источник для досок, дашбордов и подписок. Сама доска тоже построена на фильтре, поэтому изменение этого фильтра меняет то, что показывает доска.
Дашборды
Дашборд — страница с гаджетами, и большинство гаджетов берут данные из сохраненного фильтра. Полезные сочетания:
- Filter Results — список задач из фильтра, например просроченных.
- Two Dimensional Filter Statistics — таблица вроде «исполнитель по статусам».
- Pie Chart — распределение по приоритету, типу или компоненту.
- Created vs Resolved — успевает ли команда за входящим потоком.
Открывайте доступ к дашборду той же аудитории, что и к его фильтрам, иначе люди увидят пустые гаджеты.
Подписки
Подписка присылает результаты фильтра на почту по расписанию. Откройте фильтр, создайте подписку, выберите получателей и частоту — например, просроченные задачи каждый понедельник утром. Подписок должно быть немного, и каждая — по делу: ежедневное письмо, которое никто не читает, — это шум.
Частые ошибки
- Жестко прописанные имена и даты вместо
currentUser()иstartOfWeek(). status != Done, когда в workflow несколько финальных статусов;statusCategory != Doneнадежнее.- Забытые скобки вокруг
OR. - Доступ к дашборду открыт, а к его фильтрам — нет.