MODELコマンドは、新規または既存のモデル・オブジェクトにまったく新しい仕様を入力するコマンドです。モデルに既存の仕様がある場合、その仕様は上書きされます。MODELを使用して、モデル・オブジェクトにモデル仕様を割り当てるには、定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。
MODEL文の代替文はEDIT MODEL文であり、OLAP Worksheet内でのみ使用できます。EDIT MODEL文を実行すると、modelオブジェクトの仕様を追加、削除または変更できる編集ウィンドウが開きます。
モデル・オブジェクトへの仕様の追加は、データをモデリングする際の一処理です。モデルの詳細は、「OLAP DMLモデル・オブジェクト」を参照してください。
パラメータ
次のOLAP DML文を1つ以上含む複数行のテキスト式。
モデルの最大行数は、4,000行です。各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでALLOCMAP文をコード化する際は、改行デリミタ(\n
)で文を区切るか、JOINLINESを使用します。
モデルの仕様設計の詳細は、「モデルの仕様」を参照してください。
使用上の注意
モデルの仕様
モデルの仕様は、次のOLAP DML文で構成されます。
次のうちの1つ。
モデルに含める別のモデルの名前を指定するINCLUDE文(1文のみ)。詳細は、「モデルのネスト」を参照してください。
「モデルにおけるDIMENSION文作成のガイドライン」に従ってコーディングした1つ以上のDIMENSION(モデル内)文。
注意: モデルにINCLUDE文が含まれる場合、DIMENSION文を含めることはできません。ただし、INCLUDE文で参照されているモデルまたは階層のルート・モデルには、親モデルで必要なDIMENSION文が含まれている必要があります。 |
1つ以上のSETコマンドまたは「モデルでの方程式のルール」に従って記述した方程式。
モデルの仕様の終わりを示す最後のEND文。(OLAP Worksheetの編集ウィンドウで仕様をコーディングする場合は不要です。)
モデルの最大行数は、32,000行です。
集計仕様におけるMODEL文
aggmapで、特別なMODEL文を使用して、事前定義したモデルを実行できます。(詳細は、AGGMAPコマンドのMODEL(集計内)文を参照してください。)
変数のデータの計算方法
モデル・オブジェクトおよびaggmapオブジェクトは、どちらもディメンション・メンバー間の関係に基づいて変数のデータ値を計算します。ディメンション・メンバー間に親子関係が存在し(つまり、ディメンションに階層構造があり)、すべての集計値を同じ方法で計算できる場合は、集計仕様でRELATION文を使用して値を計算できます。しかし、ディメンションが階層ではなく、値の計算に異なる方程式を必要とする場合は、モデルを定義する必要があります。MODEL(集計内)を使用して集計仕様でモデルを実行するか、「モデルの実行」に示されている構文を使用してコマンドラインでモデルを実行できます。
モデルの仕様の削除
モデルの定義を削除せずに、モデルの仕様を削除できます。CONSIDER文で、モデルを現行の定義として指定します。その後、MODEL文を発行し、モデルの仕様にENDを入力します。
例
例10-55 プログラムに指定されたモデル
次の例では、myprog
というプログラムに単純なモデルを作成(または上書き)します。プログラムの最初の行で、モデルを定義または現行の定義として指定します。2番目の行には、モデルの行を指定するMODEL文が含まれています。
このモデルは、予算の明細項目を計算します。モデル方程式は、line
ディメンションを基礎としています。
DEFINE myprog PROGRAM PROGRAM IF NOT EXISTS('myModel') THEN DEFINE myModel ELSE CONSIDER myModel MODEL JOINLINES(- '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') END
例10-56 入力ファイルを基にしたモデル
この例は、前の例と同じ単純なモデルのテキストを示すものですが、ここでは、モデルはbudget.txt
というASCIIディスク・ファイルに格納されています。
DEFINE income.budget MODEL 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
income.budget
モデルをアナリティック・ワークスペースに含めるには、次の文を実行します。このとき、myinpfiles
はディレクトリ・オブジェクトです。
INFILE 'myinpfiles/budget.txt'
例10-57 モデルの作成
損益計算書の明細項目を計算するincome.calc
というモデルを定義するとします。
define income.calc model ld Calculate line items in income statement
モデルを定義した後、MODEL
文またはOLAP Worksheetエディタを使用して、モデルの仕様を入力します。モデルの仕様には、DIMENSION
コマンド、代入文およびコメントを含めることができます。すべてのDIMENSION
コマンドは、最初の方程式の前に配置する必要があります。この例では、次のモデル内に示されている行を指定します。
DEFINE INCOME.CALC MODEL LD Calculate line items in income statement MODEL DIMENSION line net.income = opr.income - taxes opr.income = gross.margin - (marketing + selling + r.d) gross.margin = revenue - cogs END
モデルに方程式を記述する際は、任意の順序で配置できます。COMPILE
文を発行するかモデルを実行することによりモデルをコンパイルする時点で、モデル方程式の解決順序が決定されます。1つの方程式の計算結果が別の方程式への入力データとして使用される場合、方程式は要求される順序で解決されます。
income.calc
モデルを実行して、actual
をソリューション変数として使用するには、次の文を実行します。
income.calc actual
ソリューション変数にモデル方程式が基礎とするディメンション以外のディメンションがある場合は、それらの各ディメンションの現行のステータス・リストに対して自動でループ処理が実行されます。たとえば、actual
は、month
、division
およびline
によってディメンション化されているとします。division
がALL
に制限され、month
がOCT96
からDEC96
までに制限されている場合、各部門のステータスにある3か月についてincome.calc
モデルが解決されます。
例10-58 シナリオ・モデルの作成
たとえば、各部門の楽観的な収入額、悲観的な収入額および最良予測の収入額に基づいて収益額を計算するとします。次の例で、このシナリオ・モデルを作成する手順を説明します。
シナリオ・ディメンションscenario
をコールして、計算するシナリオの値を指定します。
次のコマンドで、scenario
に値optimistic
、pessimistic
およびbestguess
を指定します。
DEFINE scenario DIMENSION TEXT LD Names of scenarios MAINTAIN scenario ADD optimistic pessimistic bestguess
次のコマンドで、scenario
ディメンションとは別に、他の3つのディメンション(month
、line
およびdivision
)でディメンション化されるplan
という変数を作成します。
DEFINE plan DECIMAL <month line division scenario> LD Scenarios for financials
たとえば、収入や売上原価などの入力データをplan
変数に入力する必要があるとします。
最良予測のデータの場合、budget
変数のデータを使用できます。line
ディメンションを入力明細項目に制限し、budget
データをplan
変数にコピーします。
LIMIT scenario TO 'BESTGUESS' LIMIT line TO 'REVENUE' 'COGS' 'MARKETING' 'SELLING' 'R.D' plan = budget
楽観的なデータと悲観的なデータは、最良予測のデータに基づいて設定する場合があります。たとえば、楽観的なデータを最良予測のデータより15%高く設定し、悲観的なデータを最良予測のデータより12%低く設定するなどです。この場合、line
を入力明細項目に制限したまま、次のコマンドを実行します。
plan(scenario 'OPTIMISTIC') = 1.15 * plan(scenario 'BESTGUESS') plan(scenario 'PESSIMISTIC') = .88 * plan(scenario 'BESTGUESS')
最後に、入力データに基づいて結果を計算するモデルを記述してシナリオ・モデルを作成します。モデルには、この章の前述の項で示したbudget.calc
モデルの計算と非常に似ている計算が含まれる可能性があります。
各シナリオには、同じ方程式を使用することも、異なる方程式を使用することもできます。たとえば、売上原価を計算する場合、各シナリオの計算で異なる定数要素を使用するとします。各シナリオで異なる定数要素を使用するには、scenario
でディメンション化した変数を定義し、変数に適切な値を指定します。変数の名前がcogsval
であるとすると、モデルにcogs
明細項目を計算するための次の方程式を含めることができます。
cogs = cogsval * revenue
scenario
でディメンション化した変数を使用することで、シナリオ・モデルの柔軟性を大幅に向上できます。
同様に、各部門ごとに異なる定数要素を使用することもあります。この場合、division
でディメンション化した変数を定義し、各ディメンションの値を保持できます。たとえば、部門によって人件費が異なる場合、cogsval
をdivision
とscenario
でディメンション化します。
モデルを実行する際、ソリューション変数としてplan
を指定します。たとえば、scenario.calc
というモデルの場合、次の文でモデルを解決します。
scenario.calc plan
plan
の各ディメンションの現行のステータス・リストに対して自動でループ処理が実行されます。したがって、scenario.calc
モデルの実行時にscenario
ディメンションがALL
に制限されている場合、optimistic
、pessimistic
、bestguess
の3つのシナリオすべてに対してモデルが解決されます。
モデルの先頭のDIMENSION文は、モデルがデータを代入する1つ以上のディメンションの名前、またはディメンションベースの方程式で参照する1つ以上のディメンションの名前を指定します。ディメンションベースの方程式は、1つ以上のディメンション値によって表されるターゲットに計算の結果を代入します。
パラメータ
モデル方程式が基礎とする、コンポジットのベース・ディメンションを含む1つ以上のディメンション。サロゲートの作成元のディメンションのかわりに、ディメンション・サロゲートの名前を指定できます。その後、ディメンションの値のかわりにサロゲートの値を使用できます。
使用上の注意
モデルのディメンションベースの方程式
方程式(SET)がデータをディメンション値に代入するか計算でディメンション値を参照する場合、その方程式はディメンションベースの方程式と呼ばれます。ディメンションベースの方程式は、ディメンション自体を参照する必要はなく、ディメンションの値のみを参照することに注意してください。したがって、モデルにディメンションベースの方程式が含まれる場合、モデルの先頭のDIMENSION文でこれらの各ディメンションの名前を指定する必要があり、これによってOracle OLAPでは、この指定によって、各ディメンション値がどのディメンションに属しているかを判定できます。サロゲートの作成元のディメンションのかわりに、ディメンション・サロゲートの名前を指定できます。その後、ディメンションの値のかわりにサロゲートの値を使用できます。
また、モデルにディメンションベースの方程式が含まれている場合、モデルを実行する際にソリューション変数の名前を指定する必要があります。ソリューション変数は、モデルのデータのソースであるとともにターゲットでもあります。ディメンションベースの方程式で使用する入力データはソリューション変数が保持しており、また、計算結果はOracle OLAPによってソリューション変数の指定された値に格納されます。ソリューション変数は、通常、モデル方程式が基礎とするすべてのディメンションによってディメンション化されています。たとえば、財務アプリケーションにおいて、モデルがline
ディメンションを基礎とし、ソリューション変数actual
がそのディメンションの1つとしてline
を持つ場合などです。
ディメンションベースの方程式によって、モデリングには柔軟性があります。モデルを解決するまでモデリング変数を指定する必要がないため、同じモデルを異なるソリューション変数で実行できます。たとえば、同じモデルを、実績額(actual
)の変数、最良ケース予算額の変数および最悪ケース予算額の変数で実行することもできます。
ディメンションベースの方程式が、計算で使用するデータのソースまたは結果を代入するターゲットとしてディメンション値を参照する場合は、ディメンションをDIMENSION文に指定する必要があります。次の例では、Gross.Margin
、Revenue
およびCogs
はline
ディメンションの値であり、そのため、DIMENSION文にline
が指定されています。
DIMENSION line Gross.Margin = Revenue - Cogs
ディメンションがファンクション引数の場合
ディメンションが、データソースとしてディメンション値を使用するファンクションに対する引数の場合は、そのディメンションもDIMENSION文に指定する必要があります。次の例では、month
をDIMENSION文に指定する必要があります。
DIMENSION line, month Revenue = lag(Revenue, 1, month) * 1.05
前述のモデルの作成者は、line
およびmonth
によってディメンション化されたソリューション変数の使用を想定しています。そのため、モデルの実行時に、指定した時間ディメンション(month
)をディメンションの1つとして持つソリューション変数について、LAGファンクションが操作を行います。ただし、モデル・コンパイラではソリューション変数の時間ディメンションを予想できないため、DIMENSION文でそれを指定する必要があります。DIMENSION文にmonth
を含めない場合、モデルのコンパイルを試行した際にエラーが発生します。
時系列のデータを操作するファンクション(MOVINGTOTALまたはLAGなど)では、ディメンションがDAY、WEEK、MONTH、QUARTER、YEAR型の場合、dimension引数はオプションです。たとえば、前述の例では、LAGファンクションの指定でmonth
を省略できます。ただし、その場合でも、DIMENSION文には適切な時間ディメンションを指定する必要があります。
ソリューション変数
ディメンションベースの方程式を含むモデルを実行する場合、モデルのデータのソースであり、ターゲットでもある、ソリューション変数を指定します。通常、ソリューション変数は、モデルで使用するDIMENSIONコマンドにリストされたすべてのディメンションによってディメンション化されています。または、ソリューション変数がコンポジットでディメンション化されている場合は、DIMENSIONコマンドによってコンポジットのベース・ディメンションがリストされます。DIMENSIONコマンドはモデルで明示的に指定するか、含まれるモデルから継承できます。「INCLUDEとの非互換性」を参照してください。
コンポジットでの処理
ディメンション・リストにあるコンポジットのソリューション変数を使用してモデルを実行する必要がある場合は、DIMENSION文にコンポジットのベース・ディメンションを指定します。モデル方程式は、結果をベース・ディメンションの値に代入します。コンポジットで必要になる新しい値は、Oracle OLAPによって自動で作成されます。
複数のDIMENSIONコマンド
ディメンションベースの方程式で参照または使用されている各ディメンションについて、それぞれ別個のDIMENSION文を指定するか、単一のDIMENSION文にすべてのディメンションを指定できます。
コマンドの位置
すべてのDIMENSIONコマンドは、モデルの先頭で指定し、方程式より前の位置に指定する必要があります。
INCLUDEとの非互換性
モデルにINCLUDE文が含まれる場合、DIMENSIONコマンドを含めることはできません。INCLUDE文は、現行のモデルに別のモデルを含めることを指定する文です。この場合、現行のモデルは、含められたモデルからそのDIMENSIONコマンド(存在する場合)を継承します。モデルを含める際の詳細は、MODELコマンドのINCLUDE文を参照してください。
継承されたDIMENSIONコマンドは、明示的なDIMENSIONコマンドに対し規定されているすべての要件を満たす必要があります。「モデルにおけるDIMENSION文作成のガイドライン」を参照してください。
ディメンションの順序
モデルでDIMENSIONコマンドに複数のディメンションを指定する場合、ディメンションをリストする順序は重要です。
モデル方程式にディメンション値である可能性がある名前が含まれている場合、Oracle OLAPでは、モデルの明示的なDIMENSIONコマンドまたは継承されたDIMENSIONコマンドに出現するディメンションを、ディメンションがリストされている順序で検索し、その名前が、リストされているディメンションのディメンション値と一致するかどうかを確認します。検索は、一致する値が検出された時点で終了します。したがって、リストされている2つ以上のディメンションに同じ名前のディメンション値がある場合、Oracle OLAPでは、その値は、DIMENSION文で最初にリストされているディメンションに属するものと判断されます。名前が、リストされているディメンションの値と一致しない場合は、Oracle OLAPは、アタッチしたワークスペースの変数全体で検索します。
モデル方程式が結果をターゲット・ディメンションの値に代入する際、Oracle OLAPによって、DIMENSIONコマンドにリストされている他の(ターゲット以外の)ディメンションの値をループ処理するコードが作成されます。DIMENSIONコマンドに最初にリストされているターゲット以外のディメンションは、最も変化の遅いディメンションとして扱われます。たとえば、DIMENSION文にリストされているターゲット以外の最初のディメンションがMONTHであり、2番目のディメンションがDIVISIONであるとすると、まず、最初の月のすべての部門がループされ、その後、2番目の月のすべての部門がループされるというように続きます。
モデルにおけるDIMENSION文作成のガイドライン
DIMENSION
文を作成する場合、次の点に注意してください。
DIMENSION
文には、モデル方程式が基礎とするすべてのディメンションの名前をリストする必要があります。次の例では、gross.margin
、revenue
およびcogs
はline
ディメンションの値であり、そのため、DIMENSION
文にline
が指定されています。
DIMENSION line gross.margin = revenue - cogs
DIMENSION
文には、ディメンション値を参照するファンクションの引数であるディメンションもリストする必要があります。次の例では、month
をDIMENSION
コマンドに指定する必要があります。
DIMENSION line, month revenue = LAG(revenue, 1, month) * 1.05
モデル方程式が結果をディメンション値に代入する際、DIMENSION
文にリストされているターゲット以外のディメンションの値をループするコードが作成されます。DIMENSION
文に最初にリストされているターゲット以外のディメンションは、最も変化の遅いディメンションとして扱われます。
次のガイドラインに従ってDIMENSION
文のディメンションおよびソリューション変数のディメンションを指定すると、モデルは最も効率よく実行されます。
モデルのターゲット・ディメンションは、DIMENSION
文では最初のディメンションとしてリストし、ソリューション変数のディメンションでは最後のディメンションとしてリストします。
DIMENSION
文では、ターゲット以外のディメンションは、ソリューション変数の定義に指定されている順序とは逆の順序でリストします。したがって、モデルおよびソリューション変数で、最も変化の早いディメンションと最も変化の遅いディメンションが同じ順序となります。
ソリューション変数にモデル方程式で使用または参照されないディメンションがある場合は、それらのディメンションはDIMENSION
文には含めません。
アナリティック・ワークスペースにディメンション値と同じ名前を持つ変数が含まれるか、同じディメンション値が異なる2つのディメンションに存在する場合は、モデル方程式にあいまいさが生じる可能性があります。モデル方程式では変数とディメンション値は同じ方法で使用できるため、名前は変数の名前であることもあり、アナリティック・ワークスペース内のディメンションの値であることもあります。
DIMENSION
文は、代入文の各名前参照が変数またはディメンション値のいずれであるかを判定するために使用されます。名前参照の解決方法の説明は、「モデルのコンパイル」を参照してください。
関連項目: 次の事項に関する情報は、「OLAP DMLモデル・オブジェクト」、SETおよびMODELを参照してください。
|
例
例10-59 予算予測のための単純なモデル
次の文では、損益計算書の項目についての予算額を予測する単純なモデルを定義します。
DEFINE income.budget MODEL LD Model for estimating budget line items MODEL dimension line, month Revenue = 1.05 * LAG(Revenue 1 month) Gross.Margin = Revenue - Cogs Opr.Income = Gross.Margin - (Marketing + Selling + R.D) Net.Income = Opr.Income - Taxes END
モデル方程式はline
ディメンションを基礎とするため、DIMENSION文にはline
が指定されています。ディメンションmonth
は、REVENUE値に対し操作を行うLAGファンクション内の時間ディメンションであるため、DIMENSION文にはmonth
も指定されています。
モデルを実行すると、month
ディメンションの現行のステータスにある値がループ処理されます。
INCLUDE文は、あるモデルを別のモデルに含める文です。INCLUDE文はモデル内でのみ使用できます。
INCLUDEを使用すると、複数のモデルで共通する方程式を配置して、別個のモデルにモジュール・モデルを作成し、必要に応じてそのモデルを他のモデルに含めることができます。さらに、INCLUDE文によりwhat-if分析が容易になります。実験的なモデルでは、ベース・モデルから方程式を流用し、それを選択的に新しい方程式に置き換えることが可能です。
使用上の注意
モデルにおけるINCLUDE文コード化のガイドライン
モデルでINCLUDE文を使用するには、次のガイドラインに従ってください。
モデルに指定できるINCLUDE文は1つのみです。
INCLUDE文は、モデルのいずれの方程式よりも前の位置に指定する必要があります。
モデルにINCLUDE文が含まれる場合、DIMENSION文を含めることはできません。
モデルのネスト方法
INCLUDE文をベース・モデルで使用することにより、モデルをネストできます。たとえば、モデルmyModel1
がモデルmyModel2
を含み、モデルmyModel2
がモデルmyModel3
を含むことが可能です。ネストしたモデルは階層形式になります。この例では、myModel1
が一番上の階層になり、myModel3
がルートになります。ベース・モデルは、階層内でそれより上位にあるモデルを含むことができません。前述の例では、myModel2
はmyModel1
を含むことができず、myModel3
はmyModel1
またはmyModel2
を含むことができません。
方程式間の依存関係
INCLUDE文を含むモデルをコンパイルする場合、コンパイラは、方程式を順序付けたりブロックに構成したりする際に、含まれているすべてのモデルにある方程式間の依存関係を考慮します。したがって、MODEL.COMPRPT
プログラムを実行してコンパイルの結果を確認する、または親モデルの実行前にMODTRACEオプションをYES
に設定すると、含まれているモデルの階層の異なるレベルの方程式が散在している場合があります。例10-61「コンパイル・レポートの生成」を参照してください。
含まれているモデルの方程式間に依存関係が見つからない場合、コンパイラはルート・モデルの方程式を最初に実行し、親モデル内の方程式を最後に実行します。
親モデルのコンパイル
親モデルをコンパイルすると、コンパイル済コードがまだ存在していない場合、コンパイラによって、含まれている階層でその親モデルの下にあるすべてのベース・モデルがコンパイルされます。特定のモデルでエラーが検出されると、そのモデルおよび階層でそれより上にあるモデルはコンパイルされません。階層のルート・モデルにエラーがあると、上位のモデルはルート・モデルからDIMENSION文を継承できません。この場合、エラーの実際の発生箇所がルート・モデルでも、コンパイラは親モデルにおけるエラーとしてレポートすることがあります。たとえば、アタッチしたアナリティック・ワークスペースにターゲット・ディメンション値が存在しないとして、コンパイラによってレポートされる可能性があります。一方、コンパイラが親モデル内でエラーを検出し、そこに含まれているモデル内にはエラーが見つからない場合、親モデルがコンパイルされなくても、含まれているモデルはコンパイルされます。
方程式のマスク
what-if分析をサポートするために、モデルの方程式で前の方程式をマスクできます。以前の方程式は、同じモデルまたはそれに含まれているモデルにあります。マスクされた方程式は実行されません。モデルのコンパイル後にMODEL.COMPRPT
プログラムを実行すると、マスクされた方程式は、コンパイルしたモデルについてのレポートには表示されません。
ある方程式が、前の方程式のターゲットでもある変数またはディメンション値に値を代入する場合、マスクを実行できます。マスクのルールは次のとおりです。
前の方程式のターゲットが、後の方程式のターゲットと同じように限定されている場合、前の方程式はマスクされ、後の方程式が実行されます。次の例では、完全に同じように限定されたターゲットを持つ2つの方程式が示されています。
Equation from a base model: BUDGET(LINE REVENUE) = 5000 Equation from the parent model: BUDGET(LINE REVENUE) = 3500
この例では、ベース・モデルの方程式はマスクされ、親モデルの方程式が実行されます。
前の方程式のターゲットが後の方程式のターゲットよりもさらに限定されている場合、前の方程式はマスクされます。後の方程式が実行されます。
より限定されたターゲットとは、より少ないディメンション値に影響を与えるターゲットです。ベース・モデルおよび親モデルに次のような方程式があるとします。
Equation from a base model: BUDGET(LINE REVENUE) = 2500 Equation from the parent model: BUDGET = 4000
ベース・モデルの方程式は、LINEディメンションのREVENUE値に対してのみ値を代入するため、より限定されています。親モデルの方程式は、LINEディメンションのすべての値にデータを代入します。この例では、ベース・モデルの方程式はマスクされ、親モデルの方程式が実行されます。
前の方程式のターゲットが後の方程式のターゲットよりも限定されていない場合、マスクは行われません。方程式は両方とも実行されます。
ベース・モデルおよび親モデルに次のような方程式があるとします。
Equation from a base model: BUDGET = LAG(ACTUAL, 1, MONTH) Equation from the parent model: BUDGET(LINE REVENUE) = 6500 Equation from the parent model: BUDGET(LINE COGS) = 4000
ベース・モデルの方程式は、LINEディメンションのすべての値にデータを代入します。親モデルの方程式は、それぞれLINEディメンションの単一の値に対してのみ値を代入するため、より限定されています。この例では、ベース・モデルの方程式が最初に実行され、その後、親モデルの方程式が実行されます。
この機能によって、多数の値を1つの方程式で代入し、後続の方程式で個々の値の置換やテストが可能になります。
前の方程式のターゲットが後の方程式のターゲットとは異なって限定されている場合、マスクは行われません。方程式は両方とも実行されます。次の例では、方程式はどちらも実行されます。
Equation from a base model: BUDGET(LINE REVENUE) = 5000 Equation from the parent model: BUDGET(LINE COGS) = 4500
例
例10-60 モデルを含むモデル
この例は、base.lines
というベース・モデルを含むincome.plan
という親モデルを示しています。
DEFINE income.plan MODEL MODEL INCLUDE base.lines revenue = LAG(revenue, 1, month) * 1.02 cogs = LAG(cogs, 1, month) * 1.01 taxes = 0.3 * opr.income END DEFINE BASE.LINES MODEL MODEL DIMENSION line month net.income = opr.income - taxes opr.income = gross.margin - marketing gross.margin = revenue - cogs END
例10-61 コンパイル・レポートの生成
次の文を使用して、親モデルをコンパイルし、コンパイル・レポートを生成します。
COMPILE income.plan MODEL.COMPRPT income.plan
これらの文によって生成される出力は次のとおりです。
MODEL INCOME.PLAN <LINE MONTH> BLOCK 1 (SIMPLE) INCOME.PLAN 2: revenue = lag(revenue, 1, month) * 1.02 INCOME.PLAN 3: cogs = lag(cogs, 1, month) * 1.01 BASE.LINES 4: gross.margin = revenue - cogs BASE.LINES 3: opr.income = gross.margin - marketing INCOME.PLAN 4: taxes = 0.3 * opr.income BASE.LINES 2: net.income = opr.income - taxes END BLOCK 1