Začínáme
Systém LISp-Miner a proces DZD
Analytické procedury
Pokročilé funkce
Výzkum a vývoj
Začínáme
Systém LISp-Miner a proces DZD
Analytické procedury
Pokročilé funkce
Výzkum a vývoj
Č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.
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).
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ý.
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.
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:
nebo věk v letech:
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