トランザクション方式のピボット キャッシュ更新
バージョン 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 はローカル定義名のワークシート コンテキストを供給します。このスコープは同じスペルのワークブック名より優先され、それ以外の場合、解決はワークブック スコープを使い、無関係なローカル名を選びません
定義名には、ワークシート修飾された絶対矩形が 1 つ明示的に含まれている必要があります。引用符付きや Unicode のワークシート名はサポートされます。相対参照、ユニオン、エイリアス、数式、外部参照、曖昧な名前とテーブルの衝突は、変更の前に拒否されます
テーブルにはヘッダー行が必要です。レコードは現在の範囲に従い、実際の集計行を除外します。衝突チェックは集計を含むテーブル全体を保護します。ヘッダーのみのテーブルはゼロ レコードを供給します
物理的な集計行の判定は保存された totalsRowCount に従い、値がない場合はゼロを意味します。集計 UI のヒントだけではデータ行を除去できず、保存時に実際の判定が明示的に書き込まれます
作成した集計行には、ColumnTotalsRowLabels、ColumnTotalsRowFunctions、ColumnTotalsRowFormulas を通じて有効な列集計メタデータとワークシート内容を用意します。TotalsRowShown=True を設定しても集計数式は作られず、セル値の強制変換も行われません
ワークシートの移動はローカル名スコープを保持し、ワークシートの名前変更は対応するローカル参照とピボット ソース コンテキストを更新します。無関係な外部参照と不透明なインポート済みキャッシュ XML は保持されます。定義名の保存では、メモリ上の数式を変えずに、省略可能な先頭の数式等号を取り除きます
ヘッダーは既存のデータベース フィールドと大文字小文字を区別せず名前で一致します。ソース列の並べ替えは論理フィールド インデックスを保持します。重複、改名、欠落、余分なソース フィールドは拒否されます。空のヘッダーは既存の FieldN フォールバックを使います
空のソース セルは、ワークシートのセル コレクションに追加されず空のままです。ヘッダーのみのソースは履歴メンバーを保持したままゼロ レコードを生み出します
安定したメンバーと共有ビュー
既存の共有アイテムはインデックスとオブジェクトの同一性を保ち、新しい型付き値はドメインへ追加されます。ソース メンバーの並べ替え、削除、後日の再追加でも、そのメンバーを既に識別している非表示アイテム、ページ選択、基準アイテム参照、明示的なグループ マッピングは保持されます
1 つのキャッシュを共有するすべてのビューが更新後のレコードを見ます。存在しない履歴メンバーはキャッシュ ドメインに残りますが、それ自体は集計行を作りません。TXLSPivotTable.Make が現在のレコードから結果を組み立てるためです
履歴メンバーは MissingItemsLimit に関係なく保持されます。この更新パスは、欠落メンバーのパージ、保持メンバー上限の強制、選択インデックスの振り直しを行いません
数値、日付、Boolean、テキスト、空白、表現可能なエラー値は、更新と XLSX 保存を通じて型を保持します。共有アイテムの内容フラグと表現可能な境界は、保持されたドメインと新しく追加されたドメインから再計算されます
保存は、既存の順序、非表示フラグ、インポート済みレイアウト拡張を保持しつつ、末尾の小計アイテムの前に更新済みビューのメンバー リストを完成させます。ページ選択は論理キャッシュ メンバーと各ビューに保存された位置の間で対応付けられるため、並べ替えられたメンバー リストでも、再オープン後に同じメンバーを選択します
計算フィールドとグループ化フィールド
計算フィールドはソース列を消費しません。名前、数式、共有アイテムのドメインは利用可能なままで、更新された各レコードはそれらのフィールド用の空プレースホルダーから始まります。Make は対応する計算数式を現在のソース値から評価します
XLSX のキャッシュ レコードはデータベース フィールドだけを保存します。データベース フィールドの間に計算フィールドがあっても、保存と再オープンでソース列の整列は保たれます
ソース フィールドに対する数値・日付のグループ化は新しいメンバーを受け付けられます。明示的な離散グループ化は並べ替えられた既存メンバーを受け付けますが、明示的なマッピングのない新メンバーは拒否し、以前のキャッシュ全体を保持します
バージョン 2.384.94 は、検証済みの基底/親リンクから対応済みの固定派生グループ フィールドを再構築します。自動ドメイン拡張、マッピングされていない離散メンバー、メンバー プロパティ フィールドはトランザクション的に拒否されます。外部ソースと OLAP ソースは引き続きローカル ソース契約の対象外です。詳細は グループ化キャッシュの境界 を参照してください
アトミックな更新とコールバック更新
ソースの検証、読み取り、型変換、レコード割り当て、メンバー検索は、切り離されたステージング データの中で完了します。失敗しても、ライブのフィールド・アイテム ハンドル、レコード、メタデータ、生リプレイ状態、すべての共有ビューは無傷です
成功すると、レコードと検索バッファが置き換わり、生キャッシュのリプレイが無効化され、RefreshedDate が更新され、RefreshOnLoad=False が設定されます。保存では以前の生表現をリプレイする代わりに、更新済みの型付きキャッシュを使います
スタンドアロンや Classic バックエンドのコードも、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);
1 引数のオーバーロードは、キャッシュ内の具体的なローカル矩形を要求します。明示的境界のオーバーロードは、キャッシュの定義名・テーブル ソースの同一性を変えずに、呼び出し側が解決したローカル矩形を読みます。その同一性を正しく解決する責任は呼び出し側に残ります
キャッシュ更新はキャッシュ データを更新します。アプリケーションは独自の結果ライター付き Make や、ガード付きワークシート出力の MaterializePivotTable を呼び出せます。型付きの非 OLAP ピボット スライサー選択 は対応するインポート済みバインディングで利用でき、完全なネイティブ レイアウトは別の作業です