Uživatelské nástroje

Nástroje pro tento web


lmexplore:columnexpr

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

lmexplore:columnexpr [2016/01/06 10:39] (aktuální)
Řádek 1: Řádek 1:
 +====== 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.''​. ​
 +
 +{{:​lmexplore:​databasecolumnderived.pcenaubytovanijednotkova.png?​300 |}} 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ý [[#​Zadávání matematického výrazu|matematický výraz]], podle kterého mají být hodnoty ve sloupci spočítány. Konečně je třeba zvolit vhodný [[#Volba datového typu|datový typ]].
 +
 +Po stisku tlačítka ''​Ok''​ se objeví záložka s [[:​lmexplore:​column|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 | //<​nowiki>​((PPobytOd.DayOfWeek % 7)+ PNoci) > 6</​nowiki>//​ | boolean |
 +| Věk | //​Now()-RokNarozeni//​ | celé číslo |
 +| BMI | //<​nowiki>​Vaha / ((Vyska/​100) * (Vyska/​100))</​nowiki>//,​ resp. po úpravě //Vaha / (Vyska * Vyska / 10000)// | desetinné číslo |
 +| Vzdálenost bydliště od hotelu | //<​nowiki>​sqr((BydlisteX-HotelX)*(BydlisteX-HotelX)+(BydlisteY-HotelY)*(BydlisteY-HotelY))</​nowiki>//​ | 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:**
 +
 +{{:​lmbase:​seealso.png?​nolink&​32|}} [[:​lmexplore:​columnderived|Odvozené hodnoty]]\\
 +{{:​lmbase:​seealso.png?​nolink&​32|}} [[:​lmexplore:​table|Záložka s detaily o tabulce]]\\
 +{{:​lmbase:​seealso.png?​nolink&​32|}} [[:​lmexplore:​tabledata|Zobrazení hodnot v tabulce]]\\
 +
 +{{:​lmdemo:​example.png?​nolink&​32|}} Praktická ukázka: [[:​lmdemo:​hotel2015:​columnderived|Demo Hotel: Výpočet odvozených hodnot]]
lmexplore/columnexpr.txt · Poslední úprava: 2016/01/06 10:39 (upraveno mimo DokuWiki)