HotXLS 文件

非 OLAP 樞紐分析交叉分析篩選器選取

版本 2.384.88 為已匯入、可綁定到普通本機快取欄位與其連接樞紐分析表檢視的非 OLAP 樞紐分析交叉分析篩選器快取,加入具型別的成員選取

檢視與變更選取

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 公開解析後的成員清單與選取

成員清單位置以零為基底;每個 ItemCacheIndex 識別綁定樞紐快取欄位中的一個共用成員,因此數值、文字、布林、日期、空白與錯誤成員即使顯示文字相同,也保有相異身分

TXLSXSlicerCacheItem 儲存 CacheItemIndex: Integer 與 Selected: Boolean;TXLSXSlicerCacheItems 是其動態陣列型別,而快取透過唯讀索引屬性公開選取

TXLSXSlicerCache.SetSelectedItems 接受共用成員索引,成功回傳 1,不受支援、無效或不安全的繫結回傳 -1;空選取會被拒,因為檔案格式要求至少選取一個成員

TXLSXSlicerCache.ClearSelection 回傳相同的狀態慣例,並選取所有成員;它移除這條交叉分析篩選器限制,同時保留其他欄位上的獨立限制

共用檢視與既有篩選

同一個交叉分析篩選器快取內被選取的成員形成聯集;適用的交叉分析篩選器快取對每個明確連接的檢視取交集,即使被選欄位不在該檢視的顯示軸上也一樣;同一快取的多個 UI 交叉分析篩選器檢視共用同一份選取

用應用程式的結果寫入器呼叫 TXLSPivotTable.Make 來計算當前結果;快取選取變更不會改寫工作表儲存格,也不會重新產生每個已匯入的原生版面

Excel 把非 OLAP 交叉分析篩選器選取存成普通的樞紐成員隱藏與頁面選取;格式並未記錄每個隱藏旗標是由哪個操作產生

修改已匯入的繫結之前,HotXLS 會驗證其舊的同欄位隱藏與頁面遮罩是否符合舊的交叉分析篩選器有效選取;相符的遮罩視為交叉分析篩選器管理,不一致或有歧義的遮罩在不猜測的前提下拒絕;無關欄位的手動、頁面與進階篩選仍然有效

儲存與來源重新整理

儲存會一起更新交叉分析篩選器選取與連接的樞紐成員遮罩,保留已匯入的 XML 命名空間與未知擴充,並把工作表連接重新映射到其已儲存的識別;延伸的交叉分析篩選器快取識別與普通的活頁簿樞紐快取識別保持相異

本機樞紐分析快取重新整理保留被選取的共用成員索引;明確子集排除新成員,已清除的選取則允許完整的重新整理後定義域

邊界與失敗行為

選取變更會在提交前驗證所有連接的檢視與成員,並使用活頁簿的修改防護;失敗時保留既有選取、檢視限制與原始 XML

新增、刪除與清空交叉分析篩選器快取同樣使用活頁簿的寫入防護;凍結的活頁簿檢視無法透過集合修改改變連接的樞紐結果

刪除綁定的非 OLAP 樞紐快取,或清空包含它的集合,都會在修改前被拒;明確的 RemoveSlicerCache 生命週期操作會移除其原生檢視,並清除其選取或把選取轉移成普通樞紐遮罩

OLAP 與資料表快取選取、分組或計算的來源欄位、缺失的連接、不一致的定義域,以及有歧義的已匯入同欄位遮罩,都在這個操作之外;不受支援的快取內容保留其原始表示

這個選取 API 處理已匯入與受支援的撰寫樞紐交叉分析篩選器快取;共用檢視撰寫與明確的快取移除在 2.384.94 可用;安全的工作表具體化可以替換受支援的計算輸出,交叉篩選的無資料顯示評估則仍是另外的工作

刪除綁定非 OLAP 快取的最後一個 UI 檢視,會在其繪圖、檢視或快取被改動之前被拒;刪除多個 UI 檢視中的一個,則保留其共用快取與選取

清空工作表的交叉分析篩選器檢視時,會先檢查每個受影響的快取再移除任何檢視;最後一個綁定檢視會導致原子性拒絕,與其他工作表共用的檢視則保留其快取與選取

其他記錄篩選

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 移除該擁有者的回呼;把 nil 回呼傳給 SetRecordFilter 同樣會移除

已註冊的回呼與選用的 TXLSPivotTable.ExternalRecordFilter 在資料表自身的篩選與彙總之前取交集;活頁簿獨立註冊其交叉分析篩選器回呼,因此不會覆蓋呼叫端的述詞

回呼收到以零為基底的記錄索引,每次 Make 呼叫都做快照,且不被序列化或被 AssignPivotOnly 複製;擁有者與回呼目標仍由呼叫端持有,存活時間必須長於其註冊期間