ネイティブなピボット計算フィールドとキャッシュ所有のアイテム
コンテキスト合計からの計算
ローカルの計算キャッシュ フィールドでは、ネイティブ プレビューはまず要求されたリーフ、小計、総計の各コンテキストで参照される全データベース フィールドを合計し、それから数式を評価します。依存フィールドは表示データ フィールドに存在しなくても構いません
たとえば Amount/Units の値が 10/1 と 30/9 の 2 レコードは、ネイティブ計算フィールドの結果として 40/10 = 4 を生み出します。総計は表示された比率を足すのではなく、自身の依存関係の合計を評価します
計算アイテムは、他の行軸・列軸も含む各完全リーフ コンテキストでメンバー参照を評価します。小計と総計には結果のメンバー寄与が含まれるため、比率アイテムは自身のリーフ比率の合計を寄与できます
手動で非表示にしたメンバーも、別の計算アイテムが参照している限り利用可能です。ただしそのメンバー自身の寄与は表示合計の外に留まります。A=40、B=60 の場合、A を隠しても Combined=A+B は 100 となり、Combined は可視の総計に含まれます
計算フィールドと計算アイテムが共存する場合、アイテムの寄与がまず参照先データベース フィールドの合計を更新し、その後に計算フィールドが更新済みのコンテキスト合計を評価します
計算アイテムは複数の未グループ化フィールドに属せます。保持されたキャッシュ定義順が、どのフィールド数式が交差を最後に書くかを決めるため、定義を移動するとその交差と表示合計の両方が変わり得ます
未解決の計算メンバー依存は、参照された時点で評価されます。その順序で後から定義された依存も含まれます。先行ステップで既に計算されたメンバーは、別の数式が参照しても現在の交差値を保持します
ネイティブのフィールド合計は Boolean とテキストのソース値を無視し、数値と日付の値を保持し、型付きのソース エラーを伝搬します。遅延評価の IF と IFERROR は、未使用の分岐を評価せずにエラーを処理できます
キャッシュの所有とバインディング
| 公開宣言 | 契約 |
|---|---|
TXLSPivotCacheCalculatedItem | キャッシュ所有のネイティブ計算メンバー定義です。所有キャッシュを通じて取得し、借用オブジェクトを使っている間はキャッシュを生存させてください |
TXLSPivotCacheCalculatedItem.FieldIndex: Integer | 読み取り専用のゼロ始まりキャッシュ フィールド識別子です |
TXLSPivotCacheCalculatedItem.ItemIndex: Integer | FieldIndex 内での読み取り専用ゼロ始まり共有メンバー識別子です |
TXLSPivotCacheCalculatedItem.Formula: WideString | 読み書き可能なネイティブ メンバー数式です。設定するとモデルが変わり、プレビューや明示的バインディングは計算前に構文と依存サイクルを検証します |
TXLSPivotCacheCalculatedItem.Supported: Boolean | 解析済み領域識別子が利用可能かを示す読み取り専用フラグです。すべての数式やビューの組み合わせが評価できる保証ではありません |
TXLSPivotCacheCalculatedItem.RawXml: WideString | 未対応の計算アイテム定義の、読み取り専用保持 XML です。既知の型付き定義は空文字列になります |
TXLSPivotCache.AddCalculatedItem(AFieldIndex, AItemIndex: Integer; const AFormula: WideString): TXLSPivotCacheCalculatedItem | 既存メンバーに対する対応済み型付き定義を作成します。無効な識別子、空の数式、重複するターゲット識別子は拒否されます。返されたオブジェクトはキャッシュに属します |
TXLSPivotCache.FindCalculatedItem(AFieldIndex, AItemIndex: Integer): TXLSPivotCacheCalculatedItem | 一致する借用定義または nil を返します |
TXLSPivotCache.CalculatedItemCount: Integer | 保持された対応・未対応定義の数です。読み取り専用です |
TXLSPivotCache.CalculatedItems[Index: Integer]: TXLSPivotCacheCalculatedItem | 定義リストへの読み取り専用ゼロ始まりアクセスです。借用オブジェクトを返します |
TXLSPivotCache.ClearCalculatedItems | 所有する定義を解放し、借用ハンドルを無効化します。共有メンバーの削除やキャッシュ クエリ完全性の確立は行いません |
TXLSPivotCache.MoveCalculatedItem(AIndex, ANewIndex: Integer) | 既存の定義をネイティブ解決順序のゼロ始まり位置の間で移動します。借用オブジェクトの同一性は保持されます。無効な位置では EArgumentOutOfRangeException が発生し、定義は移動しません |
TXLSPivotCache._AddUnsupportedCalculatedItem(const ARawXml: WideString) | パーサー向けの保持フックです。未知の XML を保持し、キャッシュ クエリ モデルを不完全とマークします |
TXLSPivotCache.Assign(Source: TXLSPivotCache) | 定義、フィールド、共有メンバー、レコード インデックス、日付システム コンテキストをディープ コピーします。ソースのハンドルは独立を保ち、同一キャッシュへの自己代入も安全です |
TXLSPivotTable.BindCalculatedItemsToCache | ビューで作成された計算アイテムを切り離されたキャッシュ上で検証してバインドし、新しい共有メンバーと定義をライブ キャッシュへ追加します。失敗してもメンバー識別子と定義は変わらず、既存のフィールド・メンバー ハンドルは有効のままです |
TXLSPivotField.AddCalculatedItem で作成したビュー由来のアイテムは、ネイティブ マテリアライズや型付きネイティブ再構築の前に、明示的な BindCalculatedItemsToCache が必要です。対応するネイティブ キャッシュ定義のインポートは、その所有を最初から備えています
キャッシュ バインディングはそのキャッシュを共有するすべてのビューに影響するため、オーサリング操作として呼び出し、借用ハンドルは対応するリストがクリア、代入、破棄されるまでだけ保持してください
メンバー フィルターと表示変換
計算アイテム フィールドに対するキャプション比較と値比較は、メンバー数式の実行後に表示メンバーを選択します。フィルターされたソース メンバーは参照される数式には引き続き利用可能で、可視の小計と総計はそれらのメンバーの直接寄与を除外します
値比較は計算メジャーを選択できます。各候補メンバーは、ソース レコードの比率を足すのでも、数式をキャッシュ レコード列として扱うのでもなく、コンテキスト依存合計からそのメジャーを評価します
計算アイテムの結果は、モデル化された ShowDataAs 変換にも対応します。パーセンテージ、インデックス、差分、累計、累計に対するパーセンテージ、順位などです。非表示メンバーは可視の累計や順位シーケンスの外に留まり、数式参照は元の値を保持します
| 公開宣言 | 契約 |
|---|---|
TXLSPivotFilter.DataFieldIsMeasureIndex: Boolean | DataField の識別子ドメインを選択します。False は既存のゼロ始まりキャッシュ フィールド識別子を保持し、True はゼロ始まりの表示データ メジャー位置を識別します。ネイティブの iMeasureFld がインポートされると設定されます |
TXLSPivotFilter.SourceOrder: Integer | ネイティブの filters 要素から保持された、読み書き可能なゼロ始まりグローバル順序です。欠落時のデフォルトは -1 です。ローカル計算と型付き書き込みは、まず負でない EvalOrder を、次に SourceOrder を、最後に安定したフィールド/リスト順序を使います |
型付きネイティブ書き込みは、キャッシュ フィールド識別子を表示メジャー位置へ変換します。複数のデータ メジャーで使われるキャッシュ フィールドには明示的なメジャー位置が必要です。そうでなければ集計と表示の識別子が曖昧になるためです
Excel は有効なフィルターを evalOrder=-1 のまま保存しつつ、評価順序を filters 要素の並びで保持できます。インポート、クローン、型付き再構築はその並びを保持し、それらのフィルターを無効扱いにしません
インポート済み保持ネイティブ ビューのフィルター定義や保持ソース位置の変更は、型付き再構築を必要とします。通常のネイティブ採用は保持されたフィルター識別子を検証し、未対応の編集をレポート セルの書き込み前に拒否します
プレビュー、クエリ、日付システム
function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter; ALayoutWriter: TlxPivotLayoutWriter; AUseNativeGrandTotals: Boolean = False; ABudget: TlxPivotQueryBudget = nil; ADateSystem: TXLSPivotDateSystem = xlpdsCache): Integer; function TXLSPivotTable.GetDataValue(const ADataField: WideString; const AConstraints: TXLSPivotDataConstraints; ABudget: TlxPivotQueryBudget; out AValue: Variant; ADateSystem: TXLSPivotDateSystem = xlpdsCache): Boolean;
AUseNativeGrandTotals=True の MakePreview は、正確なネイティブ合計と計算アイテム識別子を含めて、切り離されたテーブルとキャッシュを使います。通常の Make とデフォルトの MakePreview は既存のレコード ベース計算動作を保ちます
GetDataValue は、キャッシュに計算フィールドや計算アイテムがある場合、ネイティブのコンテキスト合計を使用します。GETPIVOTDATA も同じクエリ パスを共有します。どちらの操作もソース データの更新、検査対象ワークシート数式の再計算、レポート セルの書き込みを行いません
| 公開宣言 | 契約 |
|---|---|
TXLSPivotCache.Date1904: Boolean | スタンドアロン ネイティブ計算用の読み書き可能なソース日付システム コンテキストです。デフォルトは False で、Classic と XLSX のインポート、ワークシート キャッシュ作成、XLSX キャッシュ コピーの際にバインドされます |
TXLSPivotDateSystem | 切り離されたネイティブ プレビューとクエリ用の型付き日付システム選択です |
xlpdsCache | キャッシュが保持する Date1904 コンテキストを変更せずに使います |
xlpds1900 | 1900 日付システムを切り離された計算へ投影します |
xlpds1904 | 1904 日付システムを切り離された計算へ投影します |
TryXLSXMakeNativePivotLayout(...; ADateSystem: TXLSPivotDateSystem = xlpdsCache): Boolean | 低レベルのネイティブ レイアウト ヘルパーは、ResultXml と Reason の出力パラメーターの後に、同じ切り離し日付システム選択を受け付けます |
TXLSGetDate1904 = function: Boolean of object | 現在の所有ワークブックの日付システムを読む計算機メタデータ コールバックです |
TXLSCalculator.OnGetDate1904: TXLSGetDate1904 | GETPIVOTDATA が使う省略可能な借用コールバックです。nil ではキャッシュ コンテキストを使い、ワークブック エバリュエーターとその読み取り専用ビューは現在のワークブック設定を供給します |
スタンドアロンの呼び出し側は、正しいキャッシュの Date1904 コンテキストか、明示的な日付システム選択を供給する必要があります。ワークブック所有のネイティブ マテリアライズと数式クエリは、ライブ キャッシュを変更せずに現在のワークブック設定を投影します
日付のソース値はキャッシュ内では絶対的な TDateTime 値のままですが、ネイティブの数値数式は Excel の日付シリアルを使います。1904 システムは日付値ごとに 1462 日を差し引き、1900 変換は 1900 年 3 月より前の表現可能な日付を処理します
保存済みネイティブ出力の所有権は日付システム コンテキストを記録し、書式付き日付値を直列化された数値ペイロードと比較します。保存、再オープン、ワークブック日付基準の変更では正当な所有権が保持され、変更された日付、Boolean、エラー、テキストのペイロードは依然として上書きを拒否します
予算と未対応の入力
省略可能な TlxPivotQueryBudget コールバックは、作業増分と現在のメモリ見積もりを受け取ります。提案された切り離しスナップショットと数式ストレージも含まれます。False は EXLSPivotQueryBudget で中断し、コールバックの例外は伝搬します
レコード幅とデータベース メンバー識別子はクローンの前にチェックされます。数式のコンパイルと評価は作業を消費し、計算は上限付きの構文深さ、数式テキスト、計算メンバー ドメイン、アキュムレータ ストレージを保持します
計算アイテムの計画は、割り当て前に結合メンバー ドメイン、キャプション ストレージ、フィールド プランを制限します。ネイティブ メンバー評価と後段の集計フィルター スキャンも、固定上限を超える提案作業をスキャンに入る前に拒否し、予算によるキャンセルでもライブ メンバー マスクは変わりません
数式パーサーは、数値定数、フィールド名、引用符付き名前、フィールド修飾メンバー名、算術と比較、パーセント、さらに ABS、SQRT、POWER、ROUND、MIN、MAX、SUM、IF、IFERROR、AND、OR、PI をサポートします。未知の関数、セル参照、配列、未束縛の名前は、推測値を返す代わりに拒否されます
ネイティブ計算フィールドには SUM のデータ メジャーが必要で、行・列・ページの軸にはなれません。計算アイテムには、未グループ化キャッシュ フィールドの保持された文字列キャプション、自動または SUM の小計、SUM メジャー、対応済みの単一メンバー領域識別子が必要です
未知の数式関数、非ゼロの領域 fieldPosition、未知または不正な領域メタデータ、曖昧なフィルター メジャー識別子、同時に有効な基本・拡張表示変換は明示的に拒否されます。これらの制限が未対応の定義を通常アイテムに変えることはありません
計算メンバーの後段集計フィルタリングは、モデル化された値比較をサポートします。旧式の count・percentage・sum フィルター変種と、モデル化されていない Top n メタデータは、対応するネイティブ選択モデルを要求し、ソース レコード比較への置き換えではなく拒否します
インポート済み raw パーツは、通常のラウンドトリップ保持のために未対応の将来メタデータを保持します。ローカル計算、型付き再構築、セマンティックな機能抽出には利用可能なモデルが必要で、欠落したキャッシュ レコードを作るためにソース データを更新することはありません
セマンティックなピボット キャッシュ定義には、計算アイテムの識別子と数式、日付システム コンテキスト、切り離された上限付きペイロードが含まれます。利用できないネイティブ拡張は明示的なセマンティック エラーのままです