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átorAliasyPopisPříkladKategorie
===, eq, ~eq~Rovná sename = “John”Porovnání
!=<>, ne, ~ne~Nerovná sename != “John”Porovnání
>gt, ~gt~Větší nežage > 30Porovnání
>=gte, ~gte~Větší než nebo rovnoage >= 18Porovnání
<lt, ~lt~Menší nežage < 65Porovnání
<=lte, ~lte~Menší než nebo rovnoage <= 65Porovnání
is null-Pole je nullname is nullNull
is not null-Pole není nullname is not nullNull
is empty-Pole je null nebo prázdný řetězecname is emptyNull
is not empty-Pole není null a není prázdnéname is not emptyNull
is true-Pole je truevisible is trueBooleovské
is false-Pole je falsevisible is falseBooleovské
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 rozsahuage between 18 and 65Rozsah
not between … and …-Hodnota není v rozsahuage not between 18 and 65Rozsah
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á naname begins “John”Vzor
ends-Končí naname ends “Doe”Vzor
not begins-Nezačíná naname not begins “John”Vzor
not ends-Nekončí naname 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 podstromuin subtree “code:ELECTRONICS”Hierarchické
missing ‘XX’ translation-Kontrola, zda chybí překlad pro konkrétní jazykmissing “en” translationPřeklad
missing any translation-Kontrola, zda chybí překlad pro jakýkoli nakonfigurovaný jazykmissing any translationPř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átorPopisPrioritaPří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

FunkcePopisPříkladKategorie
hour(field)Extrakce hodiny z datetime (0-23)hour(timestamp) = 14Extrakce času
minute(field)Extrakce minuty z datetime (0-59)minute(timestamp) = 30Extrakce času
second(field)Extrakce sekundy z datetime (0-59)second(timestamp) = 45Extrakce času
round(value)Zaokrouhlení na nejbližší celé čísloround(price) = 100Matematické
floor(value)Zaokrouhlení dolů na celé číslofloor(rating) = 4Matematické
ceiling(value)Zaokrouhlení nahoru na celé čísloceiling(price) = 100Matematické
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 mezertrim(name) = “Product”Řetězcové
lower(field)Převod na malá písmenalower(name) = “john”Řetězcové
upper(field)Převod na velká písmenaupper(name) = “JOHN”Řetězcové
length(field)Zjištění délky řetězcelength(name) > 5Řetězcové
year(field)Extrakce roku z datayear(created_at) = 2023Datum/Čas
month(field)Extrakce měsíce z data (1-12)month(created_at) = 12Datum/Čas
day(field)Extrakce dne z data (1-31)day(created_at) = 25Datum/Čas
quarter(field)Extrakce kvartálu z data (1-4)quarter(created_at) = 4Datum/Čas
week(field)Extrakce čísla týdne z dataweek(created_at) = 52Datum/Čas
dayofweek(field)Extrakce dne v týdnu (0-6, 0=Neděle)dayofweek(created_at) = 1Datum/Čas
now()Aktuální časové razítkocreated_at > now()Speciální
me()ID aktuálního uživateleuser_id = me()Speciální
isnull(field)Kontrola, zda je pole nullisnull(name) = trueSpeciální
count(relation)Počet souvisejících záznamů (pouze relace MANY)count(products) > 10Agregace
count(relation[filter])Počet souvisejících záznamů odpovídajících filtrucount(products[visible = true]) > 5Agregace
sum(relation.field)Součet číselného pole napříč souvisejícími záznamysum(products.price) > 1000Agregace
avg(relation.field)Průměr číselného pole napříč souvisejícími záznamyavg(products.rating) > 4.5Agregace
min(relation.field)Minimální hodnota číselného pole napříč souvisejícími záznamymin(products.price) > 10Agregace
max(relation.field)Maximální hodnota číselného pole napříč souvisejícími záznamymax(products.stock) < 100Agregace

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

FunkceSyntaxePopisPříklad
countcount(relace)Spočítá všechny odpovídající záznamycount(products) > 10
sumsum(relace.pole)Sečte hodnoty číselných polísum(products.price) > 1000
avgavg(relace.pole)Vypočítá průměrnou hodnotuavg(products.rating) > 4.5
minmin(relace.pole)Najde minimální hodnotumin(products.price) > 10
maxmax(relace.pole)Najde maximální hodnotumax(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