モデルのパフォーマンスに影響を与える可能性のある式の問題と、それらを修正するために実行できるアクションについて詳しく説明します。

これが問題になるケース
データが変更されない関数 (つまり、ライン アイテムの親) を探します。こうした関数をシステム モジュールに配置すると、計算が 1 回実行され、複数のモジュール内の複数のライン アイテムで参照できることになります。以下を探します。PARENT(PARENT(PARENT(ライン アイテム)))、テキストフィールドの連結、時間関数 (START()、CURRENTPERIODSTART()、CURRENTPERIODEND() など)。

これが問題になる理由
計算を繰り返すと、パフォーマンスが低下する可能性があります。このような種類の関数が長い式の一部として含まれている場合は、関数が複数のライン アイテムと複数のリスト メンバーに含まれている場合に実行される回数を考えてみてください。計算は 1 回実行して何度も参照する方がパフォーマンスが向上します。

修正方法
システム モジュールに移動できる関数を見つけます。システム モジュールを作成し、関数をライン アイテムとして追加し、システム モジュールのライン アイテムを参照するように元の計算を変更します。

関連コンテンツ

これが問題になるケース
Anaplan ではテキスト文字列の使用を避けることはできないため、パフォーマンスへの影響を最小限に抑えるために最も効率的な方法で結合が行われるようにする必要があります。式の最適化に関する記事を必ず読んでください。リンクは以下の「詳細情報」セクションにあります。

これが問題になる理由
テキスト文字列を結合すると大量のメモリが必要となり、パフォーマンスに影響を与える可能性があります。

修正方法
必要なディメンションのみを含むシステム モジュールを作成します。たとえば、アイテム コードと会社コードを結合したコードを作成する場合は、三つのシステム モジュールを作成します。一つ目はアイテム データを保持し、二つ目は会社データを保持し、三つ目はその二つの組み合わせを保持します。

関連コンテンツ

これが問題になるケース
デイジー チェーン式は常に問題になります。モジュール A にあるライン アイテムがモジュール B で参照されており、さらにモジュール B がモジュール C で参照されており、その後も同様に続いている場合にデイジー チェーンが発生します。

An example of a daisy chain formula.

これにより、計算が必要な長い依存関係の連鎖が存在する状況が生じます。代わりに、各モジュールでデータを直接参照する必要があります。モジュール A のライン アイテムはモジュール B で直接参照され、モジュール C でも直接参照されるようにします。

これが問題になる理由
デイジー チェーン式ではエンジンの負荷が高くなります。計算に使用される一つのデータ ポイントが変更されるたびに、シーケンス全体を再計算する必要があります。

修正方法
これらの式を分割します。複数回参照する必要がある部分をシステム モジュールに配置し、信頼できる唯一の情報源を作成します。

関連コンテンツ

これが問題になるケース
式の目的を一つの文で説明できない場合、その式は長すぎます。

これが問題になる理由
複雑な IF THEN ELSE ステートメントなどの長い式は、理解、監査、保守が困難です。複雑な式では貴重な処理時間を消費し、エンジンに必要以上の負担をかけることになります。

修正方法
複雑な IF THEN ELSE ステートメントを簡略化し、最も一般的な条件を先頭に置きます。式を複数のライン アイテムに分割します。式に 10 を超える IF THEN 計算が含まれている場合は、LOOKUP の使用を検討してください。状況によっては、ライン アイテム サブセットの使用を検討することもできます。

関連コンテンツ

これが問題になるケース
FINDITEM 関数は、リスト内のアイテムを検索しようとし、そのライン アイテムに関連するすべてのセルに対してこれを実行するため、エンジンへの負担が大きくなります。これは、リストに null 値が含まれている場合に特に当てはまります。過度に使用されているかどうかは、モデルとそれが実行されるリストによって異なります。

これが問題になる理由
FINDITEM を過度に使用すると、エンジンの負荷が必要以上に大きくなります。

修正方法
FINDITEM を実行する前に、データに null 値がないかどうかを確認してください。たとえば、「prod_text」がリストの名前である場合、null 値をチェックする式は「IF ISNOTBLANK(prod_text) THEN FINDITEM(prod_text) ELSE blank」となります。この関数はデータを読み込むときによく使用されます。データをテキストではなくリスト形式のライン アイテムとしてデータ ハブからスポーク モデルに読み込むことを検討してください。

関連コンテンツ