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

前
 
次
 

MODEL

MODELコマンドは、新規または既存のモデル・オブジェクトにまったく新しい仕様を入力するコマンドです。モデルに既存の仕様がある場合、その仕様は上書きされます。MODELを使用して、モデル・オブジェクトにモデル仕様を割り当てるには、定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

MODEL文の代替文はEDIT MODEL文であり、OLAP Worksheet内でのみ使用できます。EDIT MODEL文を実行すると、modelオブジェクトの仕様を追加、削除または変更できる編集ウィンドウが開きます。

モデル・オブジェクトへの仕様の追加は、データをモデリングする際の一処理です。モデルの詳細は、「OLAP DMLモデル・オブジェクト」を参照してください。

構文

MODEL specification

パラメータ

specification

次のOLAP DML文を1つ以上含む複数行のテキスト式。

SET(=)コマンド     
DIMENSION(モデル内)
INCLUDE

モデルの最大行数は、4,000行です。各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでALLOCMAP文をコード化する際は、改行デリミタ(\n)で文を区切るか、JOINLINESを使用します。

モデルの仕様設計の詳細は、「モデルの仕様」を参照してください。

使用上の注意

モデルの仕様

モデルの仕様は、次のOLAP DML文で構成されます。

  1. 次のうちの1つ。

    • モデルに含める別のモデルの名前を指定するINCLUDE文(1文のみ)。詳細は、「モデルのネスト」を参照してください。

    • 「モデルにおけるDIMENSION文作成のガイドライン」に従ってコーディングした1つ以上のDIMENSION(モデル内)文。


      注意:

      モデルにINCLUDE文が含まれる場合、DIMENSION文を含めることはできません。ただし、INCLUDE文で参照されているモデルまたは階層のルート・モデルには、親モデルで必要なDIMENSION文が含まれている必要があります。

  2. 1つ以上のSETコマンドまたは「モデルでの方程式のルール」に従って記述した方程式。


    関連項目:

    Oracle OLAPによるモデルの方程式の処理方法については、「ディメンション・ステータスおよびモデル方程式」を参照してください。

  3. モデルの仕様の終わりを示す最後の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は、monthdivisionおよびlineによってディメンション化されているとします。divisionALLに制限され、monthOCT96からDEC96までに制限されている場合、各部門のステータスにある3か月についてincome.calcモデルが解決されます。

例10-58 シナリオ・モデルの作成

たとえば、各部門の楽観的な収入額、悲観的な収入額および最良予測の収入額に基づいて収益額を計算するとします。次の例で、このシナリオ・モデルを作成する手順を説明します。

シナリオ・ディメンションscenarioをコールして、計算するシナリオの値を指定します。

次のコマンドで、scenarioに値optimisticpessimisticおよびbestguessを指定します。

DEFINE scenario DIMENSION TEXT
LD Names of scenarios
MAINTAIN scenario ADD optimistic pessimistic bestguess

次のコマンドで、scenarioディメンションとは別に、他の3つのディメンション(monthlineおよび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でディメンション化した変数を定義し、各ディメンションの値を保持できます。たとえば、部門によって人件費が異なる場合、cogsvaldivisionscenarioでディメンション化します。

モデルを実行する際、ソリューション変数としてplanを指定します。たとえば、scenario.calcというモデルの場合、次の文でモデルを解決します。

scenario.calc plan

planの各ディメンションの現行のステータス・リストに対して自動でループ処理が実行されます。したがって、scenario.calcモデルの実行時にscenarioディメンションがALLに制限されている場合、optimisticpessimisticbestguessの3つのシナリオすべてに対してモデルが解決されます。


DIMENSION(モデル内)

モデルの先頭のDIMENSION文は、モデルがデータを代入する1つ以上のディメンションの名前、またはディメンションベースの方程式で参照する1つ以上のディメンションの名前を指定します。ディメンションベースの方程式は、1つ以上のディメンション値によって表されるターゲットに計算の結果を代入します。

構文

DIMENSION dimension1 [, dimensionN]

パラメータ

dimension

モデル方程式が基礎とする、コンポジットのベース・ディメンションを含む1つ以上のディメンション。サロゲートの作成元のディメンションのかわりに、ディメンション・サロゲートの名前を指定できます。その後、ディメンションの値のかわりにサロゲートの値を使用できます。

使用上の注意

モデルのディメンションベースの方程式

方程式(SET)がデータをディメンション値に代入するか計算でディメンション値を参照する場合、その方程式はディメンションベースの方程式と呼ばれます。ディメンションベースの方程式は、ディメンション自体を参照する必要はなく、ディメンションののみを参照することに注意してください。したがって、モデルにディメンションベースの方程式が含まれる場合、モデルの先頭のDIMENSION文でこれらの各ディメンションの名前を指定する必要があり、これによってOracle OLAPでは、この指定によって、各ディメンション値がどのディメンションに属しているかを判定できます。サロゲートの作成元のディメンションのかわりに、ディメンション・サロゲートの名前を指定できます。その後、ディメンションの値のかわりにサロゲートの値を使用できます。

また、モデルにディメンションベースの方程式が含まれている場合、モデルを実行する際にソリューション変数の名前を指定する必要があります。ソリューション変数は、モデルのデータのソースであるとともにターゲットでもあります。ディメンションベースの方程式で使用する入力データはソリューション変数が保持しており、また、計算結果はOracle OLAPによってソリューション変数の指定された値に格納されます。ソリューション変数は、通常、モデル方程式が基礎とするすべてのディメンションによってディメンション化されています。たとえば、財務アプリケーションにおいて、モデルがlineディメンションを基礎とし、ソリューション変数actualがそのディメンションの1つとしてlineを持つ場合などです。

ディメンションベースの方程式によって、モデリングには柔軟性があります。モデルを解決するまでモデリング変数を指定する必要がないため、同じモデルを異なるソリューション変数で実行できます。たとえば、同じモデルを、実績額(actual)の変数、最良ケース予算額の変数および最悪ケース予算額の変数で実行することもできます。

ディメンションベースの方程式が、計算で使用するデータのソースまたは結果を代入するターゲットとしてディメンション値を参照する場合は、ディメンションをDIMENSION文に指定する必要があります。次の例では、Gross.MarginRevenueおよびCogslineディメンションの値であり、そのため、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.marginrevenueおよびcogslineディメンションの値であり、そのため、DIMENSION文にlineが指定されています。

    DIMENSION line
    gross.margin = revenue - cogs
    
  • DIMENSION文には、ディメンション値を参照するファンクションの引数であるディメンションもリストする必要があります。次の例では、monthDIMENSIONコマンドに指定する必要があります。

    DIMENSION line, month
    revenue = LAG(revenue, 1, month) * 1.05
    
  • モデル方程式が結果をディメンション値に代入する際、DIMENSION文にリストされているターゲット以外のディメンションの値をループするコードが作成されます。DIMENSION文に最初にリストされているターゲット以外のディメンションは、最も変化の遅いディメンションとして扱われます。

  • 次のガイドラインに従ってDIMENSION文のディメンションおよびソリューション変数のディメンションを指定すると、モデルは最も効率よく実行されます。

    • モデルのターゲット・ディメンションは、DIMENSION文では最初のディメンションとしてリストし、ソリューション変数のディメンションでは最後のディメンションとしてリストします。

    • DIMENSION文では、ターゲット以外のディメンションは、ソリューション変数の定義に指定されている順序とは逆の順序でリストします。したがって、モデルおよびソリューション変数で、最も変化の早いディメンションと最も変化の遅いディメンションが同じ順序となります。

  • ソリューション変数にモデル方程式で使用または参照されないディメンションがある場合は、それらのディメンションはDIMENSION文には含めません。

  • アナリティック・ワークスペースにディメンション値と同じ名前を持つ変数が含まれるか、同じディメンション値が異なる2つのディメンションに存在する場合は、モデル方程式にあいまいさが生じる可能性があります。モデル方程式では変数とディメンション値は同じ方法で使用できるため、名前は変数の名前であることもあり、アナリティック・ワークスペース内のディメンションの値であることもあります。

  • DIMENSION文は、代入文の各名前参照が変数またはディメンション値のいずれであるかを判定するために使用されます。名前参照の解決方法の説明は、「モデルのコンパイル」を参照してください。


    関連項目:

    次の事項に関する情報は、「OLAP DMLモデル・オブジェクト」、SETおよびMODELを参照してください。
    • モデルへの文の入力

    • ディメンションの値の参照方法

    • 文からコードが作成される方法の説明

    • ソリューション変数がDIMENSIONコマンドにリストされているよりも多いまたは少ないディメンションを持つ場合の、Oracle OLAPの対処方法の説明


例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を使用すると、複数のモデルで共通する方程式を配置して、別個のモデルにモジュール・モデルを作成し、必要に応じてそのモデルを他のモデルに含めることができます。さらに、INCLUDE文によりwhat-if分析が容易になります。実験的なモデルでは、ベース・モデルから方程式を流用し、それを選択的に新しい方程式に置き換えることが可能です。

構文

INCLUDE model

パラメータ

model

現行のモデルに含めるモデルの名前。現行のモデルは親モデルと呼ばれます。含めるモデルはベース・モデルと呼ばれます。

使用上の注意

モデルにおけるINCLUDE文コード化のガイドライン

モデルでINCLUDE文を使用するには、次のガイドラインに従ってください。

  • モデルに指定できるINCLUDE文は1つのみです。

  • INCLUDE文は、モデルのいずれの方程式よりも前の位置に指定する必要があります。

  • モデルにINCLUDE文が含まれる場合、DIMENSION文を含めることはできません。

モデルのネスト方法

INCLUDE文をベース・モデルで使用することにより、モデルをネストできます。たとえば、モデルmyModel1がモデルmyModel2を含み、モデルmyModel2がモデルmyModel3を含むことが可能です。ネストしたモデルは階層形式になります。この例では、myModel1が一番上の階層になり、myModel3がルートになります。ベース・モデルは、階層内でそれより上位にあるモデルを含むことができません。前述の例では、myModel2myModel1を含むことができず、myModel3myModel1または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