Během vyhodnocování ji pak izoluje od externích změn. Můžete si tedy takto uloženou tabulku představit jako konstantu.
Setkal jsem se s názorem, že funkcí Table.Buffer nikdy nic nezkazíte. Dovolím si tomu oponovat. V určitých situacích její použití povede k výraznému zvýšení rychlosti výpočtu dotazu. Příkladem takovéto situace je, když stejný dotaz vyžaduje data ze stejného zdroje dat více než jednou.
Na druhou stranu může docházet ke zpomalení vyhodnocování z důvodu opakovaného ukládání dat nebo i zastavení vyhodnocování z důvodu přetečení dedikované paměti.
Pochopení funkce
Abychom pochopili, jak tato funkce přesně pracuje, tak je dobré chápat, jak jazyk M pracuje s jednotlivými kroky dotazu. Když se zamyslíme nad konceptem kroků, který je v jazyku M, tak to může působit dojmem, že výsledek každého kroku se ukládá. Skutečnost je ale jiná. Při aplikování celého dotazu dochází ke skládání kroků vůči zdroji dat. Pokud využijeme Table.Buffer(), tak se toto skládání roztrhne. Pod tuto funkci se uloží celý předešlý postup a výsledek se uloží do paměti jako „nový“ zdroj dat, pro který se aplikují další části dotazu.
Dalším důležitým faktorem, který je potřeba pochopit, je to, že toto uložení je v rámci paměti a ne disku. Načtení tedy dotazu s touto funkcí neovlivňuje načítání dotazu druhého.
Příklad
Toto se dá pochopit na příkladu reference:
Máme jednu hlavní tabulku „Tabulka_1“ a dvě tabulky, které z této tabulky vychází pomocí funkce Reference „Tabulka_2“ a „Tabulka_3“
V „Tabulka_1“ mám aplikovanou funkci Table.Buffer, při vyhodnocování „Tabulka_2“ dojde k uložení dat v postupu „Tabulka_1“. Při vyhodnocování „Tabulka_3“ dojde k uložení znovu. Takto máme v paměti 2x ty samé hodnoty, včetně výsledků. Z tohoto výsledku vyplývá, že je dobré velmi dobře zvážit, kdy tuto funkci použít a kdy ne.
Syntaxe
Table.Buffer()
Upozornění
Ukládání probíhá na „mělké“ úrovni. Neukládají se tedy hodnoty vnořených tabulek, funkcí a listů hodnot v jednotlivých tabulkách. Takovéto tabulky se uloží jen jako skalární hodnoty (Table, Function, List).