Dokumentace klauzule Where
Výkonný systém filtrování s lidsky čitelnou syntaxí pro komplexní dotazy
Přehled
Náš systém filtrování poskytuje výkonný, lidsky čitelný dotazovací jazyk pro filtrování entit a jejich relací. Funguje bezproblémově napříč celou platformou - v uživatelském rozhraní aplikace, v systému dotazů, v REST API a správně zpracovává sady změn (changesets) pro časově závislé dotazy.
Univerzální použití
Stejná syntaxe filtru funguje ve filtrech uživatelského rozhraní, v systému dotazů a v koncových bodech REST API
Návrh s pomocí AI
Použijte AI Chat pro pomoc s návrhem složitých filtrů nebo poklepejte na text filtru pro úpravu syntaxe
Kompatibilní se sadami změn (changesets)
Pracuje s historickými daty a dotazy k určitému časovému bodu díky integraci sad změn (changesets)
Příklady filtrů
Jednoduchá rovnost
Filtrování podle přesné hodnoty pole
name = "John"
[badge:Basic|secondary|right]
Převod dvojitého rovnítka
Dvojité rovnítko se automaticky převede na jednoduché
name == "John"
[badge:Basic|secondary|right]
Nerovnost s aliasy
Více způsobů, jak vyjádřit nerovnost
name != "John" or status <> "inactive" or type ne "old"
[badge:Basic|secondary|right]
Číselná porovnání
Větší než s desetinnými čísly
age > 30.5 and price gte 100
[badge:Numeric|secondary|right]
Booleovské kontroly
Porovnání booleovských polí
visible is true and published is not false
[badge:Boolean|secondary|right]
Záporná čísla
Podpora záporných číselných hodnot
balance = -1 and adjustment < -50
[badge:Numeric|secondary|right]
Kontroly na null a prázdnou hodnotu
Různé validace na null a prázdnou hodnotu
deleted_at is null and name is not empty
[badge:Null|secondary|right]
Rozdíl mezi prázdnou hodnotou a null
Pochopení rozdílu mezi prázdnou hodnotou (null nebo “”) a null
description is empty or notes is not null
[badge:Null|secondary|right]
Shoda se vzorem
Různé operace se textovými vzory
name like "test" and email ends "@gmail.com"
[badge:Pattern|secondary|right]
Vzory nerozlišující velikost písmen
Shoda textu nerozlišující velikost písmen
name ilike "john" or title begins similar "TEST"
[badge:Pattern|secondary|right]
Negovaná shoda se vzorem
Negativní operace se vzory
name not like "temp" and email not ends ".test"
[badge:Pattern|secondary|right]
Členství v množině
Kontrola, zda je hodnota v seznamu
status in ("active", "pending", "approved")
[badge:Set|secondary|right]
Množinové operace s čísly
Množinové operace s čísly
id in (1, 2, 3) and priority not in (0, 10)
[badge:Set|secondary|right]
Dotazy na rozsah
Operace ‘between’ a rozsahové operace
age between 18 and 65
[badge:Range|secondary|right]
Negovaný rozsah
Operace ’not between’
price not between 100 and 500
[badge:Range|secondary|right]
Složité logické podmínky
Závorky a složitá logika
(name = "John" or name = "Jane") and age > 30
[badge:Complex|secondary|right]
Negace se závorkami
Operátor NOT se seskupováním
not (status = "inactive" or deleted is true)
[badge:Complex|secondary|right]
Jednoduché filtrování relací (MANY)
Filtrování podle polí související entity - používá EXISTS
products.name = "Electronics"
[badge:Relations|secondary|right]
Relace s parametry
Použití parametrů v relačních dotazech
products.price > $minPrice
[badge:Relations|secondary|right]
Relace se závorkami
Alternativní syntaxe se závorkami pro relace
products[name = "Electronics" and price > 100]
[badge:Relations|secondary|right]
Více podmínek v relaci
Více podmínek na stejné relaci
products.category_id = 1 and products.name like "test"
[badge:Relations|secondary|right]
Vnořené relace
Hluboký průchod relacemi
products.category.name = "Electronics"
[badge:Relations|secondary|right]
Složité vnořené relace se závorkami
Kombinace závorek s vnořenými relacemi
products[name like "test"].category.name = "Electronics"
[badge:Relations|secondary|right]
Dvojité závorky v relacích
Více podmínek v závorkách v řetězci
products[name like "test"].category[name = "Electronics"]
[badge:Relations|secondary|right]
Funkce pro datum
Vestavěné funkce pro datum a čas
dueDate > now() and createdAt > currentYear()
[badge:Functions|secondary|right]
Funkce kontextu uživatele
Funkce pro odkaz na aktuálního uživatele
user_id = me() and assigned_to != me()
[badge:Functions|secondary|right]
Řetězcové funkce
Funkce pro transformaci textu a zjištění délky
lower(name) = "john" and length(description) > 10
[badge:Functions|secondary|right]
Funkce pro extrakci data/času
Extrakce částí z polí data/času
year(created_at) = 2023 and month(birth_date) = 12
[badge:Functions|secondary|right]
Funkce pro kvartál
Extrakce kvartálu z datových polí
quarter(order_date) = 4 and yearquarter(fiscal_date) = "2023-Q4"
[badge:Functions|secondary|right]
Pokročilé funkce pro datum
Čísla týdnů a formátované datové řetězce
dayofweek(event_date) = 1 and yearmonth(created_at) = "2023-12" and yearmonthday(created_at) = "2023-12-25"
[badge:Functions|secondary|right]
Funkce pro kontrolu null
Kontrola null hodnot pomocí funkce isnull
isnull(optional_field) = true and isnull(name) = false
[badge:Functions|secondary|right]
Funkce pro datové rozsahy (Rok/Měsíc)
Získání počátečních a koncových hranic pro časová období
created_at >= startOfYear(now()) and created_at <= endOfMonth(now())
[badge:Functions|secondary|right]
Funkce pro datové rozsahy (Den/Hodina)
Přesné časové hranice pro detailní analýzu
event_time >= startOfDay("2025-01-01") and event_time <= endOfHour(now())
[badge:Functions|secondary|right]
Složité filtrování datových rozsahů
Kombinace více funkcí pro datové rozsahy
startOfYear(created_at) = startOfYear(now()) and endOfMonth(updated_at) >= startOfMonth(now())
[badge:Functions|secondary|right]
Extrakce času - Hodina/Minuta/Sekunda
Extrakce hodiny, minuty nebo sekundy z polí typu datetime
hour(timestamp) = 14 and minute(timestamp) = 30 and second(timestamp) = 45
[badge:Time Functions|secondary|right]
Filtrování podle pracovní doby
Filtrování záznamů v rámci pracovní doby
hour(created_at) between 9 and 17
[badge:Time Functions|secondary|right]
Seskupování podle času
Kombinace extrakce času s dalšími podmínkami
hour(orderDate) = 14 and dayofweek(orderDate) = 1
[badge:Time Functions|secondary|right]
Matematické funkce - Round/Floor/Ceiling
Aplikace matematických operací zaokrouhlování
round(price) = 100 and floor(rating) = 4 and ceiling(score) = 10
[badge:Math Functions|secondary|right]
Zaokrouhlování ceny
Zaokrouhlení cen pro porovnání
round(price) between 90 and 110
[badge:Math Functions|secondary|right]
Kombinované matematické operace
Vnoření matematických funkcí s dalšími operacemi
round(price * 1.21) = 121
[badge:Math Functions|secondary|right]
Spojování řetězců
Spojení více řetězců pomocí funkce concat
concat(firstName, lastName) = "JohnDoe"
[badge:String Functions|secondary|right]
Extrakce podřetězce
Extrakce části řetězce (indexování od 0)
substring(code, 0, 3) = "PRD"
[badge:String Functions|secondary|right]
Hledání pozice v řetězci
Nalezení pozice podřetězce (vrací -1, pokud není nalezen)
indexof(email, "@") > 0
[badge:String Functions|secondary|right]
Oříznutí mezer
Odstranění úvodních/koncových mezer z řetězců
trim(name) = "Product"
[badge:String Functions|secondary|right]
Kombinované operace s řetězci
Vnoření více řetězcových funkcí dohromady
concat(trim(firstName), " ", trim(lastName)) = "John Doe"
[badge:String Functions|secondary|right]
Pokročilá manipulace s řetězci
Extrakce podřetězce pomocí dynamické pozice
substring(email, indexof(email, "@"), 5) = "@acme"
[badge:String Functions|secondary|right]
Základní aritmetika - Sčítání
Přičtení hodnot k polím
price + 10 = 110
[badge:Arithmetic|secondary|right]
Základní aritmetika - Odčítání
Odečtení hodnot od polí
quantity - 5 > 10
[badge:Arithmetic|secondary|right]
Základní aritmetika - Násobení
Násobení hodnot polí
price * 2 = 200
[badge:Arithmetic|secondary|right]
Základní aritmetika - Dělení
Dělení hodnot polí
total / count = 25
[badge:Arithmetic|secondary|right]
Základní aritmetika - Modulo
Kontrola zbytku po dělení (užitečné pro kontrolu sudých/lichých čísel)
id % 2 = 0
[badge:Arithmetic|secondary|right]
Výpočet ceny s DPH
Výpočet DPH z cen
price * 1.21 = priceWithVat
[badge:Arithmetic|secondary|right]
Výpočet slevy
Aplikace procentuální slevy
price - (price * 0.1) < 100
[badge:Arithmetic|secondary|right]
Priorita operátorů
Násobení před sčítáním (standardní matematická pravidla)
price + 10 * 2 = 50
[badge:Arithmetic|secondary|right]
Složitý aritmetický výraz
Více operátorů v jednom výrazu
(price + shipping) * 1.21 > 100
[badge:Arithmetic|secondary|right]
Výpočet procent
Výpočet procenta dokončení
completed / total * 100 > 80
[badge:Arithmetic|secondary|right]
Aritmetika s matematickými funkcemi
Kombinace aritmetických operátorů s matematickými funkcemi
round(price) * 2 = 200 and floor(quantity / 10) = 5
[badge:Combined|secondary|right]
Aritmetika založená na čase
Použití aritmetiky s funkcemi pro extrakci času
hour(timestamp) * 2 = 20 or minute(timestamp) + 30 = 60
[badge:Combined|secondary|right]
Kombinace řetězců a matematiky
Smíchání manipulace s řetězci s matematickými operacemi
length(trim(name)) > 5 and round(price) < 100
[badge:Combined|secondary|right]
Složité vnořené funkce
Hluboce vnořená volání funkcí
round(hour(timestamp)) = 14 and substring(code, indexof(code, "-"), 4) = "-PRD"
[badge:Combined|secondary|right]
Aliasy polí
Použití aliasů polí v podmínkách
published_at >= "2021-01-01" and publishedAt <= "2021-12-31"
[badge:Aliases|secondary|right]
Přeložitelná pole - Výchozí jazyk
Dotazování na přeložitelná pole ve výchozím/zvoleném jazyce uživatele
name = "Hello" and description like "Product"
[badge:Translatable|secondary|right]
Přeložitelná pole - Specifický jazyk
Dotazování na specifické jazykové varianty pomocí přípony s kódem jazyka
name:cs = "Ahoj" and name:en = "Hello" and description:de like "Produkt"
[badge:Translatable|secondary|right]
Zpracování uvozovek
Různé typy uvozovek a escapování
name = "John" and description = 'Single quotes' and title = "Escaped \"quotes\""
[badge:Quotes|secondary|right]
Základní agregace - Count
Počet souvisejících záznamů
count(products) > 10
[badge:Aggregation|secondary|right]
Filtrovaná agregace - Count
Počet souvisejících záznamů odpovídajících podmínce
count(products[visible = true]) > 5
[badge:Aggregation|secondary|right]
Agregace Sum
Součet číselného pole napříč souvisejícími záznamy
sum(products.price) > 1000
[badge:Aggregation|secondary|right]
Agregace Avg
Výpočet průměru číselného pole
avg(products.rating) > 4.5
[badge:Aggregation|secondary|right]
Agregace Min/Max
Nalezení minimálních nebo maximálních hodnot
min(products.price) > 10 and max(products.stock) < 100
[badge:Aggregation|secondary|right]
Agregace vnořených relací
Agregace s filtry vnořených relací
count(products[category.name = "Electronics"]) > 5
[badge:Aggregation|secondary|right]
Složité agregační filtry
Více podmínek ve filtrovaných agregacích
sum(products[active = true and price > 50].price) > 1000
[badge:Aggregation|secondary|right]
Kombinované agregace
Více agregačních funkcí v jednom filtru
count(products[visible = true]) > 10 and avg(products.rating) > 4.0
[badge:Aggregation|secondary|right]
Filtrování podstromu - Přímé (výchozí rekurzivní)
Filtrování produktů v podstromu kategorie podle kódu (zahrnuje všechny potomky)
in subtree "code:ELECTRONICS"
[badge:Hierarchical|secondary|right]
Filtrování podstromu - Explicitně rekurzivní
Filtrování pomocí explicitního klíčového slova recursive
in subtree "code:ELECTRONICS" recursive
[badge:Hierarchical|secondary|right]
Filtrování podstromu - Nerekurzivní
Filtrování pomocí klíčového slova nonrecursive (pouze přímí potomci)
in subtree 7 nonrecursive
[badge:Hierarchical|secondary|right]
Filtrování podstromu - S ID
Filtrování pomocí přímého hierarchického ID
in subtree "42"
[badge:Hierarchical|secondary|right]
Filtrování podstromu - V relaci
Filtrování uživatelů podle produktů v podstromu kategorie
products[in subtree "code:FASHION"]
[badge:Hierarchical|secondary|right]
Filtrování podstromu - V relaci (nerekurzivní)
Filtrování uživatelů podle produktů v kategorii (pouze přímí potomci)
products[in subtree "code:FASHION" nonrecursive]
[badge:Hierarchical|secondary|right]
Podstrom s agregací - Count
Počet produktů v hierarchické kategorii
count(products[in subtree "code:ELECTRONICS"]) > 5
[badge:Hierarchical|secondary|right]
Podstrom s agregací - Count (nerekurzivní)
Počet produktů v kategorii (pouze přímí potomci)
count(products[in subtree "code:ELECTRONICS" nonrecursive]) > 5
[badge:Hierarchical|secondary|right]
Podstrom s agregací - Sum
Součet cen produktů ve stromu luxusní kategorie
sum(products[in subtree "code:LUXURY"].price) > 10000
[badge:Hierarchical|secondary|right]
Podstrom s více podmínkami
Kombinace filtru podstromu s dalšími filtry
in subtree "code:ELECTRONICS" and price > 100
[badge:Hierarchical|secondary|right]
Podstrom ve složitém dotazu
Počet vysoce hodnocených produktů v podstromu kategorie
count(products[in subtree "code:BOOKS" and rating > 4]) > 3
[badge:Hierarchical|secondary|right]
Použití filtrů v aplikaci
Stejná syntaxe filtru popsaná zde funguje v celé platformě a poskytuje konzistentní zážitek napříč různými rozhraními.
Uživatelské rozhraní aplikace
- Poklepáním na jakýkoli text filtru upravíte surovou syntaxi
- Použijte AI Chat pro pomoc s návrhem složitých filtrů
- Vizuální tvůrce filtrů se převádí na tuto syntaxi
Integrace API
- Systém dotazů: Viz dokumentace dotazů
- REST API: Použijte jako parametr
filter - Sady změn (Changesets): Pracuje s historickými daty
Referenční příručka operátorů
Kompletní tabulka podporovaných operátorů s aliasy a příklady
| Operátor | Aliasy | Popis | Příklad | Kategorie |
|---|---|---|---|---|
| = | ==, eq, ~eq~ | Rovná se | name = “John” | Porovnání |
| != | <>, ne, ~ne~ | Nerovná se | name != “John” | Porovnání |
| > | gt, ~gt~ | Větší než | age > 30 | Porovnání |
| >= | gte, ~gte~ | Větší než nebo rovno | age >= 18 | Porovnání |
| < | lt, ~lt~ | Menší než | age < 65 | Porovnání |
| <= | lte, ~lte~ | Menší než nebo rovno | age <= 65 | Porovnání |
| is null | - | Pole je null | name is null | Null |
| is not null | - | Pole není null | name is not null | Null |
| is empty | - | Pole je null nebo prázdný řetězec | name is empty | Null |
| is not empty | - | Pole není null a není prázdné | name is not empty | Null |
| is true | - | Pole je true | visible is true | Booleovské |
| is false | - | Pole je false | visible is false | Booleovské |
| in | - | Hodnota je v množině | id in (1, 2, 3) | Množina |
| not in | - | Hodnota není v množině | name not in (“active”, “pending”) | Množina |
| between … and … | - | Hodnota je v rozsahu | age between 18 and 65 | Rozsah |
| not between … and … | - | Hodnota není v rozsahu | age not between 18 and 65 | Rozsah |
| like | - | Obsahuje podřetězec (nerozlišuje velikost písmen) | name like “test” | Vzor |
| not like | - | Neobsahuje podřetězec (nerozlišuje velikost písmen) | name not like “test” | Vzor |
| ilike | - | Shoda jako ’like’ (nerozlišuje velikost písmen) | name ilike “test” | Vzor |
| like similar | - | Shoda jako ’like’ (nerozlišuje velikost písmen) | name like similar “test” | Vzor |
| begins | - | Začíná na | name begins “John” | Vzor |
| ends | - | Končí na | name ends “Doe” | Vzor |
| not begins | - | Nezačíná na | name not begins “John” | Vzor |
| not ends | - | Nekončí na | name not ends “Doe” | Vzor |
| begins similar | - | Začíná na (nerozlišuje velikost písmen) | name begins similar “test” | Vzor |
| ends similar | - | Končí na (nerozlišuje velikost písmen) | name ends similar “test” | Vzor |
| in subtree | - | Shoda záznamů v hierarchickém podstromu | in subtree “code:ELECTRONICS” | Hierarchické |
| missing ‘XX’ translation | - | Kontrola, zda chybí překlad pro konkrétní jazyk | missing “en” translation | Překlad |
| missing any translation | - | Kontrola, zda chybí překlad pro jakýkoli nakonfigurovaný jazyk | missing any translation | Překlad |
Logické operátory
and
Obě podmínky musí být pravdivé
name = "John" and age > 18
[badge:Logic|outline|right]
or
Alespoň jedna podmínka musí být pravdivá
status = "active" or status = "pending"
[badge:Logic|outline|right]
not
Neguje podmínku
not (status = "inactive")
[badge:Logic|outline|right]
Aritmetické operátory
Provádění matematických operací s číselnými poli a hodnotami
Priorita operátorů
Aritmetické operátory se řídí standardními pravidly matematické priority:
- Vysoká priorita (1): Násobení (*), Dělení (/), Modulo (%)
- Nízká priorita (2): Sčítání (+), Odčítání (-)
- Operátory se stejnou prioritou se vyhodnocují zleva doprava
price + 10 * 2 = 50 /* Same as: price + (10 * 2) */
| Operátor | Popis | Priorita | Příklad |
|---|---|---|---|
| + | Sčítání | Nízká (2) | price + 10 = 110 |
| - | Odčítání | Nízká (2) | quantity - 5 > 10 |
| * | Násobení | Vysoká (1) | price * 2 = 200 |
| / | Dělení | Vysoká (1) | total / count = 25 |
| % | Modulo (zbytek) | Vysoká (1) | id % 2 = 0 |
Případy použití v praxi
Výpočty cen
price * 1.21 = priceWithVat
Výpočet DPH (21%)
Kontroly zásob
quantity % 2 = 0
Kontrola, zda je množství sudé
Slevy
price - (price * 0.1) < 100
10% sleva pod 100
Procenta
completed / total * 100 > 80
Více než 80 % dokončeno
Referenční příručka funkcí
Vestavěné funkce pro transformaci a extrakci dat
| Funkce | Popis | Příklad | Kategorie |
|---|---|---|---|
| hour(field) | Extrakce hodiny z datetime (0-23) | hour(timestamp) = 14 | Extrakce času |
| minute(field) | Extrakce minuty z datetime (0-59) | minute(timestamp) = 30 | Extrakce času |
| second(field) | Extrakce sekundy z datetime (0-59) | second(timestamp) = 45 | Extrakce času |
| round(value) | Zaokrouhlení na nejbližší celé číslo | round(price) = 100 | Matematické |
| floor(value) | Zaokrouhlení dolů na celé číslo | floor(rating) = 4 | Matematické |
| ceiling(value) | Zaokrouhlení nahoru na celé číslo | ceiling(price) = 100 | Matematické |
| concat(str1, str2) | Spojení dvou řetězců | concat(firstName, lastName) = “JohnDoe” | Řetězcové |
| indexof(str, search) | Nalezení pozice podřetězce (indexování od 0, vrací -1, pokud není nalezen) | indexof(email, “@”) > 0 | Řetězcové |
| substring(str, start, length) | Extrakce podřetězce (indexování od 0) | substring(code, 0, 3) = “PRD” | Řetězcové |
| trim(str) | Odstranění úvodních/koncových mezer | trim(name) = “Product” | Řetězcové |
| lower(field) | Převod na malá písmena | lower(name) = “john” | Řetězcové |
| upper(field) | Převod na velká písmena | upper(name) = “JOHN” | Řetězcové |
| length(field) | Zjištění délky řetězce | length(name) > 5 | Řetězcové |
| year(field) | Extrakce roku z data | year(created_at) = 2023 | Datum/Čas |
| month(field) | Extrakce měsíce z data (1-12) | month(created_at) = 12 | Datum/Čas |
| day(field) | Extrakce dne z data (1-31) | day(created_at) = 25 | Datum/Čas |
| quarter(field) | Extrakce kvartálu z data (1-4) | quarter(created_at) = 4 | Datum/Čas |
| week(field) | Extrakce čísla týdne z data | week(created_at) = 52 | Datum/Čas |
| dayofweek(field) | Extrakce dne v týdnu (0-6, 0=Neděle) | dayofweek(created_at) = 1 | Datum/Čas |
| now() | Aktuální časové razítko | created_at > now() | Speciální |
| me() | ID aktuálního uživatele | user_id = me() | Speciální |
| isnull(field) | Kontrola, zda je pole null | isnull(name) = true | Speciální |
| count(relation) | Počet souvisejících záznamů (pouze relace MANY) | count(products) > 10 | Agregace |
| count(relation[filter]) | Počet souvisejících záznamů odpovídajících filtru | count(products[visible = true]) > 5 | Agregace |
| sum(relation.field) | Součet číselného pole napříč souvisejícími záznamy | sum(products.price) > 1000 | Agregace |
| avg(relation.field) | Průměr číselného pole napříč souvisejícími záznamy | avg(products.rating) > 4.5 | Agregace |
| min(relation.field) | Minimální hodnota číselného pole napříč souvisejícími záznamy | min(products.price) > 10 | Agregace |
| max(relation.field) | Maximální hodnota číselného pole napříč souvisejícími záznamy | max(products.stock) < 100 | Agregace |
Vnořování a kombinace funkcí
Vnořené řetězcové funkce
concat(trim(firstName), " ", trim(lastName)) = "John Doe"
Spojení oříznutých jmen
Matematika s aritmetikou
round(price * 1.21) = 121
Zaokrouhlení výpočtu DPH
Dynamická extrakce řetězce
substring(email, indexof(email, "@"), 5) = "@acme"
Extrakce domény z e-mailu
Aritmetika založená na čase
hour(timestamp) * 2 = 20
Matematické operace s časem
Důležité poznámky
- indexof(): Vrací -1, pokud podřetězec není nalezen (indexování od 0)
- substring(): Používá indexování od 0, třetí parametr je délka (ne koncová pozice)
- Časové funkce: Extrahují celočíselné hodnoty (0-23 pro hodiny, 0-59 pro minuty/sekundy)
- Matematické funkce: Round, floor a ceiling všechny vrací celá čísla
- Všechny funkce nerozlišují velikost písmen (HOUR, hour, Hour všechny fungují)
Agregační funkce
Agregujte data napříč VÍCE relacemi pro výkonnou analytiku a filtrování
Přehled
Agregační funkce umožňují provádět výpočty napříč souvisejícími záznamy v relacích typu VÍCE (jedna-ku-mnoha, mnoho-ku-mnoha). Pracují s filtrovanými podmnožinami dat a podporují vnořené filtry relací.
- count(): Spočítá odpovídající záznamy
- sum(): Sečte hodnoty číselných polí
- avg(): Vypočítá průměr číselných polí
- min(): Najde minimální hodnotu
- max(): Najde maximální hodnotu
Podporované agregační funkce
| Funkce | Syntaxe | Popis | Příklad |
|---|---|---|---|
| count | count(relace) | Spočítá všechny odpovídající záznamy | count(products) > 10 |
| sum | sum(relace.pole) | Sečte hodnoty číselných polí | sum(products.price) > 1000 |
| avg | avg(relace.pole) | Vypočítá průměrnou hodnotu | avg(products.rating) > 4.5 |
| min | min(relace.pole) | Najde minimální hodnotu | min(products.price) > 10 |
| max | max(relace.pole) | Najde maximální hodnotu | max(products.stock) < 100 |
Filtrované agregace
Pro filtrování záznamů před agregací použijte zápis v hranatých závorkách:
Počet s filtrem
count(products[visible = true]) > 5
Spočítá pouze viditelné produkty
Součet s filtrem
sum(products[active = true].price) > 1000
Sečte ceny pouze aktivních produktů
Průměr s filtrem
avg(products[price > 100].rating) > 4.0
Průměrné hodnocení drahých produktů
Více podmínek
count(products[active = true and price > 50]) > 10
Složené podmínky filtru
Vnořené filtry relací
Agregace podporují filtrování podle vnořených relací (např. produkty filtrované podle jejich kategorie):
Filtr podle vnořené relace
count(products[category.name = 'Electronics']) > 5
Spočítá produkty v kategorii Elektronika
Součet s vnořeným filtrem
sum(products[category.active = true].price) > 1000
Sečte ceny, kde je kategorie aktivní
Složené vnořené podmínky
avg(products[category.name = 'Electronics' and visible = true].rating) > 4.5
Kombinace filtrů relací a polí
Příklady z praxe
Analytika v e-commerce
sum(orders[status = 'completed'].total) > 10000
Najde zákazníky s dokončenými objednávkami v hodnotě přes 10 000 $
Správa zásob
min(products[active = true].stock) < 10
Upozorní, když má jakýkoli aktivní produkt nízké zásoby
Kontrola kvality
avg(reviews[verified = true].rating) < 3.0
Označí produkty se špatnými ověřenými recenzemi
Zapojení uživatelů
count(posts[year(created_at) = 2025]) > 50
Najde vysoce aktivní uživatele v roce 2025
Důležité poznámky
- Pouze relace typu VÍCE: Agregace fungují pouze s relacemi jedna-ku-mnoha nebo mnoho-ku-mnoha
- Filtry oprávnění: Automaticky se aplikují na všechny agregační poddotazy
- Zpracování hodnot null: Hodnoty null jsou z výpočtů vyloučeny (chování databáze)
- Varianty count():
count(relace)počítá všechny záznamy;count(relace.pole)počítá hodnoty, které nejsou null - Výkon: Agregace používají optimalizované SQL poddotazy s klauzulemi EXISTS
- Vnořené filtry: Pro vnořené filtry relací použijte tečkovou notaci (např.
category.name)
Doporučené postupy
Používejte operátory nerozlišující velikost písmen
Typ: čitelnost
Operátory like i ilike nerozlišují velikost písmen pro lepší použitelnost
Use: name like "john" or name ilike "john"
Both work the same way (case-insensitive)
Využívejte vyhledávací hodnoty
Typ: čitelnost
Používejte vyhledávací hodnoty pro čistší a čitelnější dotazy
Use: category = "code:ELEC"
Instead of: category.code = "ELEC"
Rozumějte typům relací
Typ: správnost
Znát rozdíl mezi relacemi JEDEN a VÍCE
ONE: category.name = "Electronics"
MANY: products.price > 100 (uses EXISTS)
Používejte závorky pro složitou logiku
Typ: čitelnost
Používejte závorky pro zpřehlednění složitých podmínek
Use: (age < 18 or age > 65) and visible is true
For clear precedence
Zvolte správný operátor pro porovnávání vzorů
Typ: výkon
Používejte vhodné operátory pro porovnávání vzorů
Use: name begins "John" (faster)
Instead of: name like "John%"
Používejte parametry pro dynamické dotazy
Typ: správnost
Používejte parametry místo spojování řetězců
Use: age > $minAge
Instead of: concatenating values directly
Využívejte funkce pro pole
Typ: čitelnost
Používejte vestavěné funkce pro transformaci a validaci dat
Use: lower(name) = "john" and year(created_at) = 2023
For case-insensitive and date filtering
Kombinujte funkce pro složitou logiku
Typ: čitelnost
Vnořujte funkce a používejte aritmetiku pro výkonné transformace
Use: round(price * 1.21) > 100 and hour(created_at) between 9 and 17
For VAT calculation and business hours filtering
Používejte vhodné řetězcové funkce
Typ: výkon
Zvolte správnou řetězcovou funkci pro váš případ použití
Use: indexof(email, "@") > 0 (faster)
Instead of: email like "%@%"
For checking email validity
Rozumějte prioritě operátorů
Typ: správnost
Pamatujte, že * / % mají vyšší prioritu než + -
price + 10 * 2 evaluates as price + (10 * 2)
Not as (price + 10) * 2
Používejte agregace pro analytiku
Typ: čitelnost
Využívejte agregační funkce pro výkonnou analýzu dat
Use: count(products[visible = true]) > 10
For counting filtered related records
Or: sum(orders[status = "completed"].total) > 5000
For analytics on related data
Pokročilé funkce
Typy polí a hodnoty
Podpora různých datových typů a speciálních hodnot
- Řetězce:
'John',"Doe" - Čísla:
42,3.14,-1 - Booleovské hodnoty:
true,false - Kontextové funkce:
now(),currentYear(),me() - Řetězcové funkce:
lower(),upper(),length(),trim(),isnull() - Pokročilé řetězcové funkce:
concat(),indexof(),substring() - Datumové funkce:
year(),month(),day(),week(),yearmonthday() - Extrakce času:
hour(),minute(),second() - Matematické funkce:
round(),floor(),ceiling() - Aritmetické operace:
+,-,*,/,% - Agregace:
count(),sum(),avg(),min(),max() - Funkce pro časové rozsahy:
startOfYear(),endOfYear(),startOfMonth(),endOfMonth(),startOfDay(),endOfDay(),startOfHour(),endOfHour()
Agregační funkce
Provádějte výpočty napříč relacemi typu VÍCE
Základní agregace:
count(products) > 10
Spočítá všechny související záznamy
Filtrovaná agregace:
sum(products[active = true].price) > 1000
Agregace s podmínkami filtru
Filtr vnořené relace:
count(products[category.name = 'Electronics']) > 5
Filtrování podle polí vnořené relace
- Funkce: count, sum, avg, min, max
- Pouze relace typu VÍCE: Funguje s relacemi jedna-ku-mnoha a mnoho-ku-mnoha
- Zohledňuje oprávnění: Respektuje bezpečnostní pravidla entit
Vyhledávací hodnoty
Odkazujte na entity pomocí kódu, jedinečného identifikátoru nebo externího ID
Standardní vyhledávání:
category = 'code:ELEC'
Ekvivalentní k: category.code = 'ELEC'
Vyhledávání podle externího ID:
category = 'ext:SYSTEM:CATEGORY:123'
product = 'ext:SYSTEM:NS:PROD:ABC-456'
Odkazování podle ID externího systému (z ABRA Flexi atd.)
- Standardní:
code:,ean:,guid: - Externí:
ext:EXTERNAL_ID(podporuje dvojtečky v hodnotě) - Ukládání: Externí ID jsou uložena v tabulce
extIds
Typy relací
Odlišné chování pro relace JEDEN vs. VÍCE
- JEDEN:
category.name = 'Electronics' - VÍCE:
products.price > 100
Přeložitelná pole
Dotazování na přeložitelná pole v různých jazycích
Výchozí jazyk:
name = 'Hello'
Použije výchozí/zvolený jazyk uživatele
Specifický jazyk:
name:cs = 'Ahoj'
name:en = 'Hello' and description:de like 'Produkt'
Dotazování na konkrétní jazyk pomocí syntaxe pole:kódJazyka
- Syntaxe:
názevPole:kódJazyka = 'hodnota' - Podporované: cs, en, de, fr, hu, pl, sk
- Záložní řešení: Bez kódu jazyka se použije jazyk zvolený uživatelem
Funkce pro časové rozsahy
Získejte přesné počáteční a koncové hranice pro časová období
created_at >= startOfYear(now()) and created_at <= endOfYear(now())
event_time >= startOfMonth("2025-01-01") and event_time <= endOfMonth("2025-01-01")
- Rok:
startOfYear(),endOfYear() - Měsíc:
startOfMonth(),endOfMonth() - Den:
startOfDay(),endOfDay() - Hodina:
startOfHour(),endOfHour() - Všechny funkce vracejí přesná časová razítka s mikrosekundovou přesností
Kontroly překladů
Najděte entity s chybějícími překlady
Chybějící konkrétní jazyk:
missing 'en' translation
Najde entity, kde chybí anglický překlad
Chybějící jakýkoli jazyk:
missing any translation
Najde entity, kterým chybí překlad v jakémkoli nakonfigurovaném jazyce
Kombinované podmínky:
priority = 'high' and missing 'en' translation
Položky s vysokou prioritou, které potřebují anglický překlad
V relacích:
count(products[missing 'en' translation]) > 5
Spočítá produkty s chybějícími překlady
- Kontroluje: Všechna přeložitelná pole v entitě
- Požadavky: Primární jazyk musí mít hodnotu
- Případ použití: Správa pracovního postupu překladů
- Jazyky: Používá jazyky nakonfigurované v organizaci
Vnořené relace s filtry
Filtrování relací s dílčími podmínkami
products[category.name = 'Electronics'].price > 100