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 はバインドされたピボット キャッシュ フィールドの共有メンバーを識別するため、数値、テキスト、Boolean、日付、空白、エラーのメンバーは、表示テキストが同じでも個別の同一性を保ちます

TXLSXSlicerCacheItem は CacheItemIndex: Integer と Selected: Boolean を保持します。TXLSXSlicerCacheItems はその動的配列型で、キャッシュは読み取り専用のインデックス付きプロパティで選択を公開します

TXLSXSlicerCache.SetSelectedItems は共有メンバー インデックスを受け取り、成功で 1、未対応・無効・安全でないバインディングでは -1 を返します。ファイル形式が最低 1 つの選択メンバーを要求するため、空の選択は拒否されます

TXLSXSlicerCache.ClearSelection は同じステータス規約で戻り、すべてのメンバーを選択します。このスライサー制限を取り除きつつ、他のフィールドへの独立した制限は保持します

共有ビューと既存フィルター

1 つのスライサー キャッシュ内の選択メンバーは和集合を作ります。適用可能なスライサー キャッシュは、明示的に接続されたビューごとに交差します。選択フィールドがそのビューの表示軸に存在しない場合も含まれます。1 つのキャッシュの複数 UI スライサー ビューは同じ選択を共有します

現在の結果を計算するには、アプリケーションの結果ライター付きで TXLSPivotTable.Make を呼び出します。キャッシュ選択の変更がワークシート セルを書き換えたり、インポート済みネイティブ レイアウトをすべて再生成したりすることはありません

Excel は非 OLAP スライサー選択を、通常のピボット メンバー非表示とページ選択として保存します。個々の非表示フラグをどの操作が作ったかは、フォーマットは記録しません

インポート済みバインディングを変更する前に、HotXLS は旧同一フィールドの非表示マスクとページ マスクが、実効的な旧スライサー選択と一致するかを検証します。一致するマスクはスライサー管理と見なされ、不整合や曖昧なマスクは推測なしで拒否されます。無関係フィールドの手動・ページ・高度フィルターは有効のままです

保存とソース更新

保存はスライサー選択と接続ピボット メンバー マスクを一緒に更新し、インポート済み XML 名前空間と未知の拡張を保持し、シート接続を保存済み識別子へ再マッピングします。拡張スライサー キャッシュ識別子は、通常のワークブック ピボット キャッシュ識別子とは区別されたままです

ローカルの ピボット キャッシュ更新 は選択された共有メンバー インデックスを保持します。明示的なサブセットは新しいメンバーを除外し、クリアされた選択は更新後の完全なドメインを許します

境界と失敗時の動作

選択の変更はコミット前にすべての接続ビューとメンバーを検証し、ワークブックの変更ガードを使います。失敗しても既存の選択、ビュー制限、元の XML は保持されます

スライサー キャッシュの追加、削除、クリアもワークブックの書き込みガードを使います。凍結されたワークブック ビューが、コレクション変更を通じて接続ピボット結果を変えることはありません

バインドされた非 OLAP ピボット キャッシュの削除や、それを含むコレクションのクリアは、変更の前に拒否されます。明示的な RemoveSlicerCache ライフサイクル操作はネイティブ ビューを削除し、選択をクリアするか通常のピボット マスクへ引き継ぎます

OLAP とテーブル キャッシュの選択、グループ化・計算ソース フィールド、欠落した接続、不整合のあるドメイン、曖昧なインポート済み同一フィールド マスクは、この操作の対象外です。未対応のキャッシュ内容は元の表現を保持します

この選択 API が扱うのは、インポート済みと対応する作成済みのピボット スライサー キャッシュです。共有ビュー オーサリングと明示的なキャッシュ削除 は 2.384.94 で利用でき、安全なワークシート マテリアライズ は対応する計算出力を置き換えられます。クロスフィルター データなし表示評価は別の作業です

バインドされた非 OLAP キャッシュの最後の UI ビュー削除は、描画、ビュー、キャッシュを変える前に拒否されます。複数ある UI ビューの 1 つを削除しても、共有キャッシュと選択は保持されます

ワークシートのスライサー ビューのクリアは、ビューを取り除く前に影響するすべてのキャッシュをチェックします。最後のバインド ビューがあればアトミックに拒否され、他のワークシートと共有するビューはキャッシュと選択を保持します

追加のレコード フィルター

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 でないオーナーごとにコールバックを 1 つ登録または置き換え、TXLSPivotTable.ClearRecordFilter はそのオーナーのコールバックを取り除きます。nil コールバックを SetRecordFilter に渡しても削除になります

登録済みコールバックと省略可能な TXLSPivotTable.ExternalRecordFilter は、テーブル自身のフィルターと集計の前に交差します。ワークブックはスライサー コールバックを独立に登録するため、呼び出し側の述語を上書きしません

コールバックはゼロ始まりのレコード インデックスを受け取り、Make 呼び出しごとにスナップショットされ、AssignPivotOnly による直列化やコピーはされません。オーナーとコールバック ターゲットの所有は呼び出し側に残り、登録期間中生存している必要があります