Budu psát článek, který popisuje tvorbu kontingenčních tabulek ve starém tabulkovém procesoru Supercalc 3. Doba, kdy Německo bylo ještě rozdělené a naopak Československo byl jeden stát. Windows bylo ještě slovo téměř neznámé a vše se odehrávalo na počítačích s názvem XT, někdy i AT. Pokud byl v počítači pevný disk, byla to spíš výjimka. A tak se stalo, že jeden z mých zákazníků přišel s požadavkem, abych mu udělal součet údajů podle dvou hodnot. Ale ne vždy to musel být přímo součet. Jednalo se také o průměr nebo minimální hodnotu. A protože svoji agendu řešil právě v tom Supercalcu, řešení na sebe nedalo dlouho čekat. Odborně se tomu říká kontingenční tabulka, kteréžto pojmenování zavedl až Excel 5 a nebo také Pivot table. Ale to jsem tenkrát ještě nevěděl.
Nápad je tak úžasně jednoduchý, že mě to až samotného překvapilo. Nějakou část udělám manuálně, ten zbytek už udělá stroj. A ten zbytek je vlastně jen opakování téhož, čili výběru z databáze, ovšem výsledek se kopíruje pokaždé na jiné místo. V podstatě je to křížová tabulka, jejíž záhlaví v řádku a ve sloupci udává výběrová kritéria a průsečík pak obsahuje výsledek, který tato kritéria splňuje. Opravdu jednoduché jak facka. Manuálně jsem si vytvořil tři oblasti. Oblast dat, oblast kritérií a výstupní blok, což je základ pro veškeré databázové operace v tabulkových procesorech. Následuje ještě poslední oblast, a to je vzorec, který z výstupního bloku vypočítá výsledek.
A teď k té automatizaci. Supercalc 3 2.10 podporuje makra XQT. V XQT souboru se mohou objevit v podstatě jen stisky kláves. A přesně tohle bude řešit můj generátor, který jsem napsal v Turbo Pascalu. Celý tento generátor má na vstupu tyto položky:
Start (počátek), tedy souřadnici, kde začínají řádky a sloupce tabulky, do které se budou ukládat hodnoty. Z tohoto bodu se vždy vychází směrem vpravo a dolů. Dále je to počet řádků a sloupců v tabulce a následně buňky, kde jsou uložena kritéria. Poslední položka obsahuje vzorec, který z výstupní oblasti vypočítá výsledek. No a ten se jako hodnota následně uloží do výsledné tabulky do průsečíku kritérií. No a celý tento proces probíhá tolikrát, když počet řádků vynásobím počtem sloupců.
Jedná se tedy o to, že v makru nakopíruju Start + pravá (sloupec) do prvního kritéria, + dolů (řádek) do druhého kritéria a spustím databázový dotaz, což v Supercaclu 3 obnáší následující: //Data, Extract, Remain !. Tímto se pro se pro daná kritéria vytáhnou požadované hodnoty a ty už pak jenom nakopíruju na patřičné místo. Rychlé a okamžité. Někdo by mohl namítnout, proč jsem nepoužil databázové funkce, které nabízí třeba Lotus 1-2-3, tedy @DSUM, @DAVG. Z jednoduchého důvodu. Supercalc 3 tyto funkce ještě nemá. Ty zvládla až následující verze, tedy čtyřka. Ale tam už bylo možno provozovat klasická makra, takže logika se nemusela řešit mimo tabulkový procesor.
Jednoduché řešení, výsledek téměř okamžitý, a pokud se tabulka změnila, stačilo jen v generátoru změnit pár hodnot a nové makro bylo možno použít. Snad jen vysvětlivka k tomu vykřičníku ve výběrovém příkazu. Vykřičník znamená přepočet tabulky, což v Lotusu obstarává klávesa F9.
Přikládám pár obrázků. První obsahuje obrazovku generátoru a druhý už výslednou tabulku. Ještě zmíním druhou variantu, kterou jsem už nakousl, a to jsou databázové funkce, které ve trojkové verzi Supercalcu ještě nejsou. Pokud bych je použil následně ve verzi 4, pak bych musel vytvářet složitě tabulku kritérií a tabulka by byla přeplněna vzorci a její přepočet na na XT počítačích by nebyl rychlý. Spíš naopak. Při rozsáhlých tabulkách by změna jedné hodnoty celý program zabrzdila. A při velkých tabulkách a omezené operační paměti (mnohdy 512 KB) téměř nemyslitelné řešení. A tak jsem zvolil to, co jsem zvolil a zákazník byl naprosto spokojen. A o tom to celé je.
Takže tohle byla jen taková malá vzpomínka na dobu, kdy jsem s počítači PC teprve začínal. Pracuji s nimi doposud a vlastně Supercalc 3 byl můj první tabulkový procesor. A pořád ho mám uložený ve svém archívu. Pokud by si někdo chtěl pohrát, tak na www.vetusware.com si tenhle tabulkový skvost můžete stáhnout. Ale bez emulátoru ho zřejmě nespustíte.
Komentáře