۳۰ کوئری JQL که هر Jira Admin باید بلد باشد
اگر با Jira در یک سازمان متوسط یا بزرگ کار کرده باشید، احتمالاً بارها به این سؤالها برخوردهاید:
کدام تسکها هنوز مسئول ندارند؟ کدام کارها از موعدشان گذشتهاند؟ چه Issueهایی مدت زیادی است تغییر نکردهاند؟ چه چیزی در Sprint فعلی باقی مانده است؟ کدام درخواستها اولویت بحرانی دارند؟ و مهمتر از همه، چطور میتوانیم این اطلاعات را بدون بررسی دستی صدها Issue پیدا کنیم؟
اینجاست که JQL یا Jira Query Language اهمیت پیدا میکند.
JQL زبان جستوجوی پیشرفته Jira است و به Jira Admin، مدیر پروژه، تیم فنی و حتی مدیران سازمان کمک میکند اطلاعات موردنیازشان را دقیقتر پیدا کنند. علاوه بر این، میتوانید نتایج JQL را بهصورت Filter ذخیره کنید و بعداً در Dashboard، Board یا گزارشهای مختلف از آنها استفاده کنید.
در این راهنما، ۳۰ کوئری کاربردی را بررسی میکنیم که بیشتر آنها مستقیماً برای مدیریت روزمره Jira در سازمانها کاربرد دارند.
نکته: در این مقاله از اصطلاحات رایج Jira Data Center مانند Issue و Project استفاده میکنیم. همچنین نام پروژه، وضعیت، Priority، Sprint و سایر مقادیر را باید مطابق تنظیمات Jira خودتان تغییر دهید.

JQL چیست و چرا Jira Admin باید آن را بلد باشد؟
در سادهترین حالت، هر Query در JQL از سه بخش اصلی تشکیل میشود:
Field + Operator + Value
برای مثال:
project = IT
در این Query، project فیلد، = عملگر و IT مقدار موردنظر است.
بااینحال، JQL فقط به همین Queryهای ساده محدود نمیشود. شما میتوانید چند شرط را با AND و OR ترکیب کنید، نتایج را با ORDER BY مرتب کنید و از توابعی مانند currentUser() یا startOfDay() کمک بگیرید. Jira Data Center این عملگرها، کلمات کلیدی و توابع را در Advanced Search ارائه میکند.
بنابراین، اگر مدیریت Jira را بر عهده دارید، یادگیری JQL یکی از مهارتهایی است که مستقیماً سرعت کار شما را افزایش میدهد.
۱. پیدا کردن تمام Issueهای یک پروژه
اول از یک Query ساده شروع کنیم.
اگر بخواهید تمام Issueهای پروژهای با کلید IT را ببینید:
project = IT
این Query برای زمانی مناسب است که بخواهید یک Filter پایه برای پروژه بسازید.
علاوه بر این، میتوانید همین Filter را مبنای Queryهای پیچیدهتر قرار دهید.
۲. پیدا کردن Issueهای باز یک پروژه
در سازمانها معمولاً مدیر پروژه فقط به کارهای باز نیاز دارد، نه Issueهایی که قبلاً بسته شدهاند.
برای این کار:
project = IT AND statusCategory != Done
این Query تمام Issueهایی را نشان میدهد که هنوز در دسته Done قرار نگرفتهاند.
در نتیجه، برای ساخت یک نمای کلی از کارهای جاری پروژه بسیار کاربردی است.
۳. پیدا کردن Issueهای بدون مسئول
یکی از مهمترین Queryها برای Jira Adminها همین مورد است.
project = IT AND assignee IS EMPTY
اگر سازمان شما تعداد زیادی پروژه و تیم دارد، این Query میتواند بهسرعت Issueهای بدون مسئول را پیدا کند.
به همین دلیل، میتوانید آن را در یک Filter مدیریتی قرار دهید و بهصورت دورهای بررسی کنید.
۴. پیدا کردن Issueهای یک کاربر خاص
فرض کنید میخواهید تمام کارهای یک کاربر را پیدا کنید:
assignee = "username"
البته در Jira شما ممکن است Jira Admin از Username، نام کاربری یا شناسه متناسب با تنظیمات همان نسخه استفاده کند.
برای همین، بهتر است مقدار واقعی کاربر را از پیشنهادهای JQL انتخاب کنید.
۵. پیدا کردن کارهای مربوط به خودمان
اگر میخواهید یک Filter عمومی بسازید که برای هر کاربر، Issueهای خودش را نمایش دهد، currentUser() انتخاب بسیار مناسبی است:
assignee = currentUser()
مزیت این Query این است که لازم نیست برای هر کاربر Filter جداگانه بسازید.
بنابراین، میتوانید یک Filter مشترک برای اعضای تیم ایجاد کنید. Jira Data Center تابع currentUser() را برای جستوجوی Issueهای مرتبط با کاربر واردشده پشتیبانی میکند.
۶. پیدا کردن Issueهایی که کاربر گزارش کرده اما خودش مسئول آنها نیست
این Query برای تیمهای پشتیبانی و مدیران پروژه بسیار کاربردی است:
reporter = currentUser()
AND assignee != currentUser()
در نتیجه، کاربر میتواند Issueهایی را ببیند که خودش ایجاد کرده، اما فرد دیگری آنها را پیگیری میکند.
۷. پیدا کردن Issueهای با اولویت بالا
اگر سازمان شما از Priorityهایی مانند High، Highest و Critical استفاده میکند، میتوانید آنها را یکجا پیدا کنید:
priority IN (Highest, High)
این Query برای ساخت Dashboard مدیریتی یا گزارش روزانه بسیار مفید است.
البته اگر نام Priorityهای سازمان شما فارسی یا سفارشی باشد، باید همان مقادیر را جایگزین کنید.
۸. پیدا کردن Issueهای بحرانی که هنوز بسته نشدهاند
برای مثال، اگر میخواهید تمام کارهای با اولویت Highest را که هنوز بسته نشدهاند پیدا کنید:
priority = Highest
AND resolution IS EMPTY
به این ترتیب، مدیر تیم میتواند روی موارد مهمی تمرکز کند که هنوز نتیجه نهایی ندارند.
۹. پیدا کردن Issueهای عقبافتاده
یکی از کاربردیترین Queryهای سازمانی، پیدا کردن کارهایی است که از Due Date آنها گذشته است:
duedate < now()
AND resolution IS EMPTY
این Query فقط Issueهایی را پیدا میکند که تاریخ سررسیدشان گذشته و هنوز Resolution ندارند.
بنابراین، برای کنترل تعهدات تیم و گزارش کارهای عقبافتاده بسیار مناسب است.
۱۰. پیدا کردن Issueهایی که امروز سررسید میشوند
برای پیدا کردن کارهایی که امروز باید انجام شوند:
duedate >= startOfDay()
AND duedate < startOfDay("+1d")
AND resolution IS EMPTY
این Query برای گزارش صبحگاهی تیمها بسیار کاربردی است.
بهعلاوه، میتوانید آن را در یک Filter ذخیره کنید و در Dashboard نمایش دهید.
۱۱. پیدا کردن Issueهایی که در هفت روز اخیر ایجاد شدهاند
برای بررسی ورودیهای جدید پروژه:
created >= startOfDay("-7d")
ORDER BY created DESC
در نتیجه، جدیدترین Issueها را در بالای لیست میبینید.
این Query برای تیمهای پشتیبانی و Help Desk کاربرد زیادی دارد.
۱۲. پیدا کردن Issueهایی که امروز ایجاد شدهاند
اگر فقط کارهای امروز را میخواهید:
created >= startOfDay()
ORDER BY created DESC
بنابراین، میتوانید از آن برای گزارش روزانه ورودیهای Jira استفاده کنید.
۱۳. پیدا کردن Issueهایی که اخیراً تغییر نکردهاند
گاهی Issue هنوز باز است، اما مدت زیادی هیچکس آن را بررسی نکرده است.
برای مثال، برای پیدا کردن Issueهایی که بیش از ۱۴ روز تغییر نکردهاند:
updated < startOfDay("-14d")
AND resolution IS EMPTY
این Query یکی از بهترین ابزارها برای پیدا کردن Stale Issueها است.
در نتیجه، Jira Admin یا مدیر پروژه میتواند مشخص کند کدام کارها در بکلاگ فراموش شدهاند.
۱۴. پیدا کردن Issueهای باز یک پروژه که مدت زیادی تغییر نکردهاند
حالا میتوانیم Query قبلی را دقیقتر کنیم:
project = IT
AND statusCategory != Done
AND updated < startOfDay("-30d")
این Query برای پروژههای بزرگ بسیار ارزشمند است؛ زیرا به شما کمک میکند Issueهایی را پیدا کنید که شاید دیگر نیازی به ادامه آنها نباشد.
۱۵. پیدا کردن Issueهای یک Sprint فعال
اگر میخواهید کارهای Sprint فعلی را ببینید:
sprint IN openSprints()
Jira Data Center تابع openSprints() را برای پیدا کردن Sprintهای فعال ارائه میکند.
برای محدود کردن Query به یک پروژه نیز میتوانید بنویسید:
project = IT
AND sprint IN openSprints()
برای کسب اطلاعات تخصصی راجع به خدمات مشاوره ما در نصب جیرا به مطلب زیر مراجعه فرمایید:
نصب و راه اندازی جیرا
۱۶. پیدا کردن کارهای باقیمانده Sprint فعلی
برای مدیریت روزانه Sprint، این Query بسیار کاربردی است:
project = IT
AND sprint IN openSprints()
AND resolution IS EMPTY
ORDER BY priority DESC
در نتیجه، تیم میتواند کارهای باقیمانده را بر اساس Priority بررسی کند.
۱۷. پیدا کردن Issueهایی که خارج از Sprint هستند
اگر میخواهید Issueهایی را پیدا کنید که هنوز به Sprint فعال اختصاص ندادهاید:
project = IT
AND sprint IS EMPTY
AND resolution IS EMPTY
این Query برای بررسی Backlog بسیار مفید است.
بااینحال، توجه کنید که «Sprint خالی» همیشه به معنی مشکل نیست؛ بعضی تیمها عمداً بخشی از Backlog را خارج از Sprint نگه میدارند.
۱۸. پیدا کردن Issueهای Sprintهای بستهشده
اگر بخواهید کارهای مربوط به Sprintهای قبلی را بررسی کنید:
project = IT
AND sprint IN closedSprints()
این Query برای تحلیل Sprintهای قبلی و بررسی وضعیت کارهای گذشته کاربرد دارد.
۱۹. پیدا کردن کارهای یک Sprint مشخص
اگر نام Sprint را میدانید:
sprint = "Sprint 24"
این Query زمانی کاربرد دارد که بخواهید گزارش اختصاصی برای یک Sprint مشخص بسازید.
۲۰. پیدا کردن Bugهای باز
در بسیاری از سازمانها، تیم QA و توسعه دائماً به چنین گزارشی نیاز دارند:
issuetype = Bug
AND resolution IS EMPTY
ORDER BY priority DESC
در نتیجه، مهمترین Bugهای حلنشده در ابتدای لیست قرار میگیرند.
۲۱. پیدا کردن Bugهای بحرانی
برای پیدا کردن Bugهای با Priority بالا:
issuetype = Bug
AND priority IN (Highest, High)
AND resolution IS EMPTY
ORDER BY created ASC
در اینجا قدیمیترین Bugهای مهم را ابتدا میبینید.
این روش برای تیمهایی که Backlog بزرگی دارند بسیار مفید است.
۲۲. پیدا کردن Issueهای مربوط به یک Release
اگر سازمان شما از Version برای مدیریت Release استفاده میکند:
fixVersion = "2.5.0"
میتوانید Issueهای مربوط به یک Release مشخص را پیدا کنید.
برای مثال، تیم توسعه میتواند قبل از انتشار نسخه جدید، تمام کارهای مربوط به آن Version را بررسی کند.
۲۳. پیدا کردن Issueهای یک Release که هنوز بسته نشدهاند
برای بررسی آمادگی Release:
fixVersion = "2.5.0"
AND resolution IS EMPTY
ORDER BY priority DESC
اگر این Query نتیجه داشته باشد، تیم هنوز کارهای حلنشدهای برای Release دارد.
بنابراین، این Filter میتواند یکی از ابزارهای کنترل Release در سازمان باشد.
۲۴. پیدا کردن Issueهای بدون Label
اگر تیم شما برای دستهبندی Issueها از Label استفاده میکند، این Query موارد بدون Label را پیدا میکند:
project = IT
AND labels IS EMPTY
در نتیجه، Jira Admin میتواند کیفیت دادههای پروژه را بهتر کنترل کند.
۲۵. پیدا کردن Issueهایی که یک Label مشخص دارند
برای مثال:
labels = "customer-impact"
اگر سازمان شما Labelهای استانداردی تعریف کرده باشد، این Query میتواند گزارشهای بسیار کاربردی تولید کند.
۲۶. پیدا کردن Issueهایی که در Description یا Comment یک عبارت دارند
فرض کنید میخواهید Issueهایی را پیدا کنید که عبارت VPN در متن آنها وجود دارد:
text ~ "VPN"
فیلد text میتواند در Summary، Description، Environment، Comment و برخی فیلدهای متنی جستوجو کند.
بااینحال، در Instanceهای بزرگ بهتر است تا حد امکان جستوجو را روی فیلد مشخص محدود کنید تا Query کارآمدتری داشته باشید.
۲۷. پیدا کردن Issueهایی که Attachment ندارند
برای بررسی کیفیت مستندات یک فرآیند:
project = IT
AND attachments IS EMPTY
برای مثال، اگر سازمان شما برای برخی درخواستها Attachment اجباری میخواهد، این Query میتواند موارد ناقص را پیدا کند.
۲۸. پیدا کردن Issueهایی که Resolution ندارند
اگر میخواهید تمام Issueهای بدون Resolution را پیدا کنید:
resolution IS EMPTY
این Query ساده است، اما کاربرد زیادی دارد.
مثلاً میتوانید آن را با Project، Priority یا Status ترکیب کنید:
project = IT
AND priority = Highest
AND resolution IS EMPTY
۲۹. پیدا کردن Issueهای تکمیلشده در یک بازه زمانی
برای مثال، اگر میخواهید Issueهایی را ببینید که از ابتدای ماه جاری Resolve شدهاند:
resolved >= startOfMonth()
ORDER BY resolved DESC
این Query برای تهیه گزارش عملکرد ماهانه تیم بسیار کاربردی است.
در نتیجه، میتوانید تعداد و نوع کارهای تکمیلشده را راحتتر بررسی کنید.
۳۰. پیدا کردن Issueهای دارای لینک
در پروژههای سازمانی، ارتباط بین Issueها اهمیت زیادی دارد. برای مثال، ممکن است یک Task به یک Bug یا یک درخواست دیگر وابسته باشد.
برای پیدا کردن Issueهایی که Link دارند:
issueLinkType IS NOT EMPTY
اگر نسخه و تنظیمات Jira شما این فیلد را در Advanced Search ارائه نکند، میتوانید از فیلد Issue Link Type و مقادیر تعریفشده در Instance خودتان استفاده کنید. Jira Data Center فیلدهای مرتبط با Issue Link را در مرجع JQL ارائه میکند.
چند ترکیب JQL که برای Jira Adminها بسیار مهم هستند
حالا که ۳۰ Query اصلی را دیدیم، بهتر است چند نکته مهم را هم بررسی کنیم. چون در عمل، قدرت JQL زمانی مشخص میشود که چند شرط را با هم ترکیب کنید.
پیدا کردن کارهای مهم و عقبافتاده
project = IT
AND priority IN (Highest, High)
AND duedate < now()
AND resolution IS EMPTY
ORDER BY duedate ASC
این Query به مدیر پروژه نشان میدهد کدام کارهای مهم از موعد خود عبور کردهاند.
پیدا کردن کارهای بدون مسئول و عقبافتاده
project = IT
AND assignee IS EMPTY
AND duedate < now()
AND resolution IS EMPTY
این مورد برای سازمانهایی که فرآیند تخصیص Task اهمیت زیادی دارد بسیار مفید است.
پیدا کردن کارهای مهم Sprint فعال
project = IT
AND sprint IN openSprints()
AND priority IN (Highest, High)
AND resolution IS EMPTY
ORDER BY priority DESC
بنابراین، مدیر تیم میتواند ابتدا روی مهمترین کارهای Sprint تمرکز کند.
چند نکته مهم برای استفاده حرفهای از JQL در Jira Data Center
۱. Query را بیش از حد پیچیده نکنید
اگر یک Query را با دهها شرط ترکیب کنید، نگهداری آن دشوار میشود. بنابراین، ابتدا نیاز اصلی را مشخص کنید و بعد فقط شروط ضروری را اضافه کنید.
۲. از Filterهای ذخیرهشده استفاده کنید
اگر یک Query را مرتب اجرا میکنید، آن را Save کنید. سپس میتوانید همان Filter را در Dashboard، Board یا گزارشهای Jira استفاده کنید.
۳. به Performance توجه کنید
در Jiraهای سازمانی، تعداد Issueها میتواند بسیار زیاد باشد. بنابراین، بهتر است Query را تا جای ممکن محدود کنید.
برای مثال، بهجای:
text ~ "VPN"
اگر فقط پروژه IT برایتان مهم است، بنویسید:
project = IT
AND text ~ "VPN"
در نتیجه، Jira مجموعه کوچکتری از دادهها را بررسی میکند.
۴. نام فیلدهای سفارشی را بررسی کنید
هر سازمان ممکن است Custom Fieldهای متفاوتی داشته باشد. بنابراین، یک Query که روی Jira شما کار میکند، لزوماً با همان نام فیلد در Instance دیگری کار نمیکند.
Jira برای هر Field نام JQL مشخصی دارد و Custom Fieldها نیز میتوانند نام مخصوص خودشان را داشته باشند.
JQL فقط برای جستوجو نیست
یکی از اشتباهات رایج این است که JQL را فقط یک ابزار برای پیدا کردن Issue بدانیم.
در واقع، Jira Admin میتواند از JQL به عنوان بخشی از زیرساخت مدیریت Jira استفاده کند.
برای مثال، میتوانید از Queryهای ذخیرهشده برای:
- Dashboardهای مدیریتی
- گزارش وضعیت پروژه
- کنترل Backlog
- بررسی Issueهای بدون مسئول
- مدیریت Sprint
- گزارش Release
- کنترل Bugها
- گزارش تیم پشتیبانی
- ساخت Boardهای اختصاصی
- پایش کیفیت دادههای Jira
استفاده کنید.
به همین دلیل، یادگیری JQL فقط یک مهارت فنی نیست؛ بلکه به Jira Admin کمک میکند اطلاعات Jira را به داده قابل استفاده برای تصمیمگیری تبدیل کند.
جمعبندی
JQL یکی از مهمترین ابزارهای Jira برای مدیریت حرفهای Issueها و استخراج اطلاعات از پروژههاست. بااینحال، ارزش واقعی آن زمانی مشخص میشود که Queryها را با نیازهای واقعی سازمان ترکیب کنید.
برای یک Jira Admin، Queryهایی مانند پیدا کردن Issueهای بدون مسئول، کارهای عقبافتاده، Sprintهای فعال، Bugهای مهم، Releaseهای ناقص و Issueهای قدیمی، فقط جستوجوی ساده نیستند؛ بلکه بخشی از فرآیند نظارت، کنترل و مدیریت Jira محسوب میشوند.
بنابراین، اگر تازه کار با JQL را شروع کردهاید، پیشنهاد میکنم ابتدا همین ۳۰ Query را در Jira Data Center خودتان امتحان کنید. سپس با ترکیب AND، OR، IN، ORDER BY و توابع زمانی، Queryهای اختصاصی سازمان خودتان را بسازید.
مستندات رسمی Jira Data Center نیز مرجع مناسبی برای بررسی دقیق Fieldها، Operatorها، Keywordها و Functionهای قابل استفاده در JQL است.
برای اطلاعات بیشتر و دریافت مشاوره سازمانی با ما در ارتباط باشید





