Нативные вычисляемые поля сводной таблицы и элементы во владении кэша
Вычисление из контекстных сумм
Для локального вычисляемого поля кэша нативный предварительный просмотр сначала суммирует каждое упомянутое поле базы в запрошенном конечном контексте (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 object | Callback метаданных калькулятора, читающий текущую систему дат владеющей книги |
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 требуют поддерживаемой нативной модели выбора и отклоняются, а не подменяются сравнениями исходных записей
Импортированные сырые части удерживают неподдерживаемые будущие метаданные для обычного сохранения при переносе туда-обратно; локальное вычисление, типизированная реконструкция и извлечение семантических признаков требуют доступной модели и не обновляют исходные данные ради изготовления недостающих записей кэша
Семантические определения кэша сводных таблиц включают идентичность и формулу вычисляемого элемента, контекст системы дат и отсоединённые ограниченные полезные нагрузки; недоступные нативные расширения остаются явной семантической ошибкой