Dokumentacja HotXLS

Natywne wyjście tabel przestawnych, zapytania cross-filter i brakujące elementy

Natywne zapamiętane wyjście arkuszowe

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

Operacja etapuje zarówno pełną natywną siatkę raportu kompaktową, tabelaryczną albo konspektową, jak i jej lokalizację, rowItems, colItems i metadane osi danych przed zatwierdzeniem wartości arkusza i własności wyjścia razem; zwraca 1 po sukcesie albo -1 z diagnostyką przy stanie nieobsługiwanym lub kolizji

Obsługiwane niepuste lokalne widoki zachowują bieżące filtry, dokładne tożsamości elementów pamięci podręcznej, zwykłe hierarchie, obsługiwane pogrupowane dziedziny, domyślne albo niestandardowe sumy częściowe i dowolną obsługiwaną oś danych; natywna siatka korzysta z pierwotnych wartości agregatów zamiast łączyć ponownie wyświetlane średnie albo inne wyniki niedodawalne

Istniejące obiekty komórek i formatowanie pozostają dostępne, podczas gdy kurczenie albo przenoszenie raportu czyści wyłącznie niezmienione wcześniej posiadane wartości; edytowane wyjście, nakładanie źródła, scalenia, formuły, tablice i inne raporty są odrzucane przed mutacją

Zaimportowane skalarne wyjście wymaga jawnego przejęcia z AAdoptExisting=True; kolejne aktualizacje korzystają z utrwalonej własności pojedynczych komórek, łącznie ze stanem po zapisie i ponownym otwarciu

Operacja czyta bieżące rekordy pamięci podręcznej i nie odświeża danych źródłowych ani nie przelicza formuł; Cache.RefreshOnLoad=False jest poprawne, bo arkusz zawiera teraz rzeczywiście etapowane natywne wyniki

Callbacki filtrów rekordów wywołującego uczestniczą w odłączonym podglądzie, ale nie mają reprezentacji OOXML; jawne natywne odświeżenie Excela nie potrafi odtworzyć dowolnych restrykcji callbacków, podczas gdy obsługiwane utrwalone filtry ręczne i Slicerów zachowują reprezentację w formacie zapisu

Obsługiwane obliczeniowe pola pamięci podręcznej SUM i elementy obliczeniowe należące do pamięci podręcznej korzystają z kontraktu sum kontekstowych opisanego w natywnych polach obliczeniowych tabel przestawnych i elementach należących do pamięci podręcznej; niestandardowe podpisy elementów i nieobsługiwane kombinacje układu są odrzucane jawnie, podczas gdy obsługiwany wygenerowany surowy układ zachowuje niepowiązany XML i bieżące maski elementów

TryXLSXMakeNativePivotLayout(const Xml: WideString; Table: TXLSPivotTable; AWriter: TlxPivotResultWriter; out ResultXml, Reason: WideString): Boolean to niżej poziomowy etapowany pomocnik układu w lxPivotXml

Jego pisarz otrzymuje cały prostokąt raportu w kolejności wiersz-główna, łącznie z pustymi komórkami, z offsetami numerowanymi od zera względem kotwicy tabeli; preflight XML i siatki kończy się przed pierwszym callbackiem, ale zapisy należące do wywołującego nie dają się wycofać, gdy callback podniesie wyjątek

Fasada skoroszytu dostarcza odłączony pisarz przechwytujący dla transakcyjnych aktualizacji komórek; połączone etapowany podgląd i natywne siatki Variant są ograniczone do 4194304 komórek

Natywna ścieżka podglądu może zażądać natywnej orientacji sum całkowitych przez opcjonalny parametr AUseNativeGrandTotals TXLSPivotTable.MakePreview; istniejące wywołania jedno-pisarzowe i z pisarzem układu zachowują poprzednie zachowanie

Układ i powtarzane etykiety

Ustaw Compact i Outline na raporcie i każdym polu wierszy przed materializacją; pola tabelaryczne używają obu flag jako False, pola konspektowe używają Compact=False i Outline=True, a pola kompaktowe obu flag jako True

property TXLSPivotField.RepeatLabels: Boolean;

RepeatLabels domyślnie ma wartość False, kopiuje się niezależnie z polem i czyta lub zapisuje natywne rozszerzenie x14:pivotField fillDownLabels; powtarza etykiety przodków w wyjściu tabelarycznym i konspektowym oraz nie działa na polu, którego obie flagi kompaktowa i konspektowa są włączone

Każde osobne pole wierszy otrzymuje własną fizyczną kolumnę, podczas gdy sąsiednie pola kompaktowe konspektu dzielą kolumnę etykiet; wiele miar w wierszach podąża za CompactData, a wiele miar w kolumnach zachowuje niezależne podpisy danych i sumy całkowite

Domyślne tabelaryczne sumy częściowe pojawiają się pod swoją grupą; konspektowe SubtotalTop wybiera lokalizację górną albo dolną, podczas gdy miary w wierszach używają osobnych wierszy agregacji pod grupą i zachowują podpis każdej miary

Natywne zapamiętane wyjście pozostawia nieobecne przecięcia wierszy i kolumn puste i zachowuje rzeczywiste liczbowe zero; zwykłe Make i podglądy bez opcji natywnej zachowują poprzednie zachowanie pustego wyniku

Pola nieaktywne i miary dziedziczą układ raportu w etapowanych metadanych natywnych, więc jawne odświeżenie Excela zachowuje odpowiednie podpisy pól i danych; operacja zachowuje żywe ustawienia pól i istniejące sprawdzenia własności

Zaimportowane rozszerzenia powtarzanych etykiet akceptują aliasy przestrzeni nazw, łącznie z deklaracjami na samym elemencie rozszerzenia; nieznany niepowiązany XML pozostaje zachowany przez ścieżkę natywnej materializacji

Elementy pogrupowane, kolejność osi i niestandardowe sumy częściowe

Natywne wyjście obsługuje pełne liczbowe grupy zakresów, grupy dat i ręczne grupy elementów reprezentowane przez istniejące typowane metadane grupowania pamięci podręcznej; wygenerowane etykiety zachowują dokładne zaimportowane GroupItemLabels, łącznie z Unicode i zlokalizowanymi podpisami dat

Grupowanie jest ewaluowane na odłączonej pamięci podręcznej, zachowując rekordy żywej pamięci podręcznej, uchwyty elementów współdzielonych i tożsamości grup; nieprawidłowe granice, interwały zerowe, niekompletne dziedziny albo nieobsługiwane typy wartości elementów grupy są odrzucane przed zmianą wyjścia arkusza

Istniejące numerowane od zera TXLSPivotField.Position decyduje o stabilnej natywnej kolejności osi wierszy albo kolumn; równe pozycje zachowują autorską kolejność pól, więc nowo utworzone pola z domyślną pozycją zachowują swoje poprzednie uporządkowanie

Natywnie zaimportowane hierarchie Rok/Miesiąc oraz rodzic/element-ręczny zachowują swoją jawną sekwencję osi, podczas gdy indeksy pól pamięci podręcznej, indeksy pól widoku i tożsamości bazy obliczeń wyświetlania pozostają bez zmian; grupy ręczne honorują jawny kolejność elementów tabeli przestawnej zamiast sortować etykiety grup albo indeksy pamięci podręcznej

Niestandardowe sumy częściowe wierszy obsługują xlpsSum, xlpsCount, xlpsAverage, xlpsMax, xlpsMin, xlpsProduct, xlpsCountNumbers, xlpsStdDev, xlpsStdDevP, xlpsVar i xlpsVarP, łącznie z wieloma wybranymi funkcjami, polami tabelarycznymi lub konspektowymi i miarami w wierszach

Każda funkcja agreguje pierwotne rekordy źródłowe we własnym zakresie sumy częściowej; jej etapowane metadane wiersza wskazują wybraną funkcję niezależnie, zachowując zachowanie jawnego odświeżenia Excela dla obliczeń niedodawalnych oraz wyników pustych i błędów

Zaimportowany niestandardowy wybór sumy częściowej wyklucza niejawną sumę częściową automatyczną nawet wtedy, gdy defaultSubtotal nie ma w natywnym XML; aplikacje nie mogą łączyć xlpsDefault z funkcjami niestandardowymi, a takie dwuznaczne typowane żądanie jest odrzucane przed mutacją

Wiele poziomów pól kolumn z sumami częściowymi, nieobsługiwane kompaktowe kombinacje osi danych, zwinięte elementy i niestandardowe podpisy pozostają poza tym natywnym kontraktem wyjścia; pola i elementy obliczeniowe mają własne węższe wymagania SUM i tożsamości elementów, a surowa ochrona nie oznacza obsługi przeliczania ani materializowania funkcji

Zapis, ponowne otwarcie i ponowna materializacja zachowują obsługiwane grupowanie, kolejność osi i tożsamości sum częściowych; zaimportowane natywne widoki i niezależnie skopiowane typowane pamięci podręczne zostały też zweryfikowane względem Excela zarówno przy pierwszym otwarciu, jak i jawnym odświeżeniu

Natywne obliczenia wyświetlania

Ustaw ShowDataAs albo ExtendedShowDataAs każdego zwykłego pola danych przed wywołaniem MaterializeNativePivotTable; tryby podstawowe i rozszerzone wzajemnie się wykluczają

Tryby podstawowe obejmują różnicę, procent elementu bazowego, różnicę procentową, sumę narastającą, procent wiersza, kolumny albo sumy całkowitej oraz indeks; tryby rozszerzone obejmują wiersz nadrzędny, kolumnę nadrzędną i procenty wybranego nadrzędnego, procent skumulowany oraz rangi gęste rosnące albo malejące

BaseField to indeks pola tabeli przestawnej numerowany od zera dla porównań, sum narastających, procentów wybranego nadrzędnego i rang; porównania korzystają z pozycji BaseItem numerowanej od zera albo z xlPivotBaseItemPrevious i xlPivotBaseItemNext dla sąsiednich widocznych elementów w efektywnej kolejności wyświetlania

Procenty wiersza i kolumny nadrzędnej wybierają odpowiadające najbardziej wewnętrzne pole osi bez użycia BaseField; brakująca odpowiadająca oś pozostawia te wyniki puste

Proste procenty dzielą przez pierwotny agregat w odpowiednim zakresie, łącznie z niedodawalnymi średnimi; procenty skumulowane sumują wyświetlane agregaty elementów i korzystają z pierwotnej sumy osi dla najbardziej wewnętrznego pola bazowego, podczas gdy zewnętrzne pole bazowe korzysta z sumy po pasujących pozostałych elementach, więc średnie mogą przekraczać 100 procent

Natywne rangi liczą odrębne poprzedzające wartości agregatów, a porównania zachowują zachowanie pustych i błędów Excela dla nieobecnych przecięć, brakujących baz, zerowych dzielników i granic poprzedni/następny; proste procenty traktują nieobecny licznik jako zero

Sumy całkowite korzystają z natywnej semantyki wybranego trybu, łącznie z pustymi sumami wzdłuż osi porównania albo narastania; zmiana trybu wyświetlania zachowuje transakcyjne sprawdzenia własności, kolizji i budżetu raportu

Zapis i ponowne otwarcie zachowują wybrany tryb podstawowy albo rozszerzony oraz tożsamości baz, a etapowane metadane natywne wspierają jawne odświeżenie Excela; zwykłe Make i podglądy bez opcji natywnej zachowują swój istniejący kontrakt obliczeń

Dostępność cross-filter Slicerów

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

To zapytanie tylko do odczytu ewaluuje bieżące obsługiwane rekordy pamięci podręcznej non-OLAP, ignorując własny wybór tego Slicera i zachowując wybory innych Slicerów, filtry ręczne, predykaty wywołującego i mające zastosowanie filtry agregujące

Dostępność jest unią w poprzek połączonych widoków; elementy historyczne bez pasujących rekordów nie mają danych, puste miary nie mają danych, a niepuste tekstowe, Boolean, zerowe, błędowe i datowe miary liczą się jako dane pod zweryfikowanym kontraktem natywnym

Zapytanie korzysta z dzierżawy odczytu i odłączonego podglądu rekordów, zachowuje żywe uchwyty i wybór oraz honoruje FormulaArrayMemoryLimit; błąd callbacka, ponowne wejście, nieprawidłowe powiązania albo nieobsługiwane obliczeniowe elementy agregujące podnoszą wyjątek bez zatwierdzania żywych zmian

Odpytywanie dostępności nie odświeża pamięci podręcznych, nie przelicza formuł, nie wykonuje I/O plików ani nie aktualizuje zserializowanych natywnych flag braku danych; aplikacje nie powinny wnioskować natywnego stanu UI z tej operacji tylko do odczytu

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

Zaawansowany callback rekordów otrzymuje odłączony podgląd i indeks rekordu numerowany od zera po obsługiwanym filtrowaniu prostym i agregującym; EvaluationSourceTable zachowuje pierwotną tożsamość widoku, a wartość zwracana to liczba wyemitowanych rekordów

Zastępczy filtr podmienia wyłącznie zarejestrowany callback podanego właściciela; inni właściciele i predykat zewnętrzny pozostają aktywni, a nie-nilowy zastępczy callback wymaga nie-nilowego właściciela

Jawne czyszczenie elementów historycznych

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 usuwa nieużywane elementy po pełnej walidacji i przemapowaniu obsługiwanych powiązanych widoków i Slicerów

Zwraca łączną liczbę usuniętych elementów współdzielonych we wszystkich polach, zero dla udanej operacji pustej albo -1 z diagnostyką 1402; bieżące rekordy zachowują każdy referencjonowany element, plus co najwyżej żądaną liczbę nieużywanych elementów na pole, wybieranych po największym pierwotnym indeksie elementu współdzielonego

Zachowane elementy zachowują pierwotną kolejność względną i uchwyty obiektów, podczas gdy logiczne indeksy stają się kompaktowe; powiązane uchwyty pól/elementów, ręczne flagi ukrycia i szczegółów, aktywne elementy stron albo porównań i wybory Slicerów zachowują swoje tożsamości

Flagi i granice dziedziny są przeliczane z zachowanej dziedziny; obsługiwane zaimportowane skompresowane pozycje wierszy/kolumn i stron są jawnie przemapowywane, podczas gdy pozorne odwołania sum całkowitych i porządki pseudopól danych pozostają bez zmian

Obsługiwane są zwykłe kompletne lokalne pamięci podręczne arkusza; pamięci podręczne pogrupowane, obliczeniowe, właściwości elementów, OLAP, zewnętrzne, niekompletne albo dwuznaczne oraz nieobsługiwane nieprzejrzyste metadane tożsamości są odrzucane przed mutacją

Usunięcie aktywnej strony albo elementu porównania, całego wybranego podzbioru Slicera albo wcześniej niepustego efektywnego przecięcia jest odrzucane atomowo; pierwotne atrybuty elementów, które zostałyby utracone przy typowanej przebudowie, też są odrzucane

Znane rozszerzenie własności materializacji pozostaje bez zmian, bo jego współrzędne i tokeny typowanych wartości nie zawierają indeksów elementów pamięci podręcznej; niepowiązane nieprzejrzyste rozszerzenia nie są uznawane za bezpieczne

Czyszczenie nie odświeża danych źródłowych, nie przepisuje komórek raportu arkusza, nie wywołuje callbacków rekordów ani nie stosuje automatycznie metadanych MissingItemsLimit; odświeżanie pozostaje wyłącznie dołączające, dopóki tej operacji nie zażąda się jawnie

Zaawansowana koordynacja czyszczenia

TXLSPivotCache._PrepareMissingItemPurge zwraca nieprzejrzysty TXLSPivotCachePurgePlan; aplikacje powinny normalnie korzystać z fasady skoroszytu, aby każdy powiązany widok i Slicer został uwzględniony

MapItem i RemainingItemCount podglądają przemapowanie pamięci podręcznej, StagePivotField rejestruje powiązane pole i zwraca jego indeks etapu, a MapViewItemPosition podgląda mapowanie pozycji zapisu tego pola; usunięte elementy mapują się na -1, a RemovedCount raportuje łączną liczbę usunięć

Validate sprawdza pierwotny schemat, rekordy, tożsamości własności pól/elementów i etapowane wybory widoków; Commit waliduje ponownie i transferuje przygotowaną własność bez alokacji i callbacków po pierwszej żywej wymianie

Plan posiada odłączone zrzuty, trzyma swoją mutowalną etapowaną pamięć podręczną w prywatności i nigdy nie posiada pierwotnych obiektów pamięci podręcznej ani widoków; trzymaj te pierwotne przy życiu do chwili, gdy Destroy planu zwolni etapowanie, i zatwierdzaj każdy plan tylko raz

Odrzucone etapowanie pola wycofuje ten etap, więc plan można ponownie użyć; nieobsługiwane mutacje po przygotowaniu są odrzucane przed zatwierdzeniem