Uživatelské nástroje

Nástroje pro tento web


lmexplore:columnderived

Toto je starší verze dokumentu!


Výpočet odvozených hodnot

Typickou odvozenou hodnotou je den v týdnu vypočtený z datumu. Odvozenými jsou i další hodnotami spočítané nad sloupci datového typu datum/čas. Datum a čas jsou složené datové typy, které se skládají z dílčích hodnot – rok, měsíc a den pro datum a hodina, minuta, sekunda pro čas.

S každou z těchto dílčích hodnot můžeme pracovat samostatně. Zároveň je možné z datumu vypočítat i pořadový den v roce, čtvrtletí a konečně i pořadový den na základě minimální hodnoty v daném sloupci.

Č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.

Odvozené sloupce

Vypočtené odvozené hodnoty se v systému LISp-Miner přidávají jako tzv. odvozené sloupce (angl. derived columns) do seznamu sloupců na záložce databázové tabulky. Odvozený sloupec přidáme tlačítkem Add derived.

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ích 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 type 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-Miner, ale prostředy 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.

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.

Další příklady odvozených sloupců

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+ 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:

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

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

lmexplore/columnderived.1450628459.txt.gz · Poslední úprava: 2015/12/20 17:20 autor: msi