non-OLAP 피벗 Slicer 선택
버전 2.384.88은 평범한 로컬 캐시 필드와 연결된 피벗 테이블 뷰에 바인딩할 수 있는 가져온 non-OLAP 피벗 Slicer 캐시에 타입이 지정된 멤버 선택을 추가합니다
선택 검사와 변경
SlicerCache := Workbook.SlicerCaches.FindByName('SlicerCategory');
if (SlicerCache = nil) or not SlicerCache.IsNonOlapPivot then
raise Exception.Create('A non-OLAP Pivot Slicer cache is required');
if SlicerCache.SetSelectedItems([1]) <> 1 then
raise Exception.Create('Slicer selection could not be changed');
TXLSXSlicerCache.IsNonOlapPivot는 표 형식 피벗 모양을 식별합니다. TXLSXSlicerCache.ItemCount, TXLSXSlicerCache.ItemCacheIndex, TXLSXSlicerCache.ItemSelected는 파싱된 멤버 목록과 선택을 노출합니다
멤버 목록 위치는 0 기반입니다. 각 ItemCacheIndex는 바인딩된 피벗 캐시 필드의 공유 멤버를 식별하므로, 표시 텍스트가 같아도 숫자, 텍스트, Boolean, 날짜, 빈 값, 오류 멤버는 별개의 식별을 유지합니다
TXLSXSlicerCacheItem은 CacheItemIndex: Integer와 Selected: Boolean을 저장하고, TXLSXSlicerCacheItems는 그 동적 배열 타입입니다. 캐시는 읽기 전용 인덱스 프로퍼티로 선택을 노출합니다
TXLSXSlicerCache.SetSelectedItems는 공유 멤버 인덱스를 받아 성공 시 1, 지원되지 않거나 잘못되었거나 안전하지 않은 바인딩이면 -1을 반환합니다. 파일 형식이 선택된 멤버를 하나 이상 요구하므로 빈 선택은 거부됩니다
TXLSXSlicerCache.ClearSelection은 같은 상태 규약을 반환하며 모든 멤버를 선택합니다. 다른 필드의 독립적인 제한은 그대로 두면서 이 Slicer 제약만 제거합니다
공유 뷰와 기존 필터
하나의 Slicer 캐시 안에서 선택된 멤버는 합집합을 이룹니다. 명시적으로 연결된 각 뷰에는 적용 가능한 Slicer 캐시들이 교차하며, 선택된 필드가 그 뷰의 표시 축에 없을 때도 마찬가지입니다. 하나의 캐시에 대한 여러 UI Slicer 뷰는 같은 선택을 공유합니다
현재 결과를 계산하려면 애플리케이션의 결과 writer로 TXLSPivotTable.Make를 호출하세요. 캐시 선택 변경은 워크시트 셀을 다시 쓰거나 가져온 모든 네이티브 레이아웃을 다시 만들지 않습니다
Excel은 non-OLAP Slicer 선택을 평범한 피벗 멤버 숨김과 페이지 선택으로 저장합니다. 형식은 개별 숨김 플래그를 만든 작업이 무엇이었는지 기록하지 않습니다
가져온 바인딩을 수정하기 전에 HotXLS는 이전 같은 필드 숨김·페이지 마스크가 유효한 이전 Slicer 선택과 일치하는지 검증합니다. 일치하는 마스크는 Slicer가 관리하는 것으로 취급되고, 일관성이 없거나 모호한 마스크는 추측 없이 거부됩니다. 무관한 필드의 수동·페이지·고급 필터는 활성 상태로 남습니다
저장과 소스 새로 고침
저장은 Slicer 선택과 연결된 피벗 멤버 마스크를 함께 갱신하고, 가져온 XML 네임스페이스와 알 수 없는 확장을 유지하며, 시트 연결을 저장된 식별로 재매핑합니다. 확장 Slicer 캐시 식별자는 평범한 통합 문서 피벗 캐시 식별자와 구별됩니다
로컬 피벗 캐시 새로 고침은 선택된 공유 멤버 인덱스를 유지합니다. 명시적인 부분집합은 새 멤버를 제외하고, 지운 선택은 새로 고친 도메인 전체를 허용합니다
경계와 실패 동작
선택 변경은 커밋 전에 연결된 모든 뷰와 멤버를 검증하고 통합 문서 변경 가드를 사용합니다. 실패해도 기존 선택, 뷰 제한, 원본 XML은 보존됩니다
Slicer 캐시 추가·삭제·지우기도 통합 문서 쓰기 가드를 사용합니다. 고정된 통합 문서 뷰는 컬렉션 변경으로 연결된 피벗 결과를 바꿀 수 없습니다
바인딩된 non-OLAP 피벗 캐시의 삭제나 그런 캐시를 담은 컬렉션 지우기는 변경 전에 거부됩니다. 명시적인 RemoveSlicerCache 수명 주기 작업은 네이티브 뷰를 제거하면서 선택을 지우거나 평범한 피벗 마스크로 넘깁니다
OLAP·테이블 캐시 선택, 그룹화·계산 소스 필드, 없는 연결, 일관성 없는 도메인, 모호한 가져온 같은 필드 마스크는 이 작업의 범위 밖입니다. 지원되지 않는 캐시 내용은 원래 표현을 유지합니다
이 선택 API는 가져오고 지원되는 작성 피벗 Slicer 캐시를 다룹니다. 공유 뷰 작성과 명시적 캐시 제거는 2.384.94에서 사용할 수 있고, 안전한 워크시트 구체화는 지원되는 계산 출력을 교체할 수 있으며, 크로스 필터 데이터 없음 표시 평가는 별도의 작업으로 남습니다
바인딩된 non-OLAP 캐시의 마지막 UI 뷰 삭제는 그 드로잉, 뷰, 캐시를 바꾸기 전에 거부됩니다. 여러 UI 뷰 중 하나의 삭제는 공유 캐시와 선택을 유지합니다
워크시트의 Slicer 뷰 지우기는 뷰를 하나라도 제거하기 전에 영향을 받는 모든 캐시를 검사합니다. 마지막 바인딩 뷰는 원자적으로 거부되고, 다른 워크시트와 공유된 뷰는 캐시와 선택을 유지합니다
추가 레코드 필터
TlxPivotRecordFilter = function(ATable: TXLSPivotTable; ARecordIndex: Integer): Boolean of object; procedure TXLSPivotTable.SetRecordFilter(AOwner: TObject; AFilter: TlxPivotRecordFilter); procedure TXLSPivotTable.ClearRecordFilter(AOwner: TObject); property TXLSPivotTable.ExternalRecordFilter: TlxPivotRecordFilter;
TXLSPivotTable.SetRecordFilter는 nil이 아닌 소유자당 콜백 하나를 등록하거나 교체하고, TXLSPivotTable.ClearRecordFilter는 그 소유자의 콜백을 제거합니다. SetRecordFilter에 nil 콜백을 넘겨도 제거됩니다
등록된 콜백과 선택적인 TXLSPivotTable.ExternalRecordFilter는 테이블 자체 필터와 집계 전에 교차합니다. 통합 문서는 자기 Slicer 콜백을 독립적으로 등록하므로 호출자 술어를 덮어쓰지 않습니다
콜백은 0 기반 레코드 인덱스를 받고, Make 호출마다 스냅샷이 찍히며, AssignPivotOnly가 직렬화하거나 복사하지 않습니다. 소유자와 콜백 대상은 호출자 소유로 남아 등록 기간보다 오래 살아 있어야 합니다