PROGRAMコマンドは、新規または既存のプログラムにまったく新しい内容を入力するコマンドです。プログラムに複数行のコードがすでに存在する場合、これらは上書きされます。
PROGRAMを使用して、プログラム・オブジェクトの内容を入力するには、プログラム・オブジェクトの定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。
PROGRAM文の代替文はEDIT PROGRAM文であり、OLAP Worksheet内でのみ使用できます。EDIT PROGRAM文を実行すると、programオブジェクトの仕様を追加、削除または変更できる編集ウィンドウが開きます。
パラメータ
プログラムの行を構成するOLAP DML文を表すテキスト式。プログラム内には、ほとんどのOLAP DML文を使用できます。OLAP DMLプログラムの記述、コンパイルおよびデバッグの詳細は、第6章「OLAP DMLプログラム」を参照してください。
プログラム内に記述できる最大の行数は32,000です。コマンドライン・レベルでPROGRAM文をコード化する際は、改行デリミタ(\n
)でプログラムの行を分けるか、「即時実行のプログラム」に示すJOINLINESファンクションを使用します。
例
例10-79 引数を持つユーザー定義ファンクション
アナリティック・ワークスペースにunits.plan
という名前の変数が含まれ、この変数はproduct
、district
およびmonth
ディメンションによってディメンション化されているとします。この変数は販売予定の製品数を示すINTEGERデータを保持します。
また、units_goals_met
という名前のプログラムを定義するとします。このプログラムはユーザー定義ファンクションです。これは、units.plan
変数の特定のセルを指定する3つのディメンション値の引数を受け取り、さらに、実際に販売された数量をそのセルに指定する4番目の引数を受け取ります。このプログラムは、コール側プログラムにブール値を返します。実際の販売数量が予定販売数量の10%以内である場合はYES
を返し、そうでない場合はNO
を返します。
units_goals_met
プログラムの定義は、次のとおりです。
DEFINE units_goal_met PROGRAM BOOLEAN LD Tests whether actual units met the planned estimate "Program Initialization ARGUMENT userprod TEXT ARGUMENT userdist TEXT ARGUMENT usermonth TEXT ARGUMENT userunits INTEGER VARIABLE answer boolean TRAP ON errorlabel PUSH product district month "Program Body LIMIT product TO userprod LIMIT district TO userdist LIMIT month TO usermonth IF (units.plan - userunits) / units.plan GT .10 THEN answer = NO ELSE answer = YES "Normal Exit POP product district month RETURN answer "Abnormal Exit errorlabel: POP product district month SIGNAL ERRORNAME ERRORTEXT END
units_goal_met
プログラムを実行し、success
という名前の変数に戻り値を格納するには、代入文(SET)を使用します。
success = units_goal_met('TENTS' 'BOSTON' 'JUN96' 2000)
例10-80 即時実行のプログラム
この例は、柔軟な即時実行のレポート・プログラムを作成して、アンパサンド置換を使用した従来型のプログラムの非能率性を回避します。従来型のプログラムには、次のようなループが存在します。
FOR &dimname ROW &dimname &varname
アンパサンド置換を回避するには、たとえば、STANDARDREPというプログラムを定義し、内部にコードを記述しないままにするか、破棄しても差し支えないコードを記述しておきます。次に、レポート・プログラムに次のような行を挿入します。
DEFINE myreport PROGRAM LD Program to produce my report PROGRAM ARGUMENT dimname TEXT ARGUMENT varname TEXT ... CONSIDER standardrep PROGRAM JOINLINES(JOINCHARS('FOR ', dimname) - JOINCHARS(' ROW ', dimname, ' ', varname) ) COMPILE standardrep standardrep ...
例10-81 入力ファイルを基にしたプログラム
この例は、salesrep.inf
という名前のASCIIディスク・ファイルに記述された簡単なプログラムの本文です。ファイルの最初の行にはプログラムが定義され、2番目の行にはPROGRAM文が含まれ、後続の行にはプログラムの行が記述されています。
DEFINE salesrep PROGRAM PROGRAM PUSH month product district TRAP ON haderror LIMIT month TO FIRST 3 LIMIT product TO FIRST 3 LIMIT district TO ALL REPORT grandtotals sales haderror: POP month product district END
salesrep
プログラムをアナリティック・ワークスペースに含めるには、次の文を実行します。
INFILE 'salesrep.inf'
既存のプログラムを基にして入力ファイルを作成するには、OUTFILE文を使用します。