Docs HotXLS

Sortie Pivot native, requêtes cross-filter et membres manquants

Sortie de feuille native en cache

function TXLSXWorkbook.MaterializeNativePivotTable(
  ATable: TXLSPivotTable): Integer;
function TXLSXWorkbook.MaterializeNativePivotTable(
  ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer;

L'opération met en staging la grille de rapport native complète — compacte, tabulaire ou en plan — ainsi que sa localisation, ses rowItems, colItems et métadonnées d'axe de données, avant de valider ensemble les valeurs de feuille et la possession de la sortie ; elle renvoie 1 en cas de succès ou -1 avec un diagnostic pour un état non pris en charge ou une collision

Les vues locales non vides prises en charge conservent les filtres courants, les identités exactes de membres de cache, les hiérarchies ordinaires, les domaines groupés pris en charge, les sous-totaux par défaut ou personnalisés et l'un ou l'autre axe de données pris en charge ; la grille native utilise les valeurs d'agrégats d'origine au lieu de recombiner des moyennes affichées ou d'autres résultats non additifs

Les objets de cellules et le formatage existants restent disponibles, tandis que rétrécir ou déplacer le rapport n'efface que les valeurs précédemment détenues restées inchangées ; une sortie éditée, un chevauchement de source, des fusions, formules, tableaux et autres rapports sont rejetés avant mutation

Une sortie scalaire importée exige une adoption explicite avec AAdoptExisting=True ; les mises à jour ultérieures s'appuient sur la possession persistante cellule par cellule, y compris après enregistrement et réouverture

L'opération lit les enregistrements courants du cache et n'actualise ni les données sources ni les formules ; Cache.RefreshOnLoad=False est valide car la feuille contient désormais de vrais résultats natifs mis en staging

Les callbacks de filtres d'enregistrements de l'appelant participent à la prévisualisation détachée mais n'ont aucune représentation OOXML ; l'actualisation native explicite d'Excel ne peut pas reproduire des restrictions de callback arbitraires, tandis que les filtres manuels et de slicer persistés pris en charge conservent leur représentation filaire

Les champs de cache calculés SUM pris en charge et les éléments calculés détenus par le cache suivent le contrat de sommes de contexte décrit dans Champs Pivot calculés natifs et éléments détenus par le cache ; des légendes de membres personnalisées et des combinaisons de disposition non prises en charge sont rejetées explicitement, tandis que la disposition brute générée prise en charge conserve le XML sans rapport et les masques de membres courants

TryXLSXMakeNativePivotLayout(const Xml: WideString; Table: TXLSPivotTable; AWriter: TlxPivotResultWriter; out ResultXml, Reason: WideString): Boolean est le helper de disposition en staging de plus bas niveau, situé dans lxPivotXml

Son writer reçoit le rectangle de rapport entier dans l'ordre ligne par ligne, cellules vides comprises, avec des offsets en base zéro depuis l'ancre de la table ; le preflight XML et grille s'achève avant le premier callback, mais les écritures détenues par l'appelant ne peuvent pas être annulées si un callback lève

La facade du classeur fournit un writer de capture détaché pour les mises à jour transactionnelles de cellules ; la prévisualisation en staging combinée et les grilles de Variant natifs sont bornées à 4194304 cellules

Le chemin de prévisualisation native peut demander une orientation native des totaux généraux via le paramètre facultatif AUseNativeGrandTotals de TXLSPivotTable.MakePreview ; les appels existants à writer unique et à writer de disposition conservent leur comportement précédent

Disposition et étiquettes répétées

Réglez Compact et Outline sur le rapport et chaque champ de lignes avant la matérialisation ; les champs tabulaires mettent les deux indicateurs à False, les champs en plan utilisent Compact=False et Outline=True, et les champs compacts les deux à True

property TXLSPivotField.RepeatLabels: Boolean;

RepeatLabels vaut False par défaut, se copie indépendamment avec le champ et lit ou écrit l'extension native x14:pivotField fillDownLabels ; il répète les étiquettes ancêtres dans les sorties tabulaire et en plan, et n'a aucun effet sur un champ dont les indicateurs compact et plan sont tous deux activés

Chaque champ de lignes distinct reçoit sa propre colonne physique, tandis que des champs compacts en plan adjacents partagent une colonne d'étiquettes ; plusieurs mesures sur les lignes suivent CompactData, et plusieurs mesures sur les colonnes conservent des légendes de données et des totaux généraux indépendants

Les sous-totaux tabulaires par défaut apparaissent sous leur groupe ; le SubtotalTop en plan choisit la position haute ou basse, tandis que les mesures sur les lignes utilisent des lignes d'agrégats séparées sous le groupe et conservent la légende de chaque mesure

La sortie native en cache laisse vides les intersections de lignes et de colonnes absentes et préserve un vrai zéro numérique ; le Make ordinaire et les prévisualisations sans l'option native gardent leur comportement précédent de résultat vide

Les champs inactifs et de mesures héritent de la disposition du rapport dans les métadonnées natives en staging afin que l'actualisation explicite d'Excel conserve les légendes de champs et de données appropriées ; l'opération préserve les réglages actifs des champs et les vérifications de possession existantes

Les extensions importées d'étiquettes répétées acceptent les alias d'espaces de noms, y compris des déclarations sur l'élément d'extension lui-même ; le XML inconnu sans rapport reste préservé par le chemin de matérialisation native

Membres groupés, ordre des axes et sous-totaux personnalisés

La sortie native accepte les groupes numériques de plages complets, les groupes de dates et les groupes manuels de membres représentés par les métadonnées de regroupement typées existantes du cache ; les étiquettes générées conservent les GroupItemLabels importés exacts, légendes Unicode et de dates localisées comprises

Le regroupement est évalué sur un cache détaché, en préservant les enregistrements du cache actif, les handles d'éléments partagés et les identités de groupes ; bornes invalides, intervalles nuls, domaines incomplets ou types de valeurs d'éléments de groupe non pris en charge sont rejetés avant toute modification de la sortie en feuille

Le TXLSPivotField.Position existant en base zéro détermine l'ordre natif stable des axes de lignes ou de colonnes ; des positions égales conservent l'ordre de création des champs, donc les champs nouvellement créés avec la position par défaut gardent leur ordre précédent

Les hiérarchies importées Année/Mois et parent/membres-manuels natives conservent leur séquence d'axes explicite, tandis que les indices de champs de cache, les indices de champs de vues et les identités de base de calcul d'affichage restent inchangés ; les groupes manuels respectent l'ordre explicite des éléments Pivot au lieu de trier les étiquettes de groupes ou les indices du cache

Les sous-totaux de lignes personnalisés acceptent xlpsSum, xlpsCount, xlpsAverage, xlpsMax, xlpsMin, xlpsProduct, xlpsCountNumbers, xlpsStdDev, xlpsStdDevP, xlpsVar et xlpsVarP, y compris plusieurs fonctions sélectionnées, des champs tabulaires ou en plan et des mesures sur les lignes

Chaque fonction agrège les enregistrements sources d'origine à sa propre portée de sous-total ; ses métadonnées de lignes en staging identifient indépendamment la fonction sélectionnée, préservant le comportement d'actualisation explicite d'Excel pour les calculs non additifs et les résultats vides ou en erreur

Une sélection de sous-totaux personnalisés importée exclut le sous-total automatique implicite même quand defaultSubtotal est absent du XML natif ; les applications ne doivent pas combiner xlpsDefault avec des fonctions personnalisées, et une telle requête typée ambiguë est rejetée avant mutation

Plusieurs niveaux de champs de colonnes avec sous-totaux, les combinaisons compactes d'axe de données non prises en charge, les membres réduits et les légendes personnalisées restent hors de ce contrat de sortie native ; champs et éléments calculés ont leurs propres exigences plus strictes de SUM et d'identité de membres, et la préservation brute n'implique pas la prise en charge du recalcul ou de la matérialisation d'une fonctionnalité

Enregistrer, rouvrir et rematérialiser conservent les regroupements, ordres d'axes et identités de sous-totaux pris en charge ; les vues natives importées et les caches typés copiés indépendamment ont aussi été vérifiés contre Excel, aussi bien à l'ouverture initiale qu'à l'actualisation explicite

Calculs d'affichage natifs

Réglez le ShowDataAs ou ExtendedShowDataAs de chaque champ de données ordinaire avant d'appeler MaterializeNativePivotTable ; les modes d'affichage basiques et étendus s'excluent mutuellement

Les modes basiques incluent différence, pourcentage d'un élément de base, pourcentage de différence, total cumulé, pourcentage de la ligne, de la colonne ou du total général, et index ; les modes étendus incluent pourcentages de la ligne parente, de la colonne parente et de parents sélectionnés, pourcentage cumulé et rangs denses croissants ou décroissants

BaseField est l'indice de champ Pivot en base zéro servant aux comparaisons, totaux cumulés, pourcentages de parents sélectionnés et rangs ; les comparaisons utilisent la position BaseItem en base zéro, ou xlPivotBaseItemPrevious et xlPivotBaseItemNext pour les membres visibles adjacents dans l'ordre d'affichage effectif

Les pourcentages de ligne et de colonne parentes choisissent le champ d'axe le plus interne correspondant sans utiliser BaseField ; un axe correspondant absent laisse ces résultats vides

Les pourcentages simples divisent par l'agrégat d'origine à la portée concernée, moyennes non additives comprises ; les pourcentages cumulés somment les agrégats affichés des membres et utilisent le total d'axe d'origine pour un champ de base le plus interne, tandis qu'un champ de base externe utilise la somme de ses membres restants correspondants, si bien que des moyennes peuvent dépasser 100 pour cent

Les rangs natifs comptent les valeurs d'agrégats précédentes distinctes, et les comparaisons préservent le comportement d'Excel face aux vides et aux erreurs pour les intersections absentes, les bases manquantes, les diviseurs nuls et les bornes précédent/suivant ; les pourcentages simples traitent un numérateur absent comme zéro

Les totaux généraux suivent la sémantique native du mode sélectionné, totaux vides le long d'un axe de comparaison ou de cumul compris ; changer un mode d'affichage conserve les vérifications transactionnelles de possession, de collision et de budget du rapport

L'enregistrement et la réouverture conservent le mode basique ou étendu choisi et les identités de base, et les métadonnées natives en staging acceptent une actualisation explicite d'Excel ; le Make ordinaire et les prévisualisations sans l'option native gardent leur contrat de calcul existant

Disponibilité cross-filter des slicers

property TXLSXSlicerCache.ItemHasData[Index: Integer]: Boolean;

Cette requête en lecture seule évalue les enregistrements de cache non OLAP courants pris en charge en ignorant la propre sélection de ce slicer, tout en conservant les sélections des autres slicers, les filtres manuels, les prédicats de l'appelant et les filtres d'agrégats applicables

La disponibilité est l'union sur les vues connectées ; les membres historiques sans enregistrements correspondants n'ont pas de données, les mesures vides n'ont pas de données, et les mesures texte non vide, Boolean, zéro, erreur et date comptent comme des données selon le contrat natif vérifié

La requête emploie un bail de lecture et une prévisualisation d'enregistrements détachée, préserve les handles actifs et la sélection, et respecte FormulaArrayMemoryLimit ; un échec de callback, une réentrance, des liaisons invalides ou des membres calculés d'agrégats non pris en charge lèvent une exception sans valider les changements actifs

Interroger la disponibilité n'actualise pas les caches, ne recalcule pas les formules, ne fait pas d'I/O fichier et ne met pas à jour les indicateurs natifs sans données sérialisés ; les applications ne doivent pas déduire l'état UI natif de cette opération en lecture seule

TlxPivotRecordWriter = procedure(ATable: TXLSPivotTable;
  ARecordIndex: Integer) of object;
function TXLSPivotTable.MakeRecordPreview(AWriter: TlxPivotRecordWriter;
  AFilterOwner: TObject = nil; AFilter: TlxPivotRecordFilter = nil): Integer;

Le callback avancé d'enregistrements reçoit la prévisualisation détachée et un index d'enregistrement en base zéro après les filtrages simple et d'agrégats pris en charge ; EvaluationSourceTable conserve l'identité de la vue d'origine et la valeur de retour est le nombre d'enregistrements émis

Un filtre de remplacement ne substitue que le callback enregistré du propriétaire fourni ; les autres propriétaires et le prédicat externe restent actifs, et un callback de remplacement non nil exige un propriétaire non nil

Purge explicite des membres historiques

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 supprime les membres inutilisés après validation complète et remappage des vues et slicers liés pris en charge

Il renvoie le nombre total d'éléments partagés supprimés sur tous les champs, zéro pour un no-op réussi, ou -1 avec le diagnostic 1402 ; les enregistrements courants conservent chaque membre référencé, plus au plus le nombre demandé de membres inutilisés par champ, choisis par index d'élément partagé d'origine le plus élevé

Les membres conservés gardent leur ordre relatif d'origine et leurs handles d'objets tandis que les indices logiques se compactent ; les handles de champs/éléments liés, les indicateurs manuels de masquage et de détail, les membres actifs de page ou de comparaison et les sélections de slicers conservent leurs identités

Les indicateurs et bornes de domaine sont recalculés à partir du domaine conservé ; les positions compressées importées de lignes/colonnes et de pages prises en charge sont remappées explicitement, tandis que les références factices des totaux généraux et les ordinaux du pseudo-champ de données restent inchangés

Les caches locaux de feuilles complets ordinaires sont pris en charge ; les caches groupés, calculés, de propriétés de membres, OLAP, externes, incomplets ou ambigus et les métadonnées d'identité opaques non prises en charge sont rejetés avant mutation

Supprimer un membre actif de page ou de comparaison, un sous-ensemble entier de slicer sélectionné ou une intersection effective précédemment non vide est rejeté atomiquement ; les attributs primitifs de membres qui seraient perdus lors d'une reconstruction typée sont aussi rejetés

L'extension de possession de matérialisation connue reste inchangée car ses coordonnées et jetons de valeurs typées ne contiennent aucun indice de membre de cache ; les extensions opaques sans rapport ne sont pas présumées sûres

La purge n'actualise pas les données sources, ne réécrit pas les cellules de rapport de la feuille, n'invoque pas les callbacks d'enregistrements et n'applique pas automatiquement les métadonnées MissingItemsLimit ; l'actualisation reste en ajout-seul tant que cette opération n'est pas explicitement demandée

Coordination avancée de la purge

TXLSPivotCache._PrepareMissingItemPurge renvoie un TXLSPivotCachePurgePlan opaque ; les applications devraient normalement passer par la facade du classeur pour que chaque vue liée et chaque slicer soit inclus

MapItem et RemainingItemCount inspectent le remappage du cache, StagePivotField enregistre un champ lié et renvoie son index de staging, et MapViewItemPosition inspecte le mappage de position filaire de ce champ ; les membres supprimés mappent vers -1 et RemovedCount indique le nombre total de suppressions

Validate vérifie le schéma d'origine, les enregistrements, les identités de possession champs/éléments et les sélections de vues en staging ; Commit revalide puis transfère la possession préparée sans allocation ni callbacks après le premier échange actif

Le plan possède des instantanés détachés, garde privé son cache mutable en staging et ne possède jamais les objets de cache ou de vues d'origine ; gardez ces originaux en vie jusqu'à ce que le Destroy du plan libère le staging, et ne validez chaque plan qu'une seule fois

La mise en staging refusée d'un champ annule cette étape afin que le plan puisse être réutilisé ; les mutations non prises en charge après la préparation sont rejetées avant le commit