MODOVERFLOWオプションは、モデルの連立ブロックにある方程式が発散したかどうかを判定する際に使用するオプションです。MODOVERFLOWは、方程式が発散したとみなす基準になる、連続する反復における方程式の結果の離散の程度を決定します。
パラメータ
発散の判定に使用するINTEGER
値。Oracle OLAPでは、連立ブロック内の各方程式を計算する際、現行の反復と前回の反復における方程式の結果に基づく比較値を作成します。比較値が発散として判定されると、方程式は発散したとみなされます。
比較値は、次のように判定されます。
(thisResult - prevResult) / (prevResult + MODGAMMA)
ここで、thisResultは現行の反復の結果で、prevResultは前回の反復の結果です。
前述の計算において、MODGAMMAは、比較値が反復間の変化の絶対量と比例的変化との比較の程度を制御するINTEGERオプションです。MODGAMMAのデフォルト値は1
です。
発散判定では、比較値が、10
のMODOVERFLOW乗より大きいかどうかがOracle OLAPによって判定されます。この判定の計算は次のとおりです。
Comparison value > 10**MODOVERFLOW
方程式が発散したとみなされるには、比較値が前述の判定を満たす必要があります。MODOVERFLOWのデフォルト値は3
です。このデフォルト値では、比較値が1000
より大きい場合に、比較値が判定を満たします。
使用上の注意
方程式の発散
方程式が発散すると、エラーが発生します。エラーが発生したときにOracle OLAPが実行するアクションは、MODERRORオプションで制御します。
開発時における迅速な発散
モデルの開発中、MODOVERFLOWに小さい値を使用することで時間を節約できます。特定の連立ブロックで多数の反復を実行する場合、MODOVERFLOWに、より小さな値を指定することで、そのブロックを迅速に発散させることができます。MODOVERFLOWオプションをCONTINUE
に設定すると、発散が発生してもモデルの実行は継続され、モデルの他のブロックのデバッグに専念できます。モデルのデバッグ後、MODOVERFLOWに、より大きな値を使用します。
例
例5-58 MODOVERFLOWのデフォルト値の使用
次の文で、income.est
というモデルのトレースを指定し、ディメンションを制限してモデルを実行します。
MODTRACE = YES LIMIT division TO 'Camping' income.est budget
これらの文によって生成される出力は次のとおりです。
(MOD= INCOME.EST) BLOCK 1: SIMULTANEOUS (MOD= INCOME.EST) ITERATION 1: EVALUATION (MOD= INCOME.EST) selling = marketing * 3 (MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 1) = 3 ... (MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 2) = -997 ... (MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 3) = 6.00902708124 ... (MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 49) = 34.2715693388 ... (MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 50) = -7.22300601861
トレースで、連立方程式のブロックの最初の3回の反復および49回目と50回目の反復でSelling
明細項目に対し計算された結果を確認できます。50回の反復後、ブロックは収束に失敗しています。
MODOVERFLOWの値は、デフォルト値の3
です。したがって、方程式が発散したと判定するには、その比較値が 1000
より大きい必要があります。