HotXLS 문서

네이티브 피벗 계산 필드와 캐시 소유 항목

컨텍스트 합계로 계산

로컬 계산 캐시 필드는 네이티브 미리 보기에서 요청된 리프, subtotal, 총합 컨텍스트에 대해 참조된 데이터베이스 필드를 모두 먼저 합한 뒤 수식을 평가합니다. 종속성이 표시된 데이터 필드에 없어도 됩니다

예를 들어 Amount/Units 값이 10/1과 30/9인 두 레코드는 네이티브 계산 필드 결과 40/10 = 4를 만들고, 총합은 표시된 비율을 더하는 대신 자체 종속성 합계를 평가합니다

계산 항목은 다른 행·열 축을 포함한 완전한 리프 컨텍스트마다 멤버 참조를 평가합니다. subtotal과 총합은 그 결과인 멤버 기여를 포함하므로, 비율 항목은 자기 리프 비율들의 합으로 기여할 수 있습니다

수동으로 숨긴 멤버는 다른 계산 항목이 참조하면 계속 쓸 수 있고, 그 멤버 자신의 기여는 표시된 총합 밖으로 남습니다. A=40, B=60일 때 A를 숨겨도 Combined=A+B는 100이 되고 Combined는 보이는 총합에 포함됩니다

계산 필드와 항목이 공존하면 항목 기여가 먼저 참조된 데이터베이스 필드 합계를 갱신하고, 그다음 계산 필드가 갱신된 컨텍스트 합계를 평가합니다

계산 항목은 여러 비그룹화 필드에 속할 수 있습니다. 유지된 캐시 정의 순서가 어떤 필드 수식이 교차점을 마지막에 기록하는지 결정하므로, 정의를 옮기면 그 교차점과 표시된 총합이 모두 바뀔 수 있습니다

해석되지 않은 계산 멤버 종속성은 참조될 때 평가됩니다. 그 순서에서 나중에 정의된 종속성도 포함입니다. 앞선 단계에서 이미 계산된 멤버는 다른 수식이 참조하면 현재 교차점 값을 유지합니다

네이티브 필드 합계는 Boolean과 텍스트 소스 값을 무시하고, 숫자·날짜 값은 유지하며, 타입이 지정된 소스 오류는 전파합니다. lazy한 IF와 IFERROR는 쓰이지 않는 분기를 평가하지 않고 오류를 처리할 수 있습니다

캐시 소유권과 바인딩

공개 선언계약
TXLSPivotCacheCalculatedItem캐시가 소유하는 네이티브 계산 멤버 정의입니다. 소유 캐시를 통해 얻고, 빌려 쓰는 개체를 사용하는 동안 캐시를 살려 두세요
TXLSPivotCacheCalculatedItem.FieldIndex: Integer읽기 전용 0 기반 캐시 필드 식별자입니다
TXLSPivotCacheCalculatedItem.ItemIndex: IntegerFieldIndex 안의 읽기 전용 0 기반 공유 멤버 식별자입니다
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정의 목록에 대한 읽기 전용 0 기반 빌려 쓰기 접근입니다
TXLSPivotCache.ClearCalculatedItems소유한 정의를 해제하고 빌려 쓴 핸들을 무효화합니다. 공유 멤버를 제거하거나 캐시 쿼리 완전성을 확립하지는 않습니다
TXLSPivotCache.MoveCalculatedItem(AIndex, ANewIndex: Integer)네이티브 solve order에서 0 기반 위치 사이로 기존 정의를 옮기며 빌려 쓴 개체 식별을 유지합니다. 잘못된 위치는 정의를 옮기지 않은 채 EArgumentOutOfRangeException을 던집니다
TXLSPivotCache._AddUnsupportedCalculatedItem(const ARawXml: WideString)파서 지향 보존 훅으로, 알 수 없는 XML을 유지하고 캐시 쿼리 모델을 불완전으로 표시합니다
TXLSPivotCache.Assign(Source: TXLSPivotCache)정의, 필드, 공유 멤버, 레코드 인덱스, 날짜 체계 컨텍스트를 깊게 복사합니다. 소스 핸들은 독립적으로 남고 자기 자신에게 대입해도 안전합니다
TXLSPivotTable.BindCalculatedItemsToCache분리된 캐시의 뷰 작성 계산 항목을 검증·바인딩한 뒤 새 공유 멤버와 정의를 살아 있는 캐시에 덧붙입니다. 실패하면 멤버 식별과 정의가 바뀌지 않고 기존 필드·멤버 핸들은 유효하게 남습니다

TXLSPivotField.AddCalculatedItem으로 만든 뷰 작성 항목은 네이티브 구체화나 타입 지정 네이티브 재구성 전에 명시적인 BindCalculatedItemsToCache가 필요합니다. 지원되는 네이티브 캐시 정의를 가져오면 그 소유권이 이미 공급됩니다

캐시 바인딩은 그 캐시를 공유하는 모든 뷰에 영향을 주므로 작성 작업으로 취급하고, 빌려 쓴 핸들은 대응 목록이 지워지거나 대입되거나 파괴될 때까지만 유지하세요

멤버 필터와 표시 변환

계산 항목 필드의 캡션·값 비교는 멤버 수식이 실행된 뒤 표시 멤버를 고릅니다. 필터링된 소스 멤버는 참조된 수식에 계속 쓰이며, 보이는 subtotal과 총합은 그 멤버의 직접 기여를 제외합니다

값 비교는 계산 측정값을 고를 수 있습니다. 각 후보 멤버는 소스 레코드 비율을 더하거나 수식을 캐시 레코드 열로 취급하지 않고 자기 컨텍스트 종속성 합계에서 그 측정값을 평가합니다

계산 항목 결과는 모델링된 ShowDataAs 변환도 지원합니다. 백분율, 인덱스, 차이, 누계, 누계 백분율, 순위가 해당합니다. 숨긴 멤버는 보이는 누계·순위 시퀀스 밖에 남고, 수식 참조는 원래 값을 유지합니다

공개 선언계약
TXLSPivotFilter.DataFieldIsMeasureIndex: BooleanDataField의 식별 도메인을 고릅니다. False는 기존 0 기반 캐시 필드 식별자를 유지하고, True는 0 기반 표시 데이터 측정값 위치를 식별하며 네이티브 iMeasureFld를 가져올 때 설정됩니다
TXLSPivotFilter.SourceOrder: Integer네이티브 filters 요소에서 유지되는 읽기·쓰기 0 기반 전역 순서이며 없으면 기본값 -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;

AUseNativeGrandTotals=True인 MakePreview는 정확한 네이티브 합계와 계산 항목 식별을 포함해 분리된 테이블과 캐시를 사용합니다. 평범한 Make와 기본 MakePreview는 기존 레코드 기반 계산 동작을 유지합니다

GetDataValue는 캐시에 계산 필드나 항목이 있을 때 네이티브 컨텍스트 합계를 쓰고, GETPIVOTDATA도 같은 쿼리 경로를 공유합니다. 어느 작업도 소스 데이터를 새로 고치거나 검사 중인 워크시트 수식을 재계산하거나 보고서 셀에 쓰지 않습니다

공개 선언계약
TXLSPivotCache.Date1904: Boolean독립 네이티브 계산용 읽기·쓰기 소스 날짜 체계 컨텍스트입니다. 기본값 False이며 Classic·XLSX 가져오기, 워크시트 캐시 만들기, XLSX 캐시 복사 때 바인딩됩니다
TXLSPivotDateSystem분리된 네이티브 미리 보기와 쿼리용 타입 지정 날짜 체계 선택입니다
xlpdsCache캐시가 유지한 Date1904 컨텍스트를 바꾸지 않고 사용합니다
xlpds19001900 날짜 체계를 분리된 계산에 투영합니다
xlpds19041904 날짜 체계를 분리된 계산에 투영합니다
TryXLSXMakeNativePivotLayout(...; ADateSystem: TXLSPivotDateSystem = xlpdsCache): Boolean하위 레벨 네이티브 레이아웃 헬퍼는 ResultXml과 Reason 출력 매개변수 뒤에서 같은 분리 날짜 체계 선택을 받습니다
TXLSGetDate1904 = function: Boolean of object현재 소유 통합 문서의 날짜 체계를 읽는 계산기 메타데이터 콜백입니다
TXLSCalculator.OnGetDate1904: TXLSGetDate1904GETPIVOTDATA가 쓰는 선택적 빌려 쓴 콜백입니다. nil이면 캐시 컨텍스트를 쓰고, 통합 문서 평가기와 읽기 전용 뷰는 현재 통합 문서 설정을 공급합니다

독립 호출자는 올바른 캐시 Date1904 컨텍스트나 명시적인 날짜 체계 선택을 공급해야 합니다. 통합 문서가 소유한 네이티브 구체화와 수식 쿼리는 살아 있는 캐시를 바꾸지 않고 현재 통합 문서 설정을 투영합니다

날짜 소스 값은 캐시 안에서 절대 TDateTime 값으로 남고, 네이티브 숫자 수식은 Excel 날짜 시리얼을 씁니다. 1904 체계는 날짜 값마다 1462일을 빼고, 1900 변환은 1900년 3월 이전의 표현 가능 날짜를 처리합니다

저장된 네이티브 출력 소유권은 날짜 체계 컨텍스트를 기록하고 스타일이 적용된 날짜 값을 직렬화된 숫자 페이로드와 비교합니다. 저장, 다시 열기, 통합 문서 날짜 기준 변경은 정당한 소유권을 보존하지만, 바뀐 날짜·Boolean·오류·텍스트 페이로드는 여전히 덮어쓰기를 거부합니다

예산과 지원되지 않는 입력

선택적인 TlxPivotQueryBudget 콜백은 작업 증분과 현재 메모리 추정(제안된 분리 스냅샷과 수식 저장소 포함)을 받습니다. False를 반환하면 EXLSPivotQueryBudget으로 중단되고 콜백 예외는 전파됩니다

레코드 폭과 데이터베이스 멤버 식별은 복제 전에 검사됩니다. 수식 컴파일과 평가는 작업량을 청구하며, 계산은 제한된 문법 깊이, 수식 텍스트, 계산 멤버 도메인, 누산기 저장소를 유지합니다

계산 항목 플래닝은 할당 전에 멤버 도메인·캡션 저장소·필드 플랜의 합을 제한합니다. 네이티브 멤버 평가와 late aggregate-filter 스캔도 고정 한도를 넘는 제안 작업을 스캔 진입 전에 거부하고, 예산 취소는 살아 있는 멤버 마스크를 바꾸지 않습니다

수식 파서는 숫자 상수, 필드 이름, 따옴표 이름, 필드 한정 멤버 이름, 산술·비교, percent, 그리고 ABS, SQRT, POWER, ROUND, MIN, MAX, SUM, IF, IFERROR, AND, OR, PI를 지원합니다. 알 수 없는 함수, 셀 참조, 배열, 언바운드 이름은 추측 값을 공급하는 대신 거부됩니다

네이티브 계산 필드는 SUM 데이터 측정값을 요구하며 행·열·페이지 축이 될 수 없습니다. 계산 항목은 비그룹화 캐시 필드의 유지된 문자열 캡션, 자동 또는 SUM subtotal, SUM 측정값, 지원되는 단일 멤버 영역 식별을 요구합니다

알 수 없는 수식 함수, 0이 아닌 영역 fieldPosition, 알 수 없거나 잘못된 형태의 영역 메타데이터, 모호한 필터 측정값 식별, 서로 동시에 켜지는 기본·확장 표시 변환은 명시적으로 거부됩니다. 이런 제한이 지원되지 않는 정의를 평범한 항목으로 바꾸지는 않습니다

계산 멤버의 late aggregate 필터링은 모델링된 값 비교를 지원합니다. 레거시 count·percentage·sum 필터 변형과 모델링되지 않은 Top n 메타데이터는 지원되는 네이티브 선택 모델을 요구하며, 소스 레코드 비교로 대체하지 않고 거부합니다

가져온 원본 파트는 평범한 왕복 보존을 위해 지원되지 않는 미래 메타데이터를 유지합니다. 로컬 계산, 타입 지정 재구성, 시맨틱 기능 추출에는 사용 가능한 모델이 필요하며, 없는 캐시 레코드를 만들려고 소스 데이터를 새로 고치지 않습니다

시맨틱 피벗 캐시 정의에는 계산 항목 식별·수식, 날짜 체계 컨텍스트, 분리된 제한 페이로드가 포함됩니다. 쓸 수 없는 네이티브 확장은 명시적인 시맨틱 오류로 남습니다