Jetstack
Zpět na blog Blog

Pokročilé filtrování – vnořené podmínky, větve OR a poddotazy

Publikováno 1. prosince 2024

Technická ilustrace k článku Jetstacku

Skutečné otázky nad firemními daty málokdy vypadají jako „zákazníci, jejichž stav je aktivní“. Spíš vypadají takhle: „zákazníci, jejichž stav je aktivní nebo čeká na zpracování a zároveň jejichž poslední objednávka je z doby před minulým čtvrtletím, kromě těch, kdo jsou na seznamu nekontaktovat“. Filtr, který zvládne jen ty jednoduché případy, staví uživatele před volbu: buď se spokojit s přibližnou odpovědí, nebo přejít do samostatného reportovacího nástroje a zeptat se tam pořádně. Pokročilé filtrování je právě ten rozdíl mezi oběma světy – a je to bod, kdy tvůrce dotazů začíná působit jako opravdový analytický nástroj.

Prvním posunem oproti základním filtrům jsou vnořené podmínky. Skupiny AND a OR se dají kombinovat a vnořovat do libovolné hloubky. Dotaz na prioritní zákazníky může znamenat třeba „(úroveň zákazníka = Gold NEBO úroveň zákazníka = Platinum) A ZÁROVEŇ (roční obrat > hranice NEBO příznak strategický = ano)“. Taková podmínka má dvě úrovně a dva různé logické operátory a tvůrce dotazů ji umí vyjádřit přímo, ne jen přibližně. Každá skupina je v rozhraní vidět jako vnořený blok, takže struktura otázky odpovídá struktuře dotazu.

OR nad stejným polem řeší jednu z drobných otravností, kvůli kterým naivní filtrovací rozhraní působí neohrabaně. „Stav je Otevřeno, Čeká nebo K posouzení“ je jeden filtr, ne tři – tvůrce dotazů to vyjádří jako jedinou podmínku „je v seznamu“ nad danou vlastností. Podobně vám více filtrů nad stejnou vlastností umožní napsat „částka > 100 A ZÁROVEŇ částka < 1000“, aniž byste s rozhraním bojovali. U číselných a výběrových vlastností pak operátory v seznamu a není v seznamu čistě obslouží hromadné případy „kterákoli z těchto“ a „žádná z těchto“.

Filtry přes odkazované sloupce přecházejí z jednoho typu do vlastností souvisejícího typu. Filtrovat faktury podle údaje u navázaného zákazníka – faktury, kde customer.country = Německo – je v tvůrci dotazů běžná operace, ne něco, co byste museli obcházet poddotazem. Protože vazby jsou v datovém modelu plnohodnotné, tvůrce dotazů je za vás projde. V rozumné míře je povoleno i několik přeskoků: faktury, kde customer.salesRep.region = EMEA je čitelná podmínka, ne žádný kaskadérský kousek. U jakkoli složitějších dat je právě tohle místo, kde se tvůrce dotazů vyplácí.

Poddotazy řeší případy, kdy chcete filtrovat podle „výsledku jiné otázky“. Poddotaz je odkaz na jiný uložený dotaz – nebo na dotaz zapsaný přímo na místě – a filtr pak může říct „záznamy, jejichž navázaný objekt je ve výsledcích tohoto jiného dotazu“. Tím se jinak komplikované zadání zjednoduší. Zákazníci, jejichž poslední objednávka spadá do dotazu „letos vysokomaržní“ je v tvůrci dotazů pár kliknutí a nula řádků kódu. Poddotazy zároveň umožňují promyšlené znovupoužití: dotaz „letos vysokomaržní“ se udržuje na jednom místě a slouží jako filtrační stavební prvek ve víc dalších dotazech, takže když ho upřesníte, změna se propíše všude.

Filtry na data mají vlastní sadu vylepšení, protože právě u dat pokročilé filtrování v jiných nástrojích nejčastěji naráží na strop. Naše datové filtry rozumějí relativním výrazům – „za posledních 30 dní“, „v příštím čtvrtletí“, „před koncem účetního roku“ – a rostoucí nabídka přednastavení pro data v minulosti pokrývá běžné případy: předchozí měsíc, předchozí rok, posledních sedm dní, minulé čtvrtletí. Datum ve filtru navíc může využít jazyk vložených výrazů pro všechno, na co přednastavení nestačí – konec aktuálního čtvrtletí minus dva týdny je platná hodnota filtru.

Parametry filtru mohou odkazovat na přihlášeného uživatele nebo na jakoukoli jinou proměnnou z prostředí výrazů. Jediný dotaz s názvem Moje otevřené úkoly funguje správně pro každého, kdo si ho otevře, protože podmínka zní řešitel = aktuální uživatel, a ne konkrétní jméno napevno. Stejným způsobem se řeší aktuální datum, aktuální prostředí, aktuální region i jakýkoli další kontext, který engine výrazů zná. Jedna definice dotazu, výsledky přizpůsobené každému uživateli – a žádné varianty, které byste museli udržovat zvlášť pro každého.

Trvalý stav filtru je drobnost, která se v každodenní práci počítá. Nastavíte filtr, přejdete na záznam, vrátíte se zpět – a filtr je pořád tam, kde jste ho nechali. Stav filtru je součástí adresy (URL) pohledu, takže sdílet s kolegou konkrétní vyfiltrovaný pohled znamená jediné zkopírování a vložení.

Pokročilé filtrování stojí i za REST API. Stejný zápis vnořených podmínek, jaký vytváří tvůrce dotazů, se dá poslat i ve voláních API, takže partnerská integrace nebo vlastní frontend dokážou vyjádřit stejně bohaté dotazy jako uživatelské rozhraní, aniž by se musely spokojit s ochuzenou podmnožinou. To ocení týmy, které chtějí nad platformou stavět vlastní nástroje – slovník dotazů zkušených uživatelů je zároveň slovníkem integrátorů.

Tvůrce dotazů, pokročilé filtrování a uložené dotazy dohromady pokryjí naprostou většinu analytických otázek, s nimiž by uživatelé jinak mířili do samostatného reportovacího nástroje. Poddotazy, vnořené podmínky a filtry přes vazby spolu stačí na skoro všechno, co nevyžaduje plnohodnotný OLAP aparát. A tam, kde ho potřeba je, předá REST API a export do tabulky data čistě nástrojům, které se na to specializují. Většinou je ale tvůrce dotazů to správné místo už sám o sobě.