Forma uspořádání dat v Excelu

Mějme list Excelu. Ten si uživatelé často ztotožňují s pojmem tabulka, ostatně jako tabulku nezřídka označují i samotný soubor Excelu. Trochu si teď ale v pojmech uděláme pořádek. Nemusím asi zdůrazňovat, že soubor Excelu se nazývá sešit a ten sestává z listů. Tabulka je pak jen jednou z forem uspořádání dat a pohledu na věc.

tabulka (s malým „t“)

V tuto chvíli si dovolím svůj pohled na věc a drze půjdu proti definici na Wikipedii. Pod tímto pojmem si představuji „tabulku“, která obsahuje jak záhlaví sloupců, tak záhlaví řádků. V praxi si pod tabulkou můžete kromě klasických odkazů na buňky (styl A1 i R1C1) představit herní pole známe hry Lodě (The Battle Ship), šachovnici s popisky nebo tabulku malé násobilky. Ve sportu pak narazíte na tzv. křížové tabulky, kdy položky v záhlavích řádků i sloupců (týmy nebo sportovci) jsou stejné. Na hodnoty se tedy odkazuji jako na průsečík řádku a sloupce (buňka C4, „C4 potopeno“, tah věží na C4, skóre zápasu mezi tím a tím týmem). Na takové tabulky velmi často aplikujeme vyhledávací funkce (INDEX, POZVYHLEDAT, SVYHLEDAT).

seznam (s malým „s“)

Seznam je zjednodušeně řečeno tabulkou neobsahující záhlaví řádků. Představuje databázový pohled na věc, kdy se sloupcům říká pole (fields) a řádkům záznamy (records). Skupina záznamů (jako výsledek SQL dotazu) tvoří tzv. recordset. Každý sloupec (pole) je homogenní ve smyslu datového typu (datum, text, celé číslo apod.). Taková forma uspořádání dat je vhodná pro filtrování a jako zdroj pro kontingenční tabulky. Sumační řádek neumísťujeme pod data, ale do vyhrazeného prostoru nad ně! Nepoužíváme přitom funkci SUMA, nýbrž SUBTOTAL, který umí reagovat na změnu filtru.

Seznam (s velkým „S“)

Tento pojem znal už Excel 2003 (v angličtině List, ListObject). Jde o to, že seznam (s malým „s“) povýšil Excel na sofistikovaný objekt Seznam, který si může dovolit umístit sumační řádek (narazíte na pojmy Řádek souhrnů i Řádek Součty) pod data, přidávané řádky si automaticky berou z existujících záznamů vzorce a lépe pracuje s názvy. Kontingenční tabulka postavená na Seznamu (bez sumačního řádku) poskytuje komfort v tom, že počet záznamů může být dynamický a rozsah zdrojových dat není potřeba ručně měnit (nebo počítat s rezervou). Excel 2007 a novější bohužel (!) nahradil tento název pojmem Tabulka (anglicky Table), viz karta Vložení / Tabulka a udělal nám v tom ještě větší binec. Proto mějte na paměti, že dřívější pojem Seznam = dnešní Tabulka. Pozn. Volba Domů / skupina Styly, Formátovat jako tabulku ve skutečnosti odpovídá spíše pojmu Převést na Tabulku. Změna stylu je pouze vedlejší efekt, takže tento nástroj v dané skupině ani nemá co dělat.

Kontingenční tabulka (používá se zkratka KT)

Tento pojem děsí uživatele odjakživa a přitom jeho pochopení je otázka pár minut. A až opadne první nadšení, tak vás bude děsit, jak pracuje s počítanými (výpočtovými) položkami a poli a neschopností zpracovat větší množství dat. Jinak se také jedná o vcelku sofistikovaný, s každou verzí Excelu lehce inovovaný objekt, který spolu s bratříčkem (kontingenčním grafem) zpracovává data (nejčastěji ve formě seznamu, nejlépe Seznamu) a nabízí jinou formu jejich uspořádání a filtrování (vizualizaci). Z databázových aplikací přebírá schopnosti seskupování (řekněme ekvivalent GROUP BY) a počítaných sloupců (polí). Paradoxně neumí prosté sloučení dvou a více zdrojů dat.

Z pohledu schopností (vývojového stupně) lze tedy uvažovat řadu: seznam → Seznam (Tabulka) → Kontingenční tabulka. Zdrojem dat pro Seznam (Tabulku) a Kontingenční tabulku může být skutečný recordset, tj. výsledek SQL dotazu do databáze (nejen Access, Microsoft SQL, MySQL, ale i seznam na listu Excelu může posloužit jako databázový zdroj). Lze říci, že seznam je nepřímým (databázovým), nebo přímým (řekl bych přirozeným, nativním) zdrojem dat pro Seznam (Tabulku).

Matice (hodnot) a pole

Maticí zde není myšlen pojem strojařský, ale matematický. Dívá se na data jako na uspořádanou množinu hodnot, jejichž pozice je dána indexem řádku a sloupce (nikoliv písmenem sloupce). Spojitá oblast buněk nebo pole hodnot ve VBA jsou typickými představiteli matice hodnot (maticové konstanty). Ekvivalentem plošné jednořádkové (jednosloupcové) oblasti buněk (hodnot) je jednorozměrné pole (1D), oblasti m × n buněk odpovídá pole dvourozměrné (2D). Za třetí rozměr (3D) si v prostředí Excelu můžete v duchu dosadit jednotlivé na sebe naskládané listy (ostatně vybavte si pojem 3D odkazy) a tedy trojrozměrné pole. Při tomto pohledu na data uplatňujeme maticové vzorce a funkce typu TRANSPOZICE, SOUČIN.SKALÁRNÍ, SUMIF aj. Typickým příkladem užití je také výpočet n rovnic o n neznámých (kdy stačí funkce listu, nepotřebujete programovat nějakou Gaussovu eleminaci).

Pozn. č. 1: Věděli jste, že pojmenovaná dvourozměrná maticová konstanta (viz Definované názvy) může nahradit spojitou oblast buněk (tabulku) a lze na ní aplikovat kupříkladu vyhledávací funkce? Takže taková tabulka koeficientů pro zrychlené odpisy majetku vůbec nemusí ležet na listu…

Pozn. č. 2: Ve VBA je možné mít i vícerozměrné pole a dokonce pole polí (položka pole obsahuje vnořené pole). Jednorozměrné pole má přitom v tomto programovacím jazyce horizontální charakter (reprezentuje ho jednořádková oblast buněk).

Forma uspořádání dat v Excelu
Forma uspořádání dat v Excelu

Napadlo vás, co je lepšího než kontingenční tabulka? Existuje bezplatná nadstavba PowerPivot, jíž v Excelu 2013 v podstatě nahradil integrovaný nástroj PowerView (vyžaduje více jak 2 GB RAM). Samotný PowerPivot jsem vyzkoušel těsně před psaním tohoto článku v Excelu 2010 a musím říct, že jeho přínos je v podstatě nulový. PowerView jsem zatím neměl možnost blíže prozkoumat, ale slibuje některé fajnovosti. Pokud jsem dobře viděl, umí třeba data vykreslovat na mapě (to bylo možné jen v pradávných verzích Excelu, kdy byla k dispozici i mapa ČR s okresy a pak nastoupil placený Microsoft MapPoint).

Když si vezmeme, že Excel je software pro analýzu dat a jejich (před)finální prezentaci (na popravu chodíme s PowerPointem), pak kontingenční tabulka v podstatě představuje jeho vrcholný nástroj. Na kontingenční tabulku lze už jen navázat funkci ZÍSKATKONTDATA(). Mezi nejtěžší práce patří „krmení“ kontingenčních tabulek (i z více zdrojů), které fakticky znamená napojení do databází a porozumění SQL dotazům. Pokud nám nevyhovují relační databáze zmíněné výše, nastupuje OLAP (datové kostky). Osobně jsem měl možnost poznat kupříkladu nástroje společnosti Jedox.

Na závěr ještě poslední úvaha stran datového objemu a rychlosti zpracování dat. Excel je přes své tisíce sloupců a miliony řádků mizernou „platformou“. Je sotva dobrým úložištěm dat. Stovky a tisíce vzorců (obzvláště těch maticových) Excel nechutně zpomalí, nemluvě o jmenovaných neschopných výpočtových položkách a polích v kontingenčních tabulkách. Na problém můžete narazit už na 10-20 tisících záznamech o několika sloupcích. Teoreticky vám pomůže vícejádrový procesor, více operační paměti a 64bitová verze Excelu, ale nespoléhejte na to. Trendem je rozdělovat výpočty do více vláken, směřovat je do cloudu a také je nechávat na grafických kartách. Excel se ovšem zatím drží víceméně stranou. Prostě, mějte v zásobě nějaké své tabulky – čokolády.