Nativní výstup kontingenčních tabulek, dotazy cross-filter a chybějící členy
Nativní výstup do mezipaměti listu
function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable): Integer; function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer;
Operace připraví před potvrzením hodnot listu i výstupního vlastnictví najednou kompletní nativní mřížku sestavy v kompaktní, tabulkové či obrysové podobě a její umístění, rowItems, colItems i metadata datové osy; vrací 1 při úspěchu nebo -1 s diagnostikou při nepodporovaném stavu či kolizi
Podporovaná neprázdná lokální zobrazení si zachovají aktuální filtry, přesné identity členů mezipaměti, obyčejné hierarchie, podporované seskupené domény, výchozí či vlastní mezisoučty a libovolnou podporovanou datovou osu; nativní mřížka používá původní agregované hodnoty, místo aby znovu kombinovala zobrazené průměry či jiné neaditivní výsledky
Existující objekty buněk a formátování zůstanou dostupné, zatímco zmenšení či přesun sestavy vymaže jen nezměněné dříve vlastněné hodnoty; upravený výstup, překryv se zdrojem, sloučení, vzorce, pole a jiné sestavy se odmítnou před mutací
Importovaný skalární výstup vyžaduje explicitní adopci s AAdoptExisting=True; následné aktualizace používají trvalé vlastnictví po jednotlivých buňkách, včetně situací po uložení a opětovném otevření
Operace čte aktuální záznamy mezipaměti a neaktualizuje zdrojová data ani nepřepočítává vzorce; Cache.RefreshOnLoad=False je platné, protože list teď obsahuje skutečné připravené nativní výsledky
Zpětná volání filtru záznamů volajícího se účastní odděleného náhledu, ale nemají OOXML reprezentaci; explicitní nativní aktualizace Excelu nedokáže reprodukovat libovolná omezení ze zpětných volání, zatímco podporované trvalé ruční filtry a filtry Slicerů si zachovají reprezentaci ve formátu
Podporovaná počítaná pole mezipaměti SUM i položky vlastněné mezipamětí používají kontrakt kontextových součtů popsaný v tématu Nativní počítaná pole kontingenčních tabulek a položky vlastněné mezipamětí; vlastní titulky členů a nepodporované kombinace rozvržení se výslovně odmítnou, zatímco podporované generované surové rozvržení si ponechá nesouvisející XML a aktuální masky členů
TryXLSXMakeNativePivotLayout(const Xml: WideString; Table: TXLSPivotTable; AWriter: TlxPivotResultWriter; out ResultXml, Reason: WideString): Boolean je pomocník připraveného rozvržení na nižší úrovni v lxPivotXml
Jeho zapisovač dostane kompletní obdélník sestavy v pořadí po řádcích, včetně prázdných buněk, s offsety od nuly vůči kotvě tabulky; kontrola XML i mřížky skončí dřív, než dojde na první zpětné volání, ale zápisy vlastněné volajícím se při výjimce vrátit nedají
Fasáda sešitu dodá oddělený zachytávající zapisovač pro transakční aktualizace buněk; kombinovaný připravený náhled a nativní Variant mřížky jsou ohraničené na 4194304 buněk
Cesta nativního náhledu si umí vyžádat nativní orientaci celkových součtů přes volitelný parametr AUseNativeGrandTotals v TXLSPivotTable.MakePreview; stávající volání s jedním zapisovačem i s layout zapisovačem si zachovají předchozí chování
Rozvržení a opakované titulky
Nastavte Compact a Outline na sestavě a na každém poli řádků před materializací; tabulková pole používají oba příznaky jako False, obrysová pole používají Compact=False a Outline=True a kompaktní pole oba příznaky jako True
property TXLSPivotField.RepeatLabels: Boolean;
RepeatLabels má výchozí hodnotu False, kopíruje se nezávisle spolu s polem a čte či zapisuje nativní rozšíření x14:pivotField fillDownLabels; opakuje titulky nadřazených úrovní v tabulkovém i obrysovém výstupu a nemá žádný efekt na pole, které má kompaktní i obrysový příznak zapnutý současně
Každé samostatné pole řádků dostane vlastní fyzický sloupec, zatímco sousední kompaktní obrysová pole sdílejí sloupec titulků; více měr na řádcích sleduje CompactData a více měr na sloupcích si ponechá nezávislé titulky dat i celkové součty
Výchozí tabulkové mezisoučty se objevují pod svou skupinou; obrysové SubtotalTop volí umístění nahoře či dole, zatímco míry na řádcích používají samostatné agregující řádky pod skupinou a zachovají titulek každé míry
Nativní výstup z mezipaměti nechá chybějící průniky řádků a sloupců prázdné a zachová skutečnou numerickou nulu; obyčejné Make a náhledy bez nativní volby si ponechají předchozí chování prázdných výsledků
Neaktivní pole a pole měr zdědí rozvržení sestavy v připravených nativních metadatech, takže explicitní aktualizace Excelu zachová odpovídající titulky polí a dat; operace zachová živé nastavení polí i stávající kontroly vlastnictví
Importovaná rozšíření opakovaných titulků přijímají aliasy namespace, včetně deklarací na samotném elementu rozšíření; neznámé nesouvisející XML zůstane cestou nativní materializace zachované
Seskupení členové, pořadí os a vlastní mezisoučty
Nativní výstup podporuje kompletní numerické skupiny rozsahů, datumové skupiny i ruční skupiny členů reprezentované stávajícími typovanými metadaty seskupení mezipaměti; generované titulky si zachovají přesné importované GroupItemLabels, včetně Unicode a lokalizovaných datumových titulků
Seskupení se vyhodnocuje na oddělené mezipaměti, se zachováním záznamů živé mezipaměti, handlerů sdílených položek i identit skupin; neplatné meze, nulové intervaly, nekompletní domény či nepodporované typy hodnot skupinových položek se odmítnou dřív, než se změní výstup listu
Stávající pozice TXLSPivotField.Position od nuly určuje stabilní nativní pořadí osy řádků či sloupců; shodné pozice zachovají autorské pořadí polí, takže nově vytvořená pole s výchozí pozicí si ponechají své předchozí pořadí
Nativní importované hierarchie Year/Month i nadřazené/ruční hierarchie členů si zachovají explicitní sekvenci os, zatímco indexy polí mezipaměti, indexy polí zobrazení i základní identity výpočtu zobrazení zůstanou beze změny; ruční skupiny respektují explicitní pořadí položek kontingenční tabulky, místo aby řadily titulky skupin nebo indexy mezipaměti
Vlastní mezisoučty řádků podporují xlpsSum, xlpsCount, xlpsAverage, xlpsMax, xlpsMin, xlpsProduct, xlpsCountNumbers, xlpsStdDev, xlpsStdDevP, xlpsVar a xlpsVarP, včetně více vybraných funkcí, tabulkových či obrysových polí a měr na řádcích
Každá funkce agreguje původní zdrojové záznamy ve vlastním rozsahu mezisoučtu; její připravená metadata řádku identifikují vybranou funkci nezávisle, se zachováním chování explicitní aktualizace Excelu pro neaditivní výpočty i prázdné či chybové výsledky
Importovaná volba vlastního mezisoučtu vyloučí implicitní automatický mezisoučet, i když v nativním XML chybí defaultSubtotal; kombinovat xlpsDefault s vlastními funkcemi se nesmí a takový dvojznačný typovaný požadavek se před mutací odmítne
Více úrovní sloupcových polí s mezisoučty, nepodporované kompaktní kombinace datové osy, sbalení členů a vlastní titulky zůstávají mimo tento kontrakt nativního výstupu; počítaná pole i položky mají vlastní užší požadavky na SUM a identity členů a surové zachování neznamená podporu přepočtu či materializace funkce
Ukládání, opětovné otevření i opětovná materializace zachovají podporované seskupení, pořadí os i identity mezisoučtů; importované nativní zobrazení i samostatně zkopírované typované mezipaměti byly proti Excelu ověřené při prvním otevření i při explicitní aktualizaci
Nativní výpočty zobrazení
Nastavte ShowDataAs nebo ExtendedShowDataAs každého obyčejného datového pole před voláním MaterializeNativePivotTable; základní a rozšířené režimy zobrazení se vzájemně vylučují
Základní režimy zahrnují rozdíl, procento základní položky, procentní rozdíl, průběžný součet, procento řádku, sloupce či celkového součtu a index; rozšířené režimy zahrnují procenta nadřazeného řádku a sloupce a vybraných nadřazených, kumulativní procenta a vzestupné či sestupné husté ranky
BaseField je index kontingenčního pole od nuly pro porovnání, průběžné součty, procenta vybraných nadřazených i ranky; porovnání používají pozici BaseItem od nuly, nebo xlPivotBaseItemPrevious a xlPivotBaseItemNext pro sousední viditelné členy v účinném pořadí zobrazení
Procenta nadřazeného řádku a sloupce zvolí odpovídající nejvnitřnější pole osy bez použití BaseField; chybějící odpovídající osa nechá tyto výsledky prázdné
Jednoduchá procenta dělí původním agregátem v příslušném rozsahu, včetně neaditivních průměrů; kumulativní procenta sčítají zobrazené agregáty členů a pro nejvnitřnější základní pole použijí původní součet osy, zatímco vnější základní pole použije součet přes své odpovídající zbývající členy, takže průměry můžou přesáhnout 100 procent
Nativní ranky počítají odlišné předcházející agregované hodnoty a porovnání zachovávají chování Excelu pro prázdné hodnoty a chyby u absentujících průniků, chybějících základů, nulových dělitelů i hranic předchozí/následující; jednoduchá procenta berou absentující čitatele jako nulu
Celkové součty používají nativní sémantiku vybraného režimu, včetně prázdných součtů podél porovnávací či průběžné osy; změna režimu zobrazení zachová transakční kontroly vlastnictví, kolizí i rozpočtu sestavy
Ukládání a opětovné otevření zachovají zvolený základní či rozšířený režim i identity základů a připravená nativní metadata podporují explicitní aktualizaci Excelu; obyčejné Make a náhledy bez nativní volby si ponechají stávající výpočetní kontrakt
Dostupnost cross-filter ve Slicerech
property TXLSXSlicerCache.ItemHasData[Index: Integer]: Boolean;
Tento dotaz jen pro čtení vyhodnotí aktuální podporované záznamy mezipaměti mimo OLAP, přičemž ignoruje vlastní výběr tohoto Sliceru a zachová výběry ostatních Slicerů, ruční filtry, predikáty volajícího i příslušné agregující filtry
Dostupnost je sjednocení napříč připojenými zobrazeními; historické členy bez odpovídajících záznamů nemají data, prázdné míry nemají data a neprázdný text, logické hodnoty, nula, chyby a datumové míry se při ověřeném nativním kontraktu jako data počítají
Dotaz používá zámek čtení a oddělený náhled záznamů, zachovává živé handlery i výběr a respektuje FormulaArrayMemoryLimit; selhání zpětného volání, reentrance, neplatné vazby či nepodporovaní agregující počítaní členové vyvolají výjimku, aniž by se potvrdily živé změny
Dotazování dostupnosti neaktualizuje mezipaměti, nepřepočítává vzorce, neprovádí souborové I/O a neaktualizuje serializované nativní příznaky absence dat; nativní stav UI si z této operace jen pro čtení neodvozujte
TlxPivotRecordWriter = procedure(ATable: TXLSPivotTable; ARecordIndex: Integer) of object; function TXLSPivotTable.MakeRecordPreview(AWriter: TlxPivotRecordWriter; AFilterOwner: TObject = nil; AFilter: TlxPivotRecordFilter = nil): Integer;
Pokročilé zpětné volání záznamů dostane oddělený náhled a index záznamu od nuly po podporovaném jednoduchém i agregujícím filtrování; EvaluationSourceTable si zachová identitu původního zobrazení a návratová hodnota je počet emitovaných záznamů
Náhradní filtr substituuje jen zpětné volání zaregistrované dodaným vlastníkem; ostatní vlastníci a externí predikát zůstávají aktivní a nenil náhradní zpětné volání vyžaduje nenil vlastníka
Explicitní čištění historických členů
Removed := Workbook.PurgePivotCacheMissingItems(
Pivot.CacheId, 0);
if Removed < 0 then
raise Exception.Create('The cache member purge was rejected');
TXLSXWorkbook.PurgePivotCacheMissingItems(ACacheId: Integer; ARetainMissingItemsPerField: Integer = 0): Integer odstraní nepoužité členy po kompletní validaci a přemapování podporovaných propojených zobrazení i Slicerů
Vrací celkový počet odstraněných sdílených položek napříč poli, nulu pro úspěšnou operaci bez efektu, nebo -1 s diagnostikou 1402; aktuální záznamy si ponechají každého odkazovaného člena plus nejvýše požadovaný počet nepoužitých členů na pole, vybraných podle největšího původního indexu sdílené položky
Uchovaní členové si ponechají původní relativní pořadí a handlery objektů, zatímco logické indexy se zkomprimují; propojené handlery polí i položek, ruční příznaky skrytí a detailů, aktivní členy stránek či porovnání i výběry Slicerů si zachovají identity
Domanénové příznaky i meze se přepočtou z uchované domény; podporované importované komprimované pozice řádků/sloupců a stránek se přemapují explicitně, zatímco fiktivní odkazy celkového součtu i pořadová čísla pseudopole dat zůstanou beze změny
Podporované jsou obyčejné kompletní lokální mezipaměti listů; seskupené, počítané, pole vlastností členů, OLAP, externí, nekompletní či dvojznačné mezipaměti i nepodporovaná neprůhledná identitní metadata se před mutací odmítnou
Odstranění aktivního člena stránky či porovnání, kompletní vybrané Slicer podmnožiny či dříve neprázdného účinného průniku se odmítne atomicky; odmítnou se i primitivní atributy členů, které by při typované přestavbě ztratily
Známé rozšíření vlastnictví materializace zůstává beze změny, protože jeho souřadnice i typované tokeny hodnot neobsahují indexy členů mezipaměti; nesouvisející neprůhledná rozšíření se za bezpečná nepovažují
Čištění neaktualizuje zdrojová data, nepřepisuje buňky sestavy v listu, nevolá zpětná volání záznamů ani neaplikuje metadata MissingItemsLimit automaticky; aktualizace zůstává pouze přidávající, dokud se tato operace explicitně nevyžádá
Pokročilá koordinace čištění
TXLSPivotCache._PrepareMissingItemPurge vrátí neprůhledný TXLSPivotCachePurgePlan; aplikace by normálně měly používat fasádu sešitu, aby se zahrnulo každé propojené zobrazení i Slicer
MapItem a RemainingItemCount prozkoumají přemapování mezipaměti, StagePivotField zaregistruje propojené pole a vrátí jeho index přípravy a MapViewItemPosition prozkoumá mapování wire pozice toho pole; odstranění členové se mapují na -1 a RemovedCount hlásí celkový počet odstranění
Validate zkontroluje původní schéma, záznamy, vlastnické identity polí i položek a připravené výběry zobrazení; Commit validuje znovu a převede připravené vlastnictví bez alokace a bez zpětných volání po první živé výměně
Plán vlastní oddělené snímky, svou měnitelnou připravenou mezipaměť drží v soukromí a nikdy nevlastní původní objekty mezipaměti ani zobrazení; tyto původní udržujte naživu, dokud Destroy plánu neuvolní přípravu, a každý plán potvrďte jen jednou
Odmítnutá příprava pole se vrátí zpět jen pro tu fázi, takže plán lze znovu použít; nepodporované mutace po přípravě se odmítnou dřív než potvrzení