Uživatelské nástroje

Nástroje pro tento web


lmexplore:columnexpr

Hodnoty vypočtené výrazem

Častým případem odvozených hodnot je výpočet jednotkových cen z cen celkových. Dalším příkladem může být věk vypočtený z datumu narození nebo BMI (body-mass index) používaný v lékařském prostředí a zohledňující jak hmotnost, tak výšku pacienta.

Jde o odvozené hodnoty vypočtené z jiných sloupců, ale vždy pouze z hodnot v jednom řádku databázové tabulky.

Přidání odvozeného sloupce

Odvozený sloupec vypočtený výrazem přidáme tlačítkem Add expr..

Nejprve je třeba zadat výstižný název nově přidávaného sloupce – ten musí být unikátní v rámci databázové tabulky. Následně zadáváme přesný matematický výraz, podle kterého mají být hodnoty ve sloupci spočítány. Konečně je třeba zvolit vhodný datový typ.

Po stisku tlačítka Ok se objeví záložka s detaily o databázovém sloupci. Oproti sloupcům existujícím přímo v databázi obsahuje tento i zadaný výraz, kterým jsou hodnoty v odvozeném sloupci vypočteny. Tento výraz je možné upravovat po stisku tlačítka Edit. Funkčnost záložky i další zacházení s odvozenými sloupci je však zcela shodné jako v případě původních databázových sloupců.

V seznamu sloupců databázové tabulky bude odvozený sloupec označen typem Expr. (od Expression).

Zadávání matematického výrazu

Při zápisu matematického výrazu pro výpočet odvozeného sloupce se budou nabízet názvy existujících sloupců. Použitelný sloupec můžeme vyhledat i ze seznamu rozbalovací nabídky. Při zápisu výrazu je nutné dodržet syntaxi databázového prostředí, ve kterém jsou uložena analyzovaná data (tj. syntaxi VBA) pro MS Access, SQL/PL pro Oracle atp.). Dojde-li při výpočtu odvozené hodnoty k chybě (chybná syntaxe výrazu, dělení nulou apod.), bude sloupec označen jako nevalidní.

Pozor! Při výpočtu nelze používat jiné, dříve vytvořené odvozené sloupce. Výraz není vyhodnocován LISp-Minerem, ale prostředky databázového prostředí, ve kterém jsou uložena analyzovaná data. Proto se ve výrazu mohou objevit pouze sloupce, které existují v databázové tabulce.

Poznámka: Vypisováním lze do editačního políčka zadat pouze matematické výrazy, které nepřesáhnou jeho šířku. Pro zadání dlouhých matematických výrazů je nutné použít jakýkoliv textový editor (Notepad, Word…), výraz zkopírovat do schránky systému Windows a pomocí tlačítka Paste from clipboard vložit do editačního políčka v dialogovém okně. Přestože část výrazu nebude vidět, uloží se po stisku tlačítka Ok celý.

Volba datového typu

Vhodný datový typ je třeba zvolit s ohledem na datový typ hodnot, ze kterých je odvozená hodnota počítána, a podle použitých matematických operací. V zásadě platí, že z textových hodnot může vzniknout pouze hodnota datového typu text. Datový typ celé číslo volíme pouze u výpočtu z celočíselných hodnot, ve kterém není použito dělení. V ostatních případech je nutné zvolit datový typ desetinné číslo.

Příklady hodnot vypočtených výrazem

Výraz pro výpočet odvozených hodnot může být i složitější a používat interní funkce databázového prostředí (zde pro VisualBasic for Applications použitý v MS Accessu). Tak je například možné z třetí číslice rodného čísla rozpoznat, zda se jedná o ženu (číslice bude 5 nebo 6), nebo o muže:

  • výraz: CInt( Mid( RC, 3, 1)) In (5, 6) datový typ: boolean

nebo věk v letech:

  • výraz: Year( Now())- (CInt( Left(RC, 2))+ 1900)) datový typ: celé číslo

Poznámka: Pozorný čtenář si jistě všimne nebezpečí, které při použití výše uvedeného vztahu pro výpočet věku v letech hrozí, pokud v databázi budou osoby narozené v roce 2000 a později).

Další příklady výpočtu odvozených hodnot:

Hodnota Výraz Datový typ
Cena celkem PCenaUbytovani+PCenaStrava-PCenaSleva desetinné číslo
Cena celkem v eurech PCenaCelkem / SEUR desetinné číslo
Cena za noc PCenaCelkem / PNoci desetinné číslo
Cena za osobu a noc PCenaCelkem / (POsob * PNoci) desetinné číslo
Turnus (PPobytOd.DayOfWeek = 6) & (PNoci % 7 = 0) boolean
Přes sobotní noc ((PPobytOd.DayOfWeek % 7)+ PNoci) > 6 boolean
Věk Now()-RokNarozeni celé číslo
BMI Vaha / ((Vyska/100) * (Vyska/100)), resp. po úpravě Vaha / (Vyska * Vyska / 10000) desetinné číslo
Vzdálenost bydliště od hotelu sqr((BydlisteX-HotelX)*(BydlisteX-HotelX)+(BydlisteY-HotelY)*(BydlisteY-HotelY)) desetinné číslo

Poznámka: Zcela správně bychom při zápisu výrazu měli používat plně kvalifikované názvy (např. Hotel.PCenaCelkem, Hotel.PNoci). Syntaxe SQL příkazu SELECT (který se interně pro výpočet hodnot používá) však umožňuje zkrácený zápis v případě, že nehrozí nejednoznačnost v tom, ve které tabulce se použitý sloupec nachází.


Související témata:

Odvozené hodnoty
Záložka s detaily o tabulce
Zobrazení hodnot v tabulce

Praktická ukázka: Demo Hotel: Výpočet odvozených hodnot

lmexplore/columnexpr.txt · Poslední úprava: 2016/01/06 10:39 (upraveno mimo DokuWiki)