再計算のトラブルシューティング
ここでは、どのような場合にブックの再計算を行うかを計画する際の考慮事項に関する技術的なヒントを紹介します。 ブック内のデータの再計算および更新に関する一般的な情報については、次のトピックを参照してください。
依存関係
ある列が他の列に依存しており、他の列の内容に何らかの変更が行われた場合、関連付けられているすべての列の再計算が必要になる可能性があります。 PowerPivot ブックに変更が行われた場合は、PowerPivot for Excel によって既存の PowerPivot データの分析が行われ、再計算が必要かどうかが決定されます。さらに、できるだけ効率のよい方法で更新が行われます。
たとえば、Sales というテーブルがあり、このテーブルは Product テーブルと ProductCategory テーブルに関連付けられているとします。また、これら 2 つのテーブルに、Sales テーブル内の数式が依存しているとします。 Product テーブルまたは ProductCategory テーブルに何らかの変更が加えられると、Sales テーブル内の計算列はすべて再計算されます。 このことは、カテゴリ別または製品別に売上をロール アップする数式を想定すると道理にかなっています。 したがって、結果が正しくなるようにするには、データに基づく数式を再計算する必要があります。
PowerPivot は常に、テーブルの完全な再計算を行います。変更された値がないかどうかを確認するよりも、完全な再計算を行う方が効率的であるためです。再計算を発生させる変更には、列の削除、列の数値データ型の変更、新しい列の追加などの大きな変更があります。 ただし、列の名前の変更のような一見小さな変更によっても再計算が発生する場合があります。 これは、列の名前が数式で識別子として使用されるためです。
場合によっては、PowerPivot for Excel によって再計算から除外される列が決定されることもあります。 たとえば、Products テーブルから [Product Color] などの値を検索する数式があり、変更対象の列が Sales テーブルの [Quantity] である場合、Sales テーブルと Products テーブルが関連付けられている場合でも、数式を再計算する必要はありません。 ただし、Sales[Quantity] に依存する数式がある場合は、再計算が必要です。
依存列の再計算シーケンス
再計算の前には、依存関係が計算されます。 互いに依存している複数の列がある場合、PowerPivot は依存関係の順序を追跡します。 これにより、正しい順序および最高の速度で列が処理されます。
トランザクション
データを再計算または更新する操作は、トランザクションとして行われます。 したがって、更新操作の一部が失敗した場合、残りの操作はロールバックされます。 これは、データが部分的に処理済みの状態にならないようにするためです。 リレーショナル データベースの場合のようにトランザクションを管理したり、チェックポイントを作成したりすることはできません。
揮発性関数の再計算
NOW、RAND、TODAY など、固定値を持たない関数も中には存在します。 このような関数が計算列に使用されている場合に、クエリまたはフィルター処理が実行されても、パフォーマンス上の問題を回避するために、通常これらの関数は再評価されません。 このような関数の結果は、列全体が再計算されたときにのみ再計算されます。 こうした状況としては、外部データ ソースからの更新が行なわれる場合や、手動でデータを編集する場合などがあります。このとき、これらの関数を含んでいる数式が再評価されます。 ただし、NOW、RAND、TODAY などの揮発性関数がメジャーの定義内で使用されている場合には、常に再計算が行なわれます。