Перейти к содержанию
Innovialabs

JQL: продвинутый поиск и фильтры в Jira

Продвинутое4 мин

Коротко

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.
  • Доступ к дашборду открыт, а к его фильтрам — нет.

Частые вопросы

JQL учитывает права доступа, поэтому каждый видит задачи только из доступных ему проектов. Вторая частая причина — функция currentUser(), которая для каждого пользователя возвращает его самого.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.