Документация HotXLS

Нативные вычисляемые поля сводной таблицы и элементы во владении кэша

Вычисление из контекстных сумм

Для локального вычисляемого поля кэша нативный предварительный просмотр сначала суммирует каждое упомянутое поле базы в запрошенном конечном контексте (leaf), промежуточного или общего итога и лишь затем вычисляет формулу; зависимости могут отсутствовать среди отображаемых полей данных

Например, две записи со значениями Amount/Units 10/1 и 30/9 дают результат нативного вычисляемого поля 40/10 = 4, а общий итог вычисляет собственные суммы зависимостей, а не складывает отображаемые соотношения

Вычисляемые элементы вычисляют ссылки на элементы в каждом полном конечном контексте, включая другие оси строк и столбцов; промежуточные и общие итоги включают полученные вклады элементов, поэтому элемент-соотношение может дать вклад суммой своих конечных соотношений

Вручную скрытый элемент остаётся доступным, когда на него ссылается другой вычисляемый элемент, при этом его собственный вклад не попадает в отображаемые итоги; для A=40 и B=60 скрытие A всё равно даёт Combined=A+B значение 100 и включает Combined в видимый общий итог

Когда вычисляемые поля и элементы сосуществуют, вклады элементов сначала обновляют суммы упомянутых полей базы, а затем вычисляемое поле вычисляет эти обновлённые контекстные суммы

Вычисляемые элементы могут принадлежать нескольким негруппированным полям; сохранённый порядок определений кэша решает, чья формула поля запишет пересечение последним, поэтому перемещение определения может изменить как это пересечение, так и отображаемые итоги

Неразрешённая зависимость вычисляемого элемента вычисляется в момент обращения, включая зависимость, определённую позже по порядку; элемент, уже вычисленный на предыдущем шаге, сохраняет своё текущее значение пересечения, когда на него ссылается другая формула

Нативные суммы полей игнорируют исходные Boolean и текстовые значения, сохраняют числовые и датные значения и пробрасывают типизированные исходные ошибки; ленивые IF и IFERROR могут обработать ошибку, не вычисляя неиспользуемую ветку

Владение кэшем и привязка

Публичное объявлениеКонтракт
TXLSPivotCacheCalculatedItemНативное определение вычисляемого элемента во владении кэша; получайте его через владеющий кэш и держите кэш живым, пока работаете с заимствованным объектом
TXLSPivotCacheCalculatedItem.FieldIndex: IntegerИдентичность поля кэша, только для чтения, с отсчётом от нуля
TXLSPivotCacheCalculatedItem.ItemIndex: IntegerИдентичность общего элемента внутри FieldIndex, только для чтения, с отсчётом от нуля
TXLSPivotCacheCalculatedItem.Formula: WideStringНативная формула элемента, чтение и запись; установка меняет модель, а предварительный просмотр или явная привязка проверяют синтаксис и циклы зависимостей до вычисления
TXLSPivotCacheCalculatedItem.Supported: BooleanДоступность разобранной идентичности области, только для чтения; это не гарантия вычислимости любой комбинации формулы и представления
TXLSPivotCacheCalculatedItem.RawXml: WideStringСохранённый XML неподдерживаемого определения вычисляемого элемента, только для чтения; известные типизированные определения используют пустую строку
TXLSPivotCache.AddCalculatedItem(AFieldIndex, AItemIndex: Integer; const AFormula: WideString): TXLSPivotCacheCalculatedItemСоздаёт поддерживаемое типизированное определение для существующего элемента, отклоняя неверные идентичности, пустую формулу или дублирующуюся целевую идентичность; возвращённый объект принадлежит кэшу
TXLSPivotCache.FindCalculatedItem(AFieldIndex, AItemIndex: Integer): TXLSPivotCacheCalculatedItemВозвращает заимствованное совпавшее определение или nil
TXLSPivotCache.CalculatedItemCount: IntegerКоличество удерживаемых поддерживаемых и неподдерживаемых определений, только для чтения
TXLSPivotCache.CalculatedItems[Index: Integer]: TXLSPivotCacheCalculatedItemЗаимствованный доступ к списку определений, только для чтения, с отсчётом от нуля
TXLSPivotCache.ClearCalculatedItemsОсвобождает собственные определения и инвалидирует заимствованные дескрипторы; не удаляет общие элементы и не делает запрос кэша полным
TXLSPivotCache.MoveCalculatedItem(AIndex, ANewIndex: Integer)Перемещает существующее определение между позициями нативного порядка решения с отсчётом от нуля, сохраняя идентичность заимствованного объекта; неверные позиции вызывают EArgumentOutOfRangeException, не двигая определения
TXLSPivotCache._AddUnsupportedCalculatedItem(const ARawXml: WideString)Хук сохранения для парсера, который удерживает неизвестный XML и помечает модель запросов кэша неполной
TXLSPivotCache.Assign(Source: TXLSPivotCache)Глубоко копирует определения, поля, общие элементы, индексы записей и контекст системы дат; дескрипторы источника остаются независимыми, а присваивание кэша самому себе безопасно
TXLSPivotTable.BindCalculatedItemsToCacheПроверяет и привязывает авторские вычисляемые элементы представления на отсоединённом кэше, затем дописывает новые общие элементы и определения в живой кэш; сбои оставляют идентичности элементов и определения без изменений, а существующие дескрипторы полей и элементов остаются валидными

Элемент, созданный авторским кодом через TXLSPivotField.AddCalculatedItem, нуждается в явном BindCalculatedItemsToCache до нативной материализации или типизированной нативной реконструкции; импорт поддерживаемого нативного определения кэша уже несёт это владение

Привязка к кэшу затрагивает каждое представление, разделяющее этот кэш, поэтому вызывайте её как операцию авторинга и держите заимствованные дескрипторы только до очистки, присваивания или уничтожения соответствующего списка

Фильтры элементов и преобразования отображения

Сравнения подписей и значений на поле вычисляемых элементов выбирают отображаемые элементы после выполнения формул элементов; отфильтрованные исходные элементы остаются доступными упомянутым формулам, а видимые промежуточные и общие итоги исключают прямые вклады этих элементов

Сравнение значений может выбрать вычисляемую меру; каждый элемент-кандидат вычисляет эту меру из своих контекстных сумм зависимостей, а не складывает соотношения исходных записей и не трактует формулу как столбец записи кэша

Результаты вычисляемых элементов также поддерживают смоделированные преобразования ShowDataAs, включая проценты, индекс, разности, нарастающие итоги, проценты нарастающих итогов и ранги; скрытые элементы остаются вне видимых последовательностей нарастающих итогов и рангов, а ссылки формул сохраняют исходные значения

Публичное объявлениеКонтракт
TXLSPivotFilter.DataFieldIsMeasureIndex: BooleanВыбирает домен идентичности DataField; False сохраняет прежнюю идентичность поля кэша с отсчётом от нуля, а True идентифицирует отображаемую позицию меры данных с отсчётом от нуля и выставляется при импорте нативного iMeasureFld
TXLSPivotFilter.SourceOrder: IntegerГлобальный порядок с отсчётом от нуля, чтение и запись, удерживаемый из нативного элемента filters, по умолчанию -1 при отсутствии; локальное вычисление и типизированная запись используют сначала неотрицательный EvalOrder, затем SourceOrder, затем стабильный порядок полей и списков

Типизированная нативная запись преобразует идентичность поля кэша в его отображаемую позицию меры; поле кэша, используемое несколькими мерами данных, требует явной позиции меры, иначе его идентичность агрегации и отображения останется неоднозначной

Excel может сохранять активные фильтры с evalOrder=-1, сохраняя их порядок вычисления через последовательность элемента filters; импорт, клонирование и типизированная реконструкция удерживают эту последовательность, а не трактуют такие фильтры как неактивные

Изменение определения фильтра или его удерживаемой исходной позиции на импортированном сохранённом нативном представлении требует типизированной реконструкции; обычное нативное принятие проверяет идентичность сохранённых фильтров и отклоняет неподдерживаемые правки до записи ячеек отчёта

Предварительный просмотр, запросы и системы дат

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 с AUseNativeGrandTotals=True использует отсоединённые таблицу и кэш, включая точные нативные суммы и идентичности вычисляемых элементов; обычный Make и MakePreview по умолчанию сохраняют прежнее поведение расчёта по записям

GetDataValue использует нативные контекстные суммы, когда в кэше есть вычисляемые поля или элементы, и GETPIVOTDATA разделяет этот путь запроса; ни одна из операций не обновляет исходные данные, не пересчитывает проверяемые формулы листа и не пишет ячейки отчёта

Публичное объявлениеКонтракт
TXLSPivotCache.Date1904: BooleanКонтекст исходной системы дат для автономных нативных вычислений, чтение и запись; по умолчанию False, привязывается при импорте Classic и XLSX, создании кэша листа и копировании кэша XLSX
TXLSPivotDateSystemТипизированный выбор системы дат для отсоединённых нативных предварительных просмотров и запросов
xlpdsCacheИспользовать удерживаемый контекст Date1904 кэша, не меняя его
xlpds1900Спроецировать систему дат 1900 в отсоединённое вычисление
xlpds1904Спроецировать систему дат 1904 в отсоединённое вычисление
TryXLSXMakeNativePivotLayout(...; ADateSystem: TXLSPivotDateSystem = xlpdsCache): BooleanНизкоуровневый хелпер нативной раскладки принимает тот же отсоединённый выбор системы дат после выходных параметров ResultXml и Reason
TXLSGetDate1904 = function: Boolean of objectCallback метаданных калькулятора, читающий текущую систему дат владеющей книги
TXLSCalculator.OnGetDate1904: TXLSGetDate1904Необязательный заимствованный callback, используемый GETPIVOTDATA; nil означает контекст кэша, а вычислители книги и их read-only представления поставляют текущую настройку книги

Автономные вызывающие должны поставлять корректный контекст Date1904 кэша или явный выбор системы дат; принадлежащий книге нативная материализация и запросы формул проецируют текущую настройку книги, не меняя живой кэш

Исходные датные значения остаются абсолютными TDateTime в кэше, тогда как нативные числовые формулы используют серийные даты Excel; система 1904 вычитает 1462 дня на значение даты, а преобразование 1900 обрабатывает представимые даты до марта 1900 года

Владение сохранённым нативным выводом записывает свой контекст системы дат и сверяет оформленные датные значения с их сериализованной числовой полезной нагрузкой; сохранение, повторное открытие или смена датной базы книги сохраняет законное владение, а изменившиеся полезные нагрузки дат, Boolean, ошибок и текста по-прежнему отклоняют перезапись

Бюджеты и неподдерживаемый вход

Необязательный callback TlxPivotQueryBudget получает приращения работы и текущую оценку памяти, включая предлагаемый отсоединённый снимок и хранение формул; False прерывает работу с EXLSPivotQueryBudget, а исключения callback пробрасываются

Ширины записей и идентичности элементов базы проверяются до клонирования; компиляция и вычисление формул списывают работу, а вычисление удерживает ограниченные глубину синтаксиса, текст формулы, домены вычисляемых элементов и хранение аккумуляторов

Планирование вычисляемых элементов ограничивает объединённые домены элементов, хранение подписей и планы полей до выделения памяти; нативное вычисление элементов и поздние сканы агрегатных фильтров также отклоняют предлагаемую работу сверх фиксированных лимитов до входа в эти сканы, а отмена по бюджету оставляет живые маски элементов без изменений

Парсер формул поддерживает числовые константы, имена полей, имена в кавычках, имена элементов с квалификатором поля, арифметику и сравнения, процент, а также ABS, SQRT, POWER, ROUND, MIN, MAX, SUM, IF, IFERROR, AND, OR и PI; неизвестные функции, ссылки на ячейки, массивы и непривязанные имена отклоняются, а не подставляют догадки

Нативные вычисляемые поля требуют мер данных SUM и не могут быть осями строк, столбцов или страниц; вычисляемым элементам нужны удерживаемые строковые подписи в негруппированных полях кэша, автоматические промежуточные итоги или SUM, меры SUM и поддерживаемая идентичность области из одного элемента

Неизвестные функции формул, ненулевой fieldPosition области, неизвестные или искажённые метаданные области, неоднозначные идентичности мер фильтров и одновременно активные базовые и расширенные преобразования отображения отклоняются явно; эти ограничения не превращают неподдерживаемое определение в обычный элемент

Поздняя агрегатная фильтрация вычисляемых элементов поддерживает смоделированные сравнения значений; устаревшие варианты фильтров count, percentage и sum и несмоделированные метаданные Top n требуют поддерживаемой нативной модели выбора и отклоняются, а не подменяются сравнениями исходных записей

Импортированные сырые части удерживают неподдерживаемые будущие метаданные для обычного сохранения при переносе туда-обратно; локальное вычисление, типизированная реконструкция и извлечение семантических признаков требуют доступной модели и не обновляют исходные данные ради изготовления недостающих записей кэша

Семантические определения кэша сводных таблиц включают идентичность и формулу вычисляемого элемента, контекст системы дат и отсоединённые ограниченные полезные нагрузки; недоступные нативные расширения остаются явной семантической ошибкой