交易式樞紐分析快取重新整理
版本 2.384.92 重新整理本機矩形、定義名稱與資料表的樞紐分析來源,且不更動既有的欄位物件、共用項目物件或邏輯成員索引;共用這個快取的所有樞紐分析表檢視,繼續參照相同的成員
活頁簿重新整理
Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
TXLSXWorkbook.RefreshPivotCache 在成功重新整理後回傳 1,快取、來源、結構描述或來源值無法重新整理時回傳 -1;它讀取的是目前的儲存格值,因此來源公式需要評估時,請先重新計算活頁簿
矩形來源使用既有的本機工作表與一個標題列;SourceFirstRow、SourceFirstCol、SourceLastRow 與 SourceLastCol 使用含端的 1 為基底座標,第一列提供欄位名稱
定義名稱與資料表來源
SourceIsNamedRange=True 時,SourceName 識別一個定義名稱,或唯一的資料表名稱或顯示名稱;重新整理與具體化每次呼叫都會解析其當下的幾何,同時保留儲存在快取中的來源身分
SourceRangeSheet 為本機定義名稱提供工作表內容;該範圍優先於同拼寫的活頁簿名稱,否則解析會使用活頁簿範圍,而不會挑到不相關的本機名稱
定義名稱必須包含一個明確以工作表限定的絕對矩形;支援加引號與 Unicode 的工作表名稱,相對參照、聯集、別名、公式、外部參照以及名稱或資料表的重複衝突,都會在修改前被拒絕
資料表必須保留標題列;記錄跟隨其當下的範圍,並排除實際的總計列,而衝突檢查保護整張資料表,包括其總計;只有標題的資料表提供零筆記錄
實體總計成員資格跟隨儲存的 totalsRowCount,缺少該值即視為零;只有總計 UI 提示並不會移除資料列,儲存時會明確寫出實際的成員資格
對撰寫出來的總計列,請透過 ColumnTotalsRowLabels、ColumnTotalsRowFunctions 與 ColumnTotalsRowFormulas 提供有效的欄位總計中繼資料與工作表內容;設定 TotalsRowShown=True 並不會建立總計公式,也不會強制轉型儲存格值
工作表搬移保留本機名稱範圍,工作表重新命名會更新受支援的本機參照與樞紐來源內容,同時保留無關的外部參照與不透明的已匯入快取 XML;定義名稱儲存會移除選用的前置公式等號,但不改變記憶體中的公式
標題以名稱比對既有資料庫欄位,不分大小寫;重新排序來源欄位會保留邏輯欄位索引,重複、改名、缺失或多出來的來源欄位則被拒絕;空白標題使用既有的 FieldN 後備名稱
空白的來源儲存格保持空白,不會被加進工作表的儲存格集合;只有標題的來源產生零筆記錄,同時保留歷史成員
穩定成員與共用檢視
既有的共用項目保留其索引與物件身分,新的具型別值會附加到定義域;重新排序、移除與稍後重新引入來源成員時,已識別那些成員的隱藏項目、頁面選取、基準項目參照與明確群組映射都會保留
共用同一個快取的所有檢視都看得到重新整理後的記錄;缺席的歷史成員仍留在快取定義域中,但不會自行產生彙總列,因為 TXLSPivotTable.Make 是從當前記錄建構結果
歷史成員的保留不受 MissingItemsLimit 影響;這條重新整理路徑不會清除缺漏成員、不強制保留成員上限,也不會重新編號選取索引
數值、日期、布林、文字、空白與可表達的錯誤值在重新整理與 XLSX 儲存的過程中保留其型別;共用項目的內容旗標與可表達邊界會從保留與新附加的定義域重新計算
儲存會在尾端小計項目之前補齊重新整理後的檢視成員清單,同時保留既有順序、隱藏旗標與已匯入的版面擴充;頁面選取在邏輯快取成員與各檢視儲存的位置之間映射,因此成員清單重新排序後,重新開啟仍會選到同一個成員
計算欄位與群組欄位
計算欄位不消耗來源欄位;其名稱、公式與共用項目定義域仍然可用,而每筆重新整理後的記錄會為這些欄位保留空的預留位置;Make 從當前來源值評估受支援的計算公式
XLSX 快取記錄只儲存資料庫欄位;即使計算欄位穿插在資料庫欄位之間,儲存與重新開啟仍保留來源欄位的對齊
來源欄位上的數值與日期群組可以接受新成員;明確的離散群組接受重新排序的既有成員,但拒絕沒有明確映射的新成員,並保留整個先前的快取
版本 2.384.94 從驗證過的基底/父系連結重建受支援的固定衍生群組欄位;自動定義域擴充、未映射的離散成員與成員屬性欄位會以交易方式拒絕,外部與 OLAP 來源仍在本地來源契約之外;詳見群組快取邊界
原子更新與回呼重新整理
來源驗證、讀取、型別轉換、記錄配置與成員查詢都在分離的暫存資料中完成;失敗時現用的欄位與項目控制代碼、記錄、中繼資料、原始重播狀態與所有共用檢視都保持完好
成功時會替換記錄與查詢緩衝、停用原始快取重播、更新 RefreshedDate,並設 RefreshOnLoad=False;儲存使用重新整理後的具型別快取,而不是重播先前的原始表示
獨立程式或以傳統為後盾的程式碼可透過 TXLSPivotCache.RefreshFromSource 使用同一套暫存實作;其讀取器收到 1 為基底的來源座標並回傳 Variant,驗證或讀取器失敗會擲出例外
TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue); procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue; AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);
單引數多載要求快取中有一個具體的本機矩形;明確邊界的多載讀取由呼叫端解析的本機矩形,不改變快取的具名或資料表來源身分,解析正確的責任仍在呼叫端
快取重新整理只更新快取資料;應用程式可以用自己的結果寫入器呼叫 Make,或用 MaterializePivotTable 做有防護的工作表輸出;受支援的已匯入繫結可使用具型別的非 OLAP 樞紐分析交叉分析篩選器選取,完整的原生版面則是另外的工作