Native Pivot-uitvoer, cross-filter-query's en ontbrekende leden
Native gegroepeerde werkbladuitvoer
function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable): Integer; function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer;
De bewerking zet zowel het volledige native compacte, tabellaire of outline-rapportraster als zijn locatie-, rowItems-, colItems- en data-as-metadata in staging voordat werkbladwaarden en uitvoereigendom samen worden vastgelegd; het geeft 1 terug bij succes of -1 met een diagnose bij niet-ondersteunde status of een botsing
Ondersteunde niet-lege lokale weergaven behouden actuele filters, exacte cacheledenidentiteiten, gewone hiërarchieën, ondersteunde gegroepeerde domeinen, standaard of aangepaste subtotalen en beide ondersteunde data-assen; het native raster gebruikt oorspronkelijke aggregatiewaarden in plaats van weergegeven gemiddelden of andere niet-additieve resultaten opnieuw te combineren
Bestaande celobjecten en opmaak blijven beschikbaar, terwijl het krimpen of verplaatsen van het rapport alleen onveranderde eerder beheerde waarden wist; bewerkte uitvoer, bronoverlapping, samengevoegde cellen, formules, arrays en andere rapporten worden geweigerd vóór mutatie
Geïmporteerde scalaire uitvoer vereist expliciete overname met AAdoptExisting=True; latere updates gebruiken persistente eigendom per afzonderlijke cel, ook na opslaan en heropenen
De bewerking leest actuele cacherecords en vernieuwt geen brondata of herberekent geen formules; Cache.RefreshOnLoad=False is geldig omdat het werkblad nu echte native resultaten bevat die in staging zijn opgebouwd
Recordfilter-callbacks van de aanroeper doen mee aan de losgemaakte preview maar hebben geen OOXML-representatie; de expliciete native vernieuwing van Excel kan willekeurige callback-beperkingen niet reproduceren, terwijl ondersteunde persistente handmatige en Slicer-filters hun wire-representatie behouden
Ondersteunde SUM-berekende cachevelden en cache-eigen berekende items gebruiken het contexttotaal-contract dat in Native berekende Pivot-velden en cache-eigen items wordt beschreven; aangepaste ledenbijschriften en niet-ondersteunde layoutcombinaties worden expliciet geweigerd, terwijl ondersteunde gegenereerde rauwe layout niet-gerelateerde XML en actuele ledenmaskers behoudt
TryXLSXMakeNativePivotLayout(const Xml: WideString; Table: TXLSPivotTable; AWriter: TlxPivotResultWriter; out ResultXml, Reason: WideString): Boolean is de helper voor gestage layout op lager niveau in lxPivotXml
Zijn writer ontvangt de volledige rapportrechthoek in rij-major-volgorde, inclusief lege cellen, met zero-based offsets vanaf het tabelanker; XML- en rasterpreflight voltooien vóór de eerste callback, maar schrijfacties in eigendom van de aanroeper kunnen niet worden teruggedraaid wanneer een callback een exception geeft
De werkmapfacade levert een losgemaakte capture-writer voor transactionele celupdates; de gecombineerde gestage preview en native Variant-rasters zijn begrensd op 4194304 cellen
Het native previewpad kan native eindtotaaloriëntatie opvragen via de optionele AUseNativeGrandTotals-parameter van TXLSPivotTable.MakePreview; bestaande aanroepen met één writer en layout-writer behouden hun vorige gedrag
Layout en herhaalde labels
Zet Compact en Outline op het rapport en elk rijveld vóór materialisatie; tabellaire velden gebruiken beide vlaggen als False, outline-velden gebruiken Compact=False en Outline=True, en compacte velden gebruiken beide vlaggen als True
property TXLSPivotField.RepeatLabels: Boolean;
RepeatLabels staat standaard op False, kopieert onafhankelijk mee met het veld en leest of schrijft de native x14:pivotField fillDownLabels-extensie; het herhaalt bovenliggende labels in tabellaire en outline-uitvoer en heeft geen effect op een veld waarvan de compact- en outline-vlaggen allebei aan staan
Elk afzonderlijk rijveld krijgt zijn eigen fysieke kolom, terwijl aangrenzende compacte outline-velden een labelkolom delen; meerdere measures op rijen volgen CompactData, en meerdere measures op kolommen behouden onafhankelijke databijschriften en eindtotalen
Standaard tabellaire subtotalen verschijnen onder hun groep; outline-SubtotalTop kiest de positie boven of onder, terwijl measures op rijen aparte aggregaatrijen onder de groep gebruiken en het bijschrift van elke measure behouden
Native gegroepeerde uitvoer laat afwezige rij- en kolomintersecties leeg en behoudt een echte numerieke nul; gewone Make en previews zonder de native optie houden hun vorige gedrag bij lege resultaten aan
Inactieve en measure-velden erven de rapportlayout in gestage native metadata zodat de expliciete vernieuwing van Excel de juiste veld- en databijschriften behoudt; de bewerking behoudt de live veldinstellingen en bestaande eigendomscontroles
Geïmporteerde extensies voor herhaalde labels accepteren namespace-aliassen, inclusief declaraties op het extensie-element zelf; onbekende niet-gerelateerde XML blijft door het native materialisatiepad behouden
Gegroepeerde leden, asvolgorde en aangepaste subtotalen
Native uitvoer ondersteunt volledige numerieke bereikgroepen, datumgroepen en handmatige leedengroepen die worden gerepresenteerd door de bestaande getypeerde groeperingsmetadata van de cache; gegenereerde labels behouden de exacte geïmporteerde GroupItemLabels, inclusief Unicode en gelokaliseerde datumbijschriften
Groepering wordt geëvalueerd op een losgemaakte cache en behoudt daarbij records, gedeelde itemhandles en groepsidentiteiten van de live cache; ongeldige grenzen, nulintervallen, onvolledige domeinen of niet-ondersteunde groepsitem-waardetypes worden geweigerd voordat werkbladuitvoer verandert
De bestaande zero-based TXLSPivotField.Position bepaalt de stabiele native rij- of kolomasvolgorde; gelijke posities behouden de geschreven veldvolgorde, dus nieuw aangemaakte velden met de standaardpositie behouden hun vorige volgorde
Native geïmporteerde Jaar/Maand- en ouder-/handmatige-lid-hiërarchieën behouden hun expliciete asvolgorde, terwijl cacheveldindices, weergaveveldindices en identiteiten van de weergaveberekeningsbasis onveranderd blijven; handmatige groepen volgen de expliciete Pivot-itemvolgorde in plaats van groepslabels of cacheindices te sorteren
Aangepaste rijsubtotalen ondersteunen xlpsSum, xlpsCount, xlpsAverage, xlpsMax, xlpsMin, xlpsProduct, xlpsCountNumbers, xlpsStdDev, xlpsStdDevP, xlpsVar en xlpsVarP, inclusief meerdere gekozen functies, tabellaire of outline-velden en measures op rijen
Elke functie aggregeert de oorspronkelijke bronrecords binnen zijn eigen subtotaalscope; zijn gestage rijmetadata identificeert de gekozen functie onafhankelijk en behoudt daarmee het expliciete vernieuwingsgedrag van Excel voor niet-additieve berekeningen en lege of foutresultaten
Een geïmporteerde aangepaste subtotaalselectie sluit het impliciete automatische subtotaal uit, zelfs wanneer defaultSubtotal ontbreekt in native XML; toepassingen mogen xlpsDefault niet combineren met aangepaste functies, en zo'n dubbelzinnig getypeerd verzoek wordt vóór mutatie geweigerd
Meerdere kolomveldniveaus met subtotalen, niet-ondersteunde compacte data-as-combinaties, ingeklapte leden en aangepaste bijschriften vallen buiten dit native uitvoercontract; berekende velden en items hebben hun eigen nauwere SUM- en ledenidentiteitsvereisten, en rauwe bewaring impliceert geen ondersteuning voor herberekening of materialisatie van een feature
Opslaan, heropenen en opnieuw materialiseren behouden ondersteunde groepering, asvolgorde en subtotaalidentiteiten; geïmporteerde native weergaven en onafhankelijk gekopieerde getypeerde caches zijn ook tegen Excel getest bij zowel het eerste openen als de expliciete vernieuwing
Native weergaveberekeningen
Zet ShowDataAs of ExtendedShowDataAs van elk gewoon dataveld vóór het aanroepen van MaterializeNativePivotTable; basis- en uitgebreide weergavemodi sluiten elkaar uit
Basismodi omvatten verschil, procent van een basisitem, procentverschil, lopend totaal, procent van rij, kolom of eindtotaal, en index; uitgebreide modi omvatten bovenliggende rij, bovenliggende kolom en percentages van geselecteerde ouders, cumulatief percentage en oplopende of aflopende dichte rangnummers
BaseField is de zero-based Pivot-veldindex voor vergelijkingen, lopende totalen, percentages van geselecteerde ouders en rangnummers; vergelijkingen gebruiken de zero-based BaseItem-positie, of xlPivotBaseItemPrevious en xlPivotBaseItemNext voor aangrenzende zichtbare leden in de effectieve weergavevolgorde
Percentages van bovenliggende rij of kolom kiezen het bijbehorende binnenste asveld zonder BaseField te gebruiken; een ontbrekend bijbehorend asveld laat die resultaten leeg
Gewone percentages delen door de oorspronkelijke aggregatie op de relevante scope, inclusief niet-additieve gemiddelden; cumulatieve percentagen sommeren weergegeven ledenaggregaties en gebruiken het oorspronkelijke astotaal voor een binnenste basisveld, terwijl een buitenste basisveld de som over zijn matchende overige leden gebruikt, dus gemiddelden kunnen boven 100 procent uitkomen
Native rangnummers tellen onderscheiden voorafgaande aggregatiewaarden, en vergelijkingen behouden het gedrag van Excel voor lege waarden en fouten bij afwezige intersecties, ontbrekende bases, deling door nul en vorige/volgende grenzen; gewone percentages behandelen een afwezige teller als nul
Eindtotalen gebruiken de native semantiek van de gekozen modus, inclusief lege totalen langs een vergelijkings- of lopende as; het wijzigen van een weergavemodus behoudt de transactionele eigendoms-, botsings- en budgetcontroles van het rapport
Opslaan en heropenen behouden de gekozen basis- of uitgebreide modus en basisidentiteiten, en gestage native metadata ondersteunt een expliciete Excel-vernieuwing; gewone Make en previews zonder de native optie houden hun bestaande berekeningscontract aan
Slicer-cross-filter-beschikbaarheid
property TXLSXSlicerCache.ItemHasData[Index: Integer]: Boolean;
Deze alleen-lezen query evalueert actuele ondersteunde niet-OLAP-cacherecords terwijl hij de eigen selectie van deze Slicer negeert en andere Slicer-selecties, handmatige filters, predicaten van de aanroeper en toepasselijke aggregaatfilters vasthoudt
Beschikbaarheid is de unie over gekoppelde weergaven; historische leden zonder matchende records hebben geen data, lege measures hebben geen data, en niet-lege tekst-, Boolean-, nul-, fout- en datummeasures tellen als data onder het geverifieerde native contract
De query gebruikt een leeslease en losgemaakte recordpreview, behoudt live handles en selectie, en eert FormulaArrayMemoryLimit; callbackfouten, herintrede, ongeldige bindingen of niet-ondersteunde aggregaatberekende leden geven een exception zonder live wijzigingen vast te leggen
Beschikbaarheid opvragen vernieuwt geen caches, herberekent geen formules, voert geen bestands-I/O uit en werkt geen geserialiseerde native no-data-vlaggen bij; toepassingen mogen native UI-status niet afleiden uit deze alleen-lezen bewerking
TlxPivotRecordWriter = procedure(ATable: TXLSPivotTable; ARecordIndex: Integer) of object; function TXLSPivotTable.MakeRecordPreview(AWriter: TlxPivotRecordWriter; AFilterOwner: TObject = nil; AFilter: TlxPivotRecordFilter = nil): Integer;
De geavanceerde record-callback ontvangt de losgemaakte preview en een zero-based recordindex na ondersteunde eenvoudige en aggregaatfiltering; EvaluationSourceTable behoudt de oorspronkelijke weergave-identiteit en de teruggegeven waarde is het aantal uitgezonden records
Een vervangend filter substitueert alleen de geregistreerde callback van de meegegeven eigenaar; andere eigenaren en het externe predicaat blijven actief, en een niet-nil vervangende callback vereist een niet-nil eigenaar
Expliciete opschoning van historische leden
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 verwijdert ongebruikte leden na volledige validatie en hertoewijzing van ondersteunde gekoppelde weergaven en Slicers
Het geeft het totale aantal verwijderde gedeelde items over alle velden terug, nul bij een geslaagde no-op, of -1 met diagnose 1402; actuele records behouden elk gerefereerd lid, plus hooguit het gevraagde aantal ongebruikte leden per veld, gekozen op hoogste oorspronkelijke gedeeld-item-index
Behouden leden houden hun oorspronkelijke relatieve volgorde en objecthandles terwijl logische indices compact worden; gekoppelde veld-/itemhandles, handmatige verborgen- en detailvlaggen, actieve pagina- of vergelijkingsleden en Slicer-selecties behouden hun identiteiten
Domeinvlaggen en grenzen worden herberekend op het behouden domein; ondersteunde geïmporteerde gecomprimeerde rij-/kolom- en paginaposities worden expliciet opnieuw gemapt, terwijl dummy-referenties voor eindtotalen en ordinals van data-pseudovelden onveranderd blijven
Gewone volledige lokale werkbladcaches worden ondersteund; gegroepeerde, berekende, ledenproperty-, OLAP-, externe, onvolledige of dubbelzinnige caches en niet-ondersteunde ondoorzichtige identiteitsmetadata worden geweigerd vóór mutatie
Het verwijderen van een actief pagina- of vergelijkingslid, een volledige geselecteerde Slicer-subset of een eerder niet-lege effectieve intersectie wordt atomair geweigerd; ook primitieve ledenattributen die tijdens getypeerde herbouw verloren zouden gaan, worden geweigerd
De bekende materialisatie-eigendomsextensie blijft onveranderd omdat zijn coördinaten en getypeerde waardetokens geen cacheledenindices bevatten; van niet-gerelateerde ondoorzichtige extensies wordt geen veiligheid aangenomen
Opschoning vernieuwt geen brondata, herschrijft geen werkbladrapportcellen, roept geen record-callbacks aan en past geen MissingItemsLimit-metadata automatisch toe; vernieuwen blijft alleen-toevoegen tenzij deze bewerking expliciet wordt gevraagd
Geavanceerde opschoningscoördinatie
TXLSPivotCache._PrepareMissingItemPurge geeft een ondoorzichtige TXLSPivotCachePurgePlan terug; toepassingen moeten normaal gesproken de werkmapfacade gebruiken zodat elke gekoppelde weergave en Slicer wordt meegenomen
MapItem en RemainingItemCount inspecteren de cachehertoewijzing, StagePivotField registreert een gekoppeld veld en geeft zijn stage-index terug, en MapViewItemPosition inspecteert de wire-positietoewijzing van dat veld; verwijderde leden mappen naar -1 en RemovedCount rapporteert het totale aantal verwijderingen
Validate controleert oorspronkelijk schema, records, eigendomsidentiteiten van velden/items en gestage weergaveselecties; Commit valideert opnieuw en draagt voorbereid eigendom over zonder toewijzing of callbacks na de eerste live uitwisseling
Het plan is eigenaar van losgemaakte snapshots, houdt zijn mutabele gestage cache privé en is nooit eigenaar van originele cache- of weergaveobjecten; houd die originelen in leven totdat de Destroy van het plan de staging vrijgeeft, en commit elk plan slechts één keer
Geweigerde veldstaging draait die fase terug zodat het plan hergebruikt kan worden; niet-ondersteunde mutaties na voorbereiding worden vóór de commit geweigerd