ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

MODTRACE

MODTRACEオプションは、モデルの実行中に、モデルの各方程式をファイルに記録するかどうかを制御するオプションです。MODTRACEは、モデルの実行をトレースすることによって問題を検出するためのデバッグ・ツールとして主に使用されます。


ヒント:

INFOファンクションを使用して、コンパイルしたモデルの構成と実行したモデルの解決ステータスに関する情報の特定の項目を取得できます。INFO(MODEL)を参照してください。

データ型

BOOLEAN

構文

MODTRACE = {YES|NO}

パラメータ

YES

各方程式の計算前にそれぞれのモデル方程式のテキストが現行の出力ファイルに送信され、その後、計算の結果が現行の出力ファイルに送信されます。

DBGOUTFILE文を使用してデバッグ・ファイルを指定した場合、MODTRACEの出力は、現行の出力ファイルではなくデバッグ・ファイルに送信されます。

NO

(デフォルト)モデルの実行中、モデル方程式のテキストと結果はファイルに送信されません。

使用上の注意

解決順序のプレビュー

MODTRACEでは、モデルの方程式は解決される順序で現行の出力ファイルに送信されます。モデルの実行前に、MODEL.COMPRPTプログラムを使用して、解決順序のプレビューを取得できます。モデルが大きく複雑な場合、プレビューは特に有用です。モデルのコンパイル後に実行できるMODEL.COMPRPTプログラムで、コンパイラがブロックにモデル方程式をどのように編成したか、およびブロックと方程式が解決される順序を示すレポートを生成できます。

トレース情報の理解

MODTRACEでは、トレースの各行に現行のモデルの名前が表示されます。トレースには次の種類の行が含まれます。

  • ブロック。ブロック行には、実行するプロックのブロック番号とブロック・タイプが表示されます。ブロックのタイプには、単純、ステップフォワード、ステップバックワードおよび連立があります。ステップフォワードまたはステップバックワードのブロックでは、ブロック行に、処理されるディメンションが表示されます。ディメンション間の依存がある連立ブロックのブロック行には、依存関係にあるディメンションが表示されます。モデルのブロックの詳細は、MODELコマンドを参照してください。

  • 反復。これらの行は連立ブロックの場合に出力され、現行のブロックで実行される反復の回数が指定されます。Aitkens解法を使用する場合は、次の予測反復が識別されます。(使用する解法は、MODSIMULTYPEオプションで決定します。)

  • 方程式。計算される方程式です。

  • 結果。結果行は各方程式行の後にあり、方程式によって代入される結果が表示されます。結果が代入された変数および各モデル・ディメンションの現行の値が表示されます。連立ブロックでは、現行の反復の回数も表示されます。たとえば、actualがソリューション変数で、モデル・ディメンションがlineおよびmonthの場合、連立ブロックの結果行は次のようなものになります。

    (MOD= INCOME.CALC) ACTUAL (LINE OPR.INCOME MONTH 'JAN96'
       ITER 1) = 108.9600000
    


ディメンションベースの方程式を指定したMODTRACEの使用

ディメンションベースの方程式を含むモデルを実行すると、ソリューション変数のすべてのディメンションがOracle OLAPによって自動的にループ処理されます。トレースでは、結果行にDIMENSION文にリストされている各ディメンションの現行値が表示されますが、DIMENSION文にリストされていない追加のディメンションの現行値は表示されません。DIMENSION文の使用の詳細は、DIMENSION(モデル内)を参照してください。

つまり、モデル・ディメンションがlineおよびmonthで、ソリューション変数がlinemonthおよびdivisionによってディメンション化されている場合、divisionの現行値は結果行には表示されません。divisionのステータスにある最初の値に対しモデルが実行され、その後、ステータスにある2番目の値に対しモデルが実行されます(以降同様)。

変数に値を代入するモデルを実行すると、それらの変数のディメンション(またはコンポジットのベース)すべてが自動的にループ処理されます。この場合、変数の各ディメンションの現行の値がトレースに表示されます。

例5-63 MODTRACEを使用したモデルのデバッグ

次の文で、income.budgetという名前のモデルを定義します。

DEFINE income.budget MODEL
LD Model for estimating budget items
MODEL
DIMENSION line month
Opr.Income = Gross.Margin - Marketing
Gross.Margin = Revenue - Cogs
Revenue = LAG(Revenue, 1, month) * 1.02
Cogs = LAG(Cogs, 1, month) * 1.01
Marketing = LAG(Opr.Income, 1, month) * 0.20
END

このモデルは、損益計算書の予算明細項目についての予測を行います。モデル方程式は、lineディメンションを基礎としています。次の文で、モデルをコンパイルし、MODEL.COMPRPTプログラムを実行します。

COMPILE income.budget
MODEL.COMPRPT income.budget

MODEL.COMPRPT文によって生成されるコンパイル・レポートは次のとおりです。

MODEL INCOME.BUDGET <LINE MONTH>
                   BLOCK 1 (SIMPLE)
INCOME.BUDGET  4:  revenue = lag(revenue, 1, month) * 1.02
INCOME.BUDGET  5:  cogs = lag(cogs, 1, month) * 1.01
INCOME.BUDGET  3:  gross.margin = revenue - cogs
                    BLOCK 2 (STEP-FORWARD <MONTH>)
INCOME.BUDGET  6:   marketing = lag(opr.income, 1, month) * 0.20
INCOME.BUDGET  2:   opr.income = gross.margin - marketing
                    END BLOCK 2
                   END BLOCK 1

このモデルをデバッグする場合、モデルを実行する前にMODTRACEをオンにすることで、実行状況を行ごとにトレースできます。

次の文で、ディメンションを制限し、トレースを指定して、モデルを実行します。

LIMIT month TO 'Jan97' TO 'Mar97'
LIMIT division TO 'Camping'
MODTRACE = YES
income.budget budget

これらの文によって、次のような行ごとの結果が生成されます。

(MOD= INCOME.BUDGET) BLOCK 1: SIMPLE 
(MOD= INCOME.BUDGET) revenue = lag(revenue, 1, month) * 1.02
(MOD= INCOME.BUDGET) BUDGET (LINE REVENUE MONTH 'JAN97') = 744491.1966
(MOD= INCOME.BUDGET) BUDGET (LINE REVENUE MONTH 'FEB97') = 759381.020532
(MOD= INCOME.BUDGET) BUDGET (LINE REVENUE MONTH 'MAR97') = 774568.64094264
(MOD= INCOME.BUDGET) cogs = lag(cogs, 1, month) * 1.01
(MOD= INCOME.BUDGET) BUDGET (LINE COGS MONTH 'JAN97') = 382386.2323
(MOD= INCOME.BUDGET) BUDGET (LINE COGS MONTH 'FEB97') = 386210.094623
(MOD= INCOME.BUDGET) BUDGET (LINE COGS MONTH 'MAR97') = 390072.19556923
(MOD= INCOME.BUDGET) gross.margin = revenue - cogs
(MOD= INCOME.BUDGET) BUDGET (LINE GROSS.MARGIN MONTH 'JAN97') = 362104.9643
(MOD= INCOME.BUDGET) BUDGET (LINE GROSS.MARGIN MONTH 'FEB97') = 373170.925909
(MOD= INCOME.BUDGET) BUDGET (LINE GROSS.MARGIN MONTH 'MAR97') = 384496.44537341
(MOD= INCOME.BUDGET) BLOCK 2 STEP-FORWARD <MONTH>
(MOD= INCOME.BUDGET) marketing = lag(opr.income, 1, month) * 0.20
(MOD= INCOME.BUDGET) BUDGET (LINE MARKETING MONTH 'JAN97') = 39938.192
(MOD= INCOME.BUDGET) opr.income = gross.margin - marketing
(MOD= INCOME.BUDGET) BUDGET (LINE OPR.INCOME MONTH 'JAN97') = 322166.7723
(MOD= INCOME.BUDGET) marketing = lag(opr.income, 1, month) * 0.20
(MOD= INCOME.BUDGET) BUDGET (LINE MARKETING MONTH 'FEB97') = 64433.35446
(MOD= INCOME.BUDGET) opr.income = gross.margin - marketing
(MOD= INCOME.BUDGET) BUDGET (LINE OPR.INCOME MONTH 'FEB97') = 308737.571449 
(MOD= INCOME.BUDGET) marketing = lag(opr.income, 1, month) * 0.20
(MOD= INCOME.BUDGET) BUDGET (LINE MARKETING MONTH 'MAR97') = 61747.5142898
(MOD= INCOME.BUDGET) opr.income = gross.margin - marketing
(MOD= INCOME.BUDGET) BUDGET (LINE OPR.INCOME MONTH 'MAR97') = 322748.93108361
(MOD= INCOME.BUDGET) END BLOCK 2
(MOD= INCOME.BUDGET) END BLOCK 1

単純ブロックであるBlock 1では、方程式は一度に1つずつ解決され、各方程式が解決されるごとにmonthのステータスにある3つの値がループ処理されます。monthディメンションにおけるステップフォワード・ブロックであるBlock 2では、monthのステータスにある値全体が段階的に処理され、各月についてのブロックにあるすべての方程式が順番に解決されます。