Native berechnete Pivot-Felder und cache-eigene Elemente
Aus Kontextsummen berechnen
Für ein lokales berechnetes Cache-Feld summiert die native Vorschau zuerst jedes referenzierte Datenbankfeld im angeforderten Leaf-, Teilsummen- oder Gesamtergebnis-Kontext und wertet dann die Formel aus; Abhängigkeiten können in den angezeigten Datenfeldern fehlen
Beispielsweise erzeugen zwei Records mit Amount/Units-Werten von 10/1 und 30/9 ein natives berechnetes Feldergebnis von 40/10 = 4, und ein Gesamtergebnis wertet seine eigenen Abhängigkeitssummen aus, statt angezeigte Quotienten zu addieren
Berechnete Elemente werten Member-Referenzen in jedem vollständigen Leaf-Kontext aus, einschließlich der anderen Zeilen- und Spaltenachsen; Teilsummen und Gesamtergebnisse schließen die daraus entstehenden Member-Beiträge ein, sodass ein Quotientenelement eine Summe seiner Leaf-Quotienten beitragen kann
Ein manuell verstecktes Member bleibt verfügbar, wenn ein anderes berechnetes Element darauf verweist, während sein eigener Beitrag außerhalb der angezeigten Gesamtergebnisse bleibt; für A=40 und B=60 liefert das Verstecken von A weiterhin Combined=A+B den Wert 100 und schließt Combined in das sichtbare Gesamtergebnis ein
Wenn berechnete Felder und Elemente koexistieren, aktualisieren die Elementbeiträge zuerst die Summen ihrer referenzierten Datenbankfelder, dann wertet das berechnete Feld diese aktualisierten Kontextsummen aus
Berechnete Elemente können zu mehreren ungruppierten Feldern gehören; die behaltene Cache-Definitionsreihenfolge bestimmt, welche Feldformel zuletzt an eine Schnittmenge schreibt, sodass das Verschieben einer Definition sowohl diese Schnittmenge als auch die angezeigten Gesamtergebnisse ändern kann
Eine unaufgelöste Abhängigkeit eines berechneten Elements wird beim Referenzieren ausgewertet, einschließlich einer Abhängigkeit, die erst später in dieser Reihenfolge definiert wird; ein in einem früheren Schritt bereits berechnetes Member behält seinen aktuellen Schnittmengenwert, wenn eine andere Formel darauf verweist
Native Feldsummen ignorieren Boolean- und Textquellwerte, behalten numerische und Datumswerte und propagieren typisierte Quellfehler; lazy IF und IFERROR können einen Fehler behandeln, ohne einen ungenutzten Zweig auszuwerten
Cache-Besitz und Bindung
| Öffentliche Deklaration | Kontrakt |
|---|---|
TXLSPivotCacheCalculatedItem | Eine cache-eigene native Definition eines berechneten Members; erhalten Sie sie über den besitzenden Cache und halten Sie den Cache am Leben, solange Sie das geliehene Objekt nutzen |
TXLSPivotCacheCalculatedItem.FieldIndex: Integer | Nur lesende nullbasierte Cache-Feld-Identität |
TXLSPivotCacheCalculatedItem.ItemIndex: Integer | Nur lesende nullbasierte Shared-Member-Identität innerhalb von FieldIndex |
TXLSPivotCacheCalculatedItem.Formula: WideString | Lese-/schreibbare native Member-Formel; das Setzen ändert das Modell, während Vorschau oder explizite Bindung Syntax und Abhängigkeitszyklen vor der Berechnung validiert |
TXLSPivotCacheCalculatedItem.Supported: Boolean | Nur lesende Verfügbarkeit der geparsten Bereichsidentität, keine Garantie, dass jede Formel- oder View-Kombination auswertbar ist |
TXLSPivotCacheCalculatedItem.RawXml: WideString | Nur lesendes erhaltenes XML für eine nicht unterstützte berechnete Elementdefinition; bekannte typisierte Definitionen nutzen einen leeren String |
TXLSPivotCache.AddCalculatedItem(AFieldIndex, AItemIndex: Integer; const AFormula: WideString): TXLSPivotCacheCalculatedItem | Erzeugt eine unterstützte typisierte Definition für ein vorhandenes Member und weist ungültige Identitäten, eine leere Formel oder doppelte Zielidentität zurück; das zurückgegebene Objekt gehört zum Cache |
TXLSPivotCache.FindCalculatedItem(AFieldIndex, AItemIndex: Integer): TXLSPivotCacheCalculatedItem | Liefert die geliehene passende Definition oder nil |
TXLSPivotCache.CalculatedItemCount: Integer | Nur lesende Anzahl der behaltenen unterstützten oder nicht unterstützten Definitionen |
TXLSPivotCache.CalculatedItems[Index: Integer]: TXLSPivotCacheCalculatedItem | Nur lesender nullbasierter geliehener Zugriff auf die Definitionsliste |
TXLSPivotCache.ClearCalculatedItems | Gibt die eigenen Definitionen frei und invalidiert geliehene Handles; es entfernt keine gemeinsamen Member und stellt keine Cache-Abfragevollständigkeit her |
TXLSPivotCache.MoveCalculatedItem(AIndex, ANewIndex: Integer) | Verschiebt eine vorhandene Definition zwischen nullbasierten Positionen in der nativen Solve-Order und behält dabei ihre geliehene Objektidentität; ungültige Positionen lösen EArgumentOutOfRangeException aus, ohne Definitionen zu verschieben |
TXLSPivotCache._AddUnsupportedCalculatedItem(const ARawXml: WideString) | Parser-orientierter Erhaltungshook, der unbekanntes XML behält und das Cache-Abfragemodell als unvollständig markiert |
TXLSPivotCache.Assign(Source: TXLSPivotCache) | Kopiert Definitionen, Felder, gemeinsame Member, Record-Indizes und Datumssystem-Kontext tief; Quellhandles bleiben unabhängig, und das Zuweisen desselben Caches an sich selbst ist sicher |
TXLSPivotTable.BindCalculatedItemsToCache | Validiert und bindet von Views verfasste berechnete Elemente an einen abgekoppelten Cache und hängt dann die neuen gemeinsamen Member und Definitionen an den lebenden Cache an; Fehlschläge lassen Member-Identitäten und Definitionen unverändert, während bestehende Feld- und Member-Handles gültig bleiben |
Ein mit TXLSPivotField.AddCalculatedItem erzeugtes, von einer View verfasstes Element braucht vor nativer Materialisierung oder typisierter nativer Rekonstruktion ein explizites BindCalculatedItemsToCache; das Importieren einer unterstützten nativen Cachedefinition liefert diesen Besitz bereits
Die Cache-Bindung betrifft jede View, die diesen Cache teilt; rufen Sie sie also als Autorenoperation auf und behalten Sie die geliehenen Handles nur, bis die entsprechende Liste geleert, zugewiesen oder zerstört wird
Member-Filter und Anzeigetransformationen
Beschriftungs- und Wertvergleiche auf einem berechneten Elementfeld wählen angezeigte Member aus, nachdem die Member-Formeln gelaufen sind; gefilterte Quellmember bleiben für referenzierte Formeln verfügbar, und sichtbare Teilsummen sowie Gesamtergebnisse schließen die direkten Beiträge dieser Member aus
Ein Wertvergleich kann ein berechnetes Measure wählen; jedes Kandidaten-Member wertet dieses Measure aus seinen Kontextabhängigkeitssummen aus, statt Quellrecord-Quotienten zu addieren oder die Formel als Cache-Record-Spalte zu behandeln
Berechnete Elementergebnisse unterstützen auch die modellierten ShowDataAs-Transformationen, einschließlich Prozentwerten, Index, Differenzen, laufenden Summen, Prozentwerten laufender Summen und Rängen; versteckte Member bleiben außerhalb sichtbarer Laufsummen- und Rangfolgen, während Formelreferenzen ihre ursprünglichen Werte behalten
| Öffentliche Deklaration | Kontrakt |
|---|---|
TXLSPivotFilter.DataFieldIsMeasureIndex: Boolean | Wählt die Identitätsdomäne von DataField; False behält die bestehende nullbasierte Cache-Feld-Identität, während True eine nullbasierte Position eines angezeigten Data-Measure identifiziert und beim Import von nativem iMeasureFld gesetzt wird |
TXLSPivotFilter.SourceOrder: Integer | Lese-/schreibbare nullbasierte globale Reihenfolge, aus dem nativen filters-Element beibehalten, standardmäßig -1 wenn abwesend; lokale Berechnung und typisiertes Schreiben nutzen zuerst nichtnegatives EvalOrder, dann SourceOrder, dann stabile Feld-/Listenreihenfolge |
Typisiertes natives Schreiben konvertiert eine Cache-Feld-Identität in ihre angezeigte Measure-Position; ein Cache-Feld, das von mehreren Data Measures genutzt wird, braucht eine explizite Measure-Position, weil seine Aggregations- und Anzeigeidentität sonst mehrdeutig wäre
Excel kann aktive Filter mit evalOrder=-1 speichern, während es ihre Auswertungsreihenfolge über die filters-Elementfolge erhält; Import, Klonen und typisierte Rekonstruktion behalten diese Folge, statt diese Filter als inaktiv zu behandeln
Das Ändern einer Filterdefinition oder ihrer beibehaltenen Quellposition auf einer importierten, erhaltenen nativen View erfordert typisierte Rekonstruktion; gewöhnliche native Adoption validiert die erhaltene Filteridentität und weist nicht unterstützte Bearbeitungen zurück, bevor Berichtzellen geschrieben werden
Vorschau, Abfragen und Datumssysteme
function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter; ALayoutWriter: TlxPivotLayoutWriter; AUseNativeGrandTotals: Boolean = False; ABudget: TlxPivotQueryBudget = nil; ADateSystem: TXLSPivotDateSystem = xlpdsCache): Integer; function TXLSPivotTable.GetDataValue(const ADataField: WideString; const AConstraints: TXLSPivotDataConstraints; ABudget: TlxPivotQueryBudget; out AValue: Variant; ADateSystem: TXLSPivotDateSystem = xlpdsCache): Boolean;
MakePreview mit AUseNativeGrandTotals=True nutzt eine abgekoppelte Tabelle und einen abgekoppelten Cache, einschließlich exakter nativer Summen und berechneter Elementidentitäten; gewöhnliches Make und Standard-MakePreview behalten ihr bestehendes Record-basiertes Berechnungsverhalten
GetDataValue nutzt native Kontextsummen, wenn der Cache berechnete Felder oder Elemente hat, und GETPIVOTDATA teilt diesen Abfragepfad; keine der beiden Operationen aktualisiert Quelldaten, berechnet inspizierte Arbeitsblattformeln neu oder schreibt Berichtzellen
| Öffentliche Deklaration | Kontrakt |
|---|---|
TXLSPivotCache.Date1904: Boolean | Lese-/schreibbarer Quelldatumssystem-Kontext für eigenständige native Berechnungen; er steht standardmäßig auf False und wird beim Classic- und XLSX-Import, bei der Arbeitsblatt-Cache-Erzeugung und beim XLSX-Cache-Kopieren gebunden |
TXLSPivotDateSystem | Typisierte Datumssystemauswahl für abgekoppelte native Vorschauen und Abfragen |
xlpdsCache | Nutzt den beibehaltenen Date1904-Kontext des Caches, ohne ihn zu ändern |
xlpds1900 | Projiziert das 1900-Datumssystem in die abgekoppelte Berechnung |
xlpds1904 | Projiziert das 1904-Datumssystem in die abgekoppelte Berechnung |
TryXLSXMakeNativePivotLayout(...; ADateSystem: TXLSPivotDateSystem = xlpdsCache): Boolean | Der niedrigere native Layout-Helper akzeptiert dieselbe abgekoppelte Datumssystemauswahl nach seinen ResultXml- und Reason-Ausgabeparametern |
TXLSGetDate1904 = function: Boolean of object | Calculator-Metadaten-Callback, der das aktuelle Datumssystem der besitzenden Arbeitsmappe liest |
TXLSCalculator.OnGetDate1904: TXLSGetDate1904 | Optionaler geliehener Callback, den GETPIVOTDATA nutzt; nil nutzt den Cache-Kontext, während Arbeitsmappenauswerter und ihre Nur-Lese-Views die aktuelle Arbeitsmappeneinstellung liefern |
Eigenständige Aufrufer müssen den korrekten Date1904-Kontext des Caches oder eine explizite Datumssystemauswahl liefern; arbeitsmappeneigene native Materialisierung und Formelabfragen projizieren die aktuelle Arbeitsmappeneinstellung, ohne den lebenden Cache zu ändern
Datumquellwerte bleiben absolute TDateTime-Werte im Cache, während native numerische Formeln Excel-Datumsserienwerte nutzen; das 1904-System subtrahiert 1462 Tage pro Datumswert, und die 1900-Konvertierung behandelt die darstellbaren Daten vor März 1900
Der Besitz gespeicherter nativer Ausgabe zeichnet seinen Datumssystem-Kontext auf und vergleicht stilisierte Datumswerte gegen ihre serialisierte numerische Payload; Speichern, Neuöffnen oder Ändern der Arbeitsmappen-Datumsbasis erhält legitimen Besitz, während geänderte Datum-, Boolean-, Fehler- und Textpayloads weiterhin eine Überschreibung zurückweisen
Budgets und nicht unterstützte Eingaben
Der optionale TlxPivotQueryBudget-Callback erhält Arbeitsinkremente und eine aktuelle Speicherschätzung, einschließlich des vorgeschlagenen abgekoppelten Snapshots und der Formelspeicherung; False bricht mit EXLSPivotQueryBudget ab, und Callback-Exceptions propagieren
Record-Breiten und Datenbankmember-Identitäten werden vor dem Klonen geprüft; Formelkompilierung und -auswertung belasten das Arbeitsbudget, und die Berechnung behält begrenzte Syntaxtiefe, Formeltext, berechnete Member-Domänen und Akkumulator-Speicherung
Die Planung berechneter Elemente begrenzt die kombinierten Member-Domänen, Beschriftungsspeicher und Feldpläne vor der Allokation; native Member-Auswertung und späte Aggregatfilter-Scans weisen ebenfalls vorgeschlagene Arbeit über ihre festen Limits hinaus zurück, bevor sie in diese Scans eintreten, und eine Budget-Abbruch lässt lebende Member-Masken unverändert
Der Formelparser unterstützt numerische Konstanten, Feldnamen, gequotete Namen, feldqualifizierte Member-Namen, Arithmetik und Vergleiche, Prozent sowie ABS, SQRT, POWER, ROUND, MIN, MAX, SUM, IF, IFERROR, AND, OR und PI; unbekannte Funktionen, Zellreferenzen, Arrays und ungebundene Namen weisen zurück, statt geratene Werte zu liefern
Native berechnete Felder erfordern SUM-Data-Measures und können keine Zeilen-, Spalten- oder Seitenachsen sein; berechnete Elemente erfordern behaltene String-Beschriftungen in ungruppierten Cache-Feldern, automatische oder SUM-Teilsummen, SUM-Measures und die unterstützte Single-Member-Bereichsidentität
Unbekannte Formelfunktionen, nonzero area fieldPosition, unbekannte oder missgebildete Bereichsmetadaten, mehrdeutige Filter-Measure-Identitäten und gleichzeitig aktive basische und erweiterte Anzeigetransformationen weisen explizit zurück; diese Beschränkungen machen aus einer nicht unterstützten Definition kein gewöhnliches Element
Späte Aggregatfilterung berechneter Member unterstützt modellierte Wertvergleiche; Legacy-Varianten für count-, percentage- und sum-Filter sowie nicht modellierte Top-n-Metadaten erfordern ein unterstütztes natives Auswahlmodell und weisen zurück, statt Quellrecord-Vergleiche zu substituieren
Importierte Roh-Teile behalten nicht unterstützte Future-Metadaten für gewöhnliche Roundtrip-Erhaltung; lokale Berechnung, typisierte Rekonstruktion und semantische Feature-Extraktion erfordern ein verfügbares Modell und aktualisieren keine Quelldaten, um fehlende Cache-Records zu fabrizieren
Semantische Pivot-Cachedefinitionen umfassen berechnete Elementidentität und Formel, Datumssystem-Kontext und abgekoppelte begrenzte Payloads; nicht verfügbare native Erweiterungen bleiben ein expliziter semantischer Fehler