JIRA seriál: #7 Používání filtru uvnitř jiného filtru pro systematické strukturování dotazů

Velmi mocnou zbraní v arsenálu JQL o níž řada lidí neví, je klíčové slovo filter. Umožňuje do jednoho filtru zahrnout obsah jiného uloženého filtru. Klíčové slovo filter používám na téměř každém projektu.

Než se dostaneme k praktickým ukázkám, připomenu, co jsem zmiňoval v druhém článku této série. Při vytváření filtrů, které budete používat v jiných filtrech, je více než kdekoli jinde vhodné dodržovat definovaná pravidla pro jména filtrů. Mě se osvědčilo prefixovat název uloženého filtru, který bude využit v jiných filtrech, malými písmeny „flt“ a pokračovat v „camel-case“ notaci s dalšími slovy (první velké písmeno ve slově). Například filtr pro komponenty, za něž je zodpovědný dodavatel Alistar, bych pojmenoval fltComponentsAlistar. Takový filtr by mohl mít JQL: 

Components in (Comp1, Comp2, Comp33) 

Uložený filtr pak můžu použít pro definici filtru, který v dashboardu zobrazí defekty v komponentách, za něž je zodpovědný dodavatel Alistar: 

project=MujProjekt AND issueType=Bug AND filter=fltComponentsAlistar AND status not in (Closed) 

Šikovné, že? Možnosti použití jsou široké. Za chviličku ukážu pár dalších tipů.  Než se k nim dostanu, musím zmínit veledůležitou věc týkající se práv.  

Uživatel, kterému zpřístupníte filtr využívající vnořený uložený filtr, musí mít právo vidět data z vnořeného filtru (tj. musí mít právo VIEW). Na to se v praxi občas zapomene a uživatelé, jimž zpřístupníte uložený filtr, vidí chybná data. Pokud je filtr obsažený v gatgetu Two Dimensional Filtr Statistics, uživateli se nezobrazí chybová hláška (což je v tomto případě dvojsečná zbraň) a výsledná datová sada neobsahuje data odpovídající vnořenému filtru. Pokud si uživatel zobrazí obsah daného filtru v tabelárním zobrazení (třeba kliknutím na číselnou hodnotu ve zmíněném gatgetu, uvidí chybovou hlášku „The value of ‚JMENO-VNORENEHO-FILTRU‘ does not exist for the field ‚filter‘“. 

Vyloučení dat, která jsou obsažena ve filtru 

Někdy se vám hodí vyloučit z  výsledků nějakou podmnožinu dat. Například, abych využil předchozí příklad, chcete zobrazit všechny defekty, které se netýkají komponent dodavatele Alistar. JQL pak vypadá elegantně: 

project=MujProjekt AND filter!= fltComponentsAlistar 

Zobrazování dat z  více JIRA projektů 

Na velkých projektech či programech někdy nemáte všechna data v  jednom JIRA projektu. V  dílčích projektech vás nemusí zajímat všechna data, potřebujete mít „na radaru“ pouze data splňující nějaká kritéria, která jsou specifická pro daný JIRA projekt (např. chcete vidět třeba jen defekty na „svoji“ komponentu). V  takovém případě si pro každý dílčí projekt vytvořím základní „radar“ v  podobě uloženého filtru.  

Pro projekt ProjectA pojmenuji filtr fltProjectANotClosed a použiji JQL: 

Project=ProjectA AND issueType=Bug AND Component=MojeKomponenta AND Status NOT IN (Closed) 

V  jiném projektu s  názvem ProjectB jsou „mé“ defekty identifikované labelem. Jasně, není to ideální, ale takový je život – berte to tak, že to „bylo maximum, na čem se s  nimi bylo možné dohodnout“ 😊. JQL, které si uložím pod názvem fltProjectBNotClosed, vypadá takto (všimněte si, že v  tomto projektu nepoužívají status Closed, ale Done): 

Project=ProjectB AND issueType=Bug AND labels in (MojeKomponenta) AND Status NOT IN (Done) 

Teď si připravím uložený filtr pro základní „radar“ neuzavřených defektů, které mě zajímají napříč projekty – pojmenuji ho fltMyProjectNotClosed.  

Filter IN (fltProjectANotClosed, fltProjectBNotClosed) 

Tím mám připravený základ, který použiji ve všech dalších projektových JQL. To by mohlo vypadat třeba takto: 

filter= fltMyProjectNotClosed AND Assignee = CurrentUser() 

Dochází vám už ten půvab? Když budete potřebovat přidat na radar další projekt, nemusíte zasahovat do 40 filtrů (na velkých projektech mám filtrů i víc). Jednoduše nadefinujete „radar“ pro daný projekt (řekněme ProjectC) a přidáte ho do „celkového radaru“. Ten pak bude mít podobu: 

filter IN (fltProjectANotClosed, fltProjectBNotClosed, fltProjectCNotClosed) 

Všechny ostatní filtry, které používaly filtr fltMyProjectNotClosed, není třeba modifikovat a začnou zobrazovat i data z nového projektu. 

Místo jména filtru je možné použít i jeho číselné ID (uvidíte ho v URL po uložení filtru). Použití ID místo názvu má výhodu v tom, že „využívající“ filtr bude funkční i při změně jména, pod nímž je „využívaný“ filtr uložen. Nevýhodou je menší srozumitelnost „využívajícího“ filtru. Posuďte sami, co je srozumitelnější: 

filter in (fltComponentsAlistar, fltComponentsPicollo, fltComponentsAmosano) 

filter in (62518, 62519, 62522) 

Pokud se rozhodnete pro referencování názvem filtru (já to tak dělám), je třeba dát pozor při změně jeho jména. Pokud jméno, pod kterým je filtr uložen změníte a nezměníte ho v dotazu ve „využívajícím“ filtru, při použití „využívajícího“ filtru v dashboardu se nezobrazí chyba. Jen v počtech nebudou data filtru se změněným jménem (mockrát jsem bádal, proč mi gatget vrací chybná čísla… 😊). Chyba se vám zobrazí až při tabelárním zobrazení obsahu, který vrací JQL „využívajícího“ filtru.

Co se dozvíte v dalším díle?

Jak automatizovat opakované manuální činnosti! Sledujte nás na sítích, ať vám to neunikne...

Autor: Miroslav Renda

Mirek se pohybuje v různých projektových rolích v IT byznysu více než 25 let. Posledních 8 let si v roli test managera užíval zajímavé projekty ve velkých českých bankách a v oblasti automotive. Je spolupachatelem knihy Efektivní testování softwaru vydané nakladatelstvím GRADA. Miluje své dvě děti, přírodu a sport v jakékoli podobě.