ブロック・ストレージ・データベース用の計算スクリプトの作成

この項の内容:

計算スクリプトの使用

計算スクリプトの作成プロセス

計算スクリプト構文の理解

計算コマンドの使用

計算スクリプトでの式の使用

計算スクリプトを使用した高機能計算の制御

式と計算のグループ化

計算スクリプトでの代替変数、ランタイム代替変数および環境変数の使用

データの消去およびコピー

データベースのサブセットの計算

DATAEXPORTコマンドを使用したデータのエクスポート

潜在的なブロックでの計算の有効化

パーティションでの計算スクリプトの使用

計算スクリプトの保存、実行およびコピー

計算結果の確認

計算に必要なディスク・サイズの判断

この章の情報は、ブロック・ストレージ・データベースのみに適用され、集約ストレージ・データベースとは関係がありません。

関連項目:

この章のすべての例は、Sample.Basicデータベースに基づいています。

この章で参照される計算コマンドの詳細は、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

計算スクリプトの使用

計算スクリプトには一連の計算コマンド、等式および式が記述されています。計算スクリプトを使用してデータベース・アウトラインで定義されていない計算を定義できます。

計算スクリプトでは、デフォルトの計算(CALC ALL)またはユーザーが選択した計算(データベースの一部の計算、メンバー間でのデータ値のコピーなど)を実行できます。

次のタスクを実行するには、計算スクリプトを記述する必要があります:

  • データベースのサブセットを計算する場合

    データベースのサブセットの計算を参照してください。

  • データベース内の密次元と疎次元の計算順序を変更する場合

  • 特定の順序で複雑な計算を実行する場合や、データ間で複数の繰返しを必要とする計算を実行する場合(たとえば、一部の2パス計算には計算スクリプトが必要です)

  • 勘定科目タグが設定されていない次元で2パス計算を実行する場合

    2パス計算の使用を参照してください。

  • 通貨換算を実行する場合

    通貨換算アプリケーションの設計および作成。を参照してください。

  • データベース・アウトラインの式とは異なるメンバー式を計算する場合(計算スクリプトの式は、データベース・アウトラインの式を上書きします)

  • APIインタフェースを使用してカスタム計算を動的に作成する場合

  • 計算でフロー制御ロジックを使用する場合(たとえば、IF...ELSE....ENDIFまたはLOOP...ENDLOOPコマンドを使用する場合)

  • 特定のメンバーのデータを消去するか、コピーする場合

    データのコピーを参照してください。

  • データベース計算に使用する一時変数を定義する場合

    データ変数の宣言を参照してください。

  • データベース・アウトラインの式または勘定科目プロパティを変更した後に、強制的にデータ・ブロックを再計算する場合

  • データベースを計算するときにEssbaseで高機能計算を使用する方法を制御する場合

    高機能計算についての理解。を参照してください。

次の計算スクリプトは、年、メジャー、市場および製品次元から実績値を計算します:

         FIX (Actual)
      

            CALC DIM(Year, Measures, Market, Product);
      

         ENDFIX
      

管理サービス・コンソールで計算スクリプト・エディタを使用すると、次の操作で計算スクリプトを作成できます:

  • スクリプト・エディタのテキスト領域に計算スクリプトを入力する

  • スクリプト・エディタのユーザー・インタフェース機能を使用してスクリプトを作成する

  • テキスト・エディタでスクリプトを作成し、そのスクリプト・テキストを計算スクリプト・エディタに貼り付ける

Oracle Essbase Administration Services Online Helpの「計算スクリプト・エディタについて」を参照してください。

Administration Servicesを使用して作成した計算スクリプトには、デフォルトで.csc拡張子が付きます。計算スクリプトをAdministration ServicesまたはSmart Viewで実行する場合は、ファイルに.csc拡張子が必要です。ただし、計算スクリプトはテキスト・ファイルなので、MaxLまたはESSCMDを使用してテキスト・ファイルを計算スクリプトとして実行できます。

計算スクリプトをメモリー内に文字列として定義すると、EssbaseクライアントまたはEssbaseサーバー上のAPIからアクセスできます。このように、ダイアログ・ボックスで、ユーザーの選択に基づいて計算スクリプトを動的に作成できます。

計算スクリプトの作成プロセス

計算スクリプトを作成するには、次のプロセスを使用します:

  1. 計算スクリプトを作成するか、既存の計算スクリプトを開きます。

    Oracle Essbase Administration Services Online Helpの「スクリプトの作成」または「スクリプトを開く」を参照してください。

  2. 計算スクリプトの内容を入力または編集します。

    次の詳細は、Oracle Essbase Administration Services Online Helpの「計算スクリプト・エディタについて」を参照してください:

    • アウトラインへのスクリプトの関連付け

    • アウトライン・ツリーでのメンバーのサーチ

    • アウトライン・ツリーからスクリプトへの次元、メンバーおよび別名の挿入

    • ツリーからスクリプトへの関数とコマンドの挿入

    • 構文のオートコンプリートの使用

    • スクリプト構文の検査

    • スクリプトの実行

    • スクリプトの色分けされた要素の表示

    • スクリプトでのテキストのサーチ

    • フォントの変更

  3. 計算スクリプトを検証します。

    構文の検査を参照してください。

  4. 計算スクリプトを保存します。

    計算スクリプトの保存を参照してください。

  5. 計算スクリプトを実行します。

    計算スクリプトの実行を参照してください。

  6. 計算スクリプトの結果を確認します。

    計算結果の確認を参照してください。

  7. 必要に応じて、計算スクリプトで他の操作を行います。

    Oracle Essbase Administration Services Online Helpで、次のトピックを参照してください:

    • 「オブジェクトのロックおよびロック解除」

    • 「スクリプトのコピー」

    • 「スクリプトの名前変更」

    • 「スクリプトの削除」

    • 「スクリプトの印刷」

計算スクリプト構文の理解

Essbaseには、データベースの計算方法の制御に使用できる柔軟なコマンドのセットが用意されています。コマンドと式から計算スクリプトを作成できます。

計算スクリプトを作成するときは、次のルールを適用する必要があります:

  • 各式または計算スクリプト・コマンドはセミコロン(;)で終わります。例:

    例1

                CALC DIM(Product, Measures);
             

    例2

                DATACOPY Plan TO Revised_Plan;
             

    例3

                "Market Share" = Sales % Sales -> Market;
             

    例4

                   IF (Sales <> #MISSING)
                
    
                      Commission = Sales * .9;
                
    
                      ELSE
                
    
                         Commission = #MISSING;
                
    
                   ENDIF;
                

    次のコマンドはセミコロンで終わる必要はありません:

                   IF
                
    
                   ENDIF
                
    
                   ELSE
                
    
                   ELSIF
                
    
                   FIX
                
    
                   ENDFIX
                
    
                   EXCLUDE
                
    
                   ENDEXCLUDE
                
    
                   LOOP
                
    
                   ENDLOOP
                

    注:

    必須ではありませんが、式中の各ENDIFステートメントの後にセミコロンを付けることをお薦めします。

  • メンバー名が次のいずれかの条件に該当する場合は、そのメンバー名を二重引用符(" ")で囲みます:

  • IFステートメントまたは相互依存の式を使用している場合は、式を丸カッコで囲み、その式を指定したメンバーに関連付けます。

    たとえば、次の式は、データベース・アウトラインのCommissionメンバーに関連付けられています:

                Commission
    (IF(Sales < 100)
       Commission = 0;
    ENDIF;)
             
  • 式中の各IFステートメントは、ENDIFステートメントで終わります。

    たとえば、前の式では簡単なIF...ENDIFステートメントが使用されています。

  • 別のIFステートメントにネストされたIFステートメントを使用している場合は、各IFステートメントをENDIFステートメントで終わらせます。

    例:

                "Opening Inventory"
    (IF (@ISMBR(Budget))
       IF (@ISMBR(Jan))
          "Opening Inventory" = Jan;
       ELSE 
          "Opening Inventory" = @PRIOR("Ending Inventory");
       ENDIF;
    ENDIF;)
             
  • ELSEまたはELSEIFステートメントは、ENDIFステートメントで終了する必要はありません。

    例:

                Marketing
    (IF (@ISMBR(@DESCENDANTS(West)) OR @ISMBR(@DESCENDANTS(East)))
       Marketing = Marketing * 1.5;
    ELSEIF(@ISMBR(@DESCENDANTS(South)))
       Marketing = Marketing * .9;
    ELSE 
       Marketing = Marketing * 1.1;
    ENDIF;)
             

    注:

    式中にELSEIF(1語)ではなくELSE IF(スペースあり)を使用した場合は、IFステートメントに対応するENDIFステートメントを記述する必要があります。

  • 各FIXステートメントは、ENDFIXステートメントで終わります。

    例:

                FIX(Budget,@DESCENDANTS(East))
       CALC DIM(Year, Measures, Product);
    ENDFIX
             
  • 各EXCLUDEステートメントは、ENDEXCLUDEステートメントで終わります。

計算スクリプトを記述するときは、計算スクリプト・エディタ構文チェッカを使用して、構文を検査します。構文の検査を参照してください。

コメントの追加

計算スクリプトにコメントを追加して、注釈を付けることができます。Essbaseでは、計算スクリプトの実行時にこのコメントを無視します。

コメントを含めるには、コメントを/*で開始し、*/で終了させる必要があります。例:

         /* This calculation script comment
      

            spans two lines. */
      

構文の検査

Essbaseには、計算スクリプトの構文エラー(関数名の入力ミスなど)にフラグを付ける構文チェッカが用意されています。その結果は、管理サービス・コンソールのメッセージ・パネルに表示されます。

構文エラーが見つからなかった場合は、Essbaseにより構文の検査が正常に終了したことが示されます。

構文エラーが見つかった場合は、Essbaseにより構文の検査に失敗したことが示され、エラーが1つずつ表示されます。通常、エラー・メッセージにはエラーが発生した行の番号と簡単な説明が記載されます。たとえば、計算スクリプト・コマンドの最後にセミコロン行末文字がない場合は、Essbaseで次のようなメッセージが表示されます:

      Error: line 1: invalid statement; expected semicolon
   

最後のエラーまでくると、Essbaseで次のメッセージが表示されます:

      No more errors
   

  計算スクリプト・エディタで計算スクリプトの構文を検査する方法は、『Oracle Essbase Administration Servicesオンライン・ヘルプ』の「スクリプト構文の検査」を参照してください。

注:

構文チェッカでは、計算スクリプトが予想どおりに動作しないときに発生するセマンティク・エラーを特定できません。セマンティク・エラーを見つけるには、計算を実行して、結果が予想どおりかどうかを確認します。計算結果の確認を参照してください。

計算コマンドの使用

このセクションのトピックでは、機能別にグループ化された計算コマンドについて説明します。参照:

データベース・アウトラインの計算

表81に、データベース・アウトラインの構造と式に基づくデータベース計算を実行する計算コマンドをリストします。

表 81. データベースを計算するためのコマンドのリスト

コマンド

計算

CALC ALL

アウトラインに基づくデータベース全体

CALC DIM

指定された次元

CALC TWOPASS

勘定科目タグが付けられた次元における、2パス・タグが付けられたすべてのメンバー

membername

データベース・アウトラインのメンバーに適用される式。membernameは、式が適用されるメンバーの名前

CALC AVERAGE

勘定科目タグが付けられた次元における、平均タグが付けられたすべてのメンバー

CALC FIRST

勘定科目タグが付けられた次元における、期首タグが付けられたすべてのメンバー

CALC LAST

勘定科目タグが付けられた次元における、期末タグが付けられたすべてのメンバー

CCONV

通貨換算

計算のフローの制御

表82に、計算のフローを操作するコマンドをリストします:

表 82. 計算のフローを制御するためのコマンドのリスト

コマンド

計算

FIX...ENDFIX

包含によってデータベースのサブセットを計算

EXCLUDE...ENDEXCLUDE

除外によってデータベースのサブセットを計算

LOOP...ENDLOOP

コマンドの繰返し回数を指定

また、IFとENDIFのコマンドを使用して、条件付き計算を指定することもできます。

注:

Essbaseでは、1つの計算スクリプトから別の計算スクリプトへの分岐はできません。

データ変数の宣言

表83に、一時変数を宣言し、必要に応じてその初期値を設定するコマンドをリストします。一時変数には、計算の中間結果が保管されます。

計算スクリプトで代替変数も使用できます。計算スクリプトでの代替変数の使用を参照してください。

表 83. データ変数を宣言するためのコマンドのリスト

コマンド

計算

ARRAY

1次元の配列変数を宣言

VAR

単一の値を含む一時変数を宣言

一時変数に保管される値は、計算スクリプトの実行中にのみ存在します。一時変数の値についてはレポートできません。

変数および配列の名前は、次のいずれかの文字を含む文字列になります:

  • 文字a-z

  • 数字0-9

  • 特殊文字: $(ドル記号)、#(シャープ記号)および_(アンダースコア)

通常、配列は、メンバー式の一部として変数を保管するときに使用します。配列変数のサイズは、対応する次元のメンバー数によって決まります。たとえば、シナリオ次元に4つのメンバーがある場合、次のコマンドによって、4つのエントリを持つDiscountという配列が作成されます:

      ARRAY Discount[Scenario];
   

一度に複数の配列を使用できます。

データベース計算用のグローバル設定の指定

表84に、計算動作を定義するコマンドをリストします:

表 84. 計算動作を定義するためのコマンドのリスト

コマンド

計算

SET AGGMISSG

計算中のEssbaseでの#MISSING値の処理方法を指定します。

SET CACHE

デフォルトの計算キャッシュ・サイズを調整します。

SET CALCPARALLEL

並列計算を使用可能にします。並列計算の使用を参照してください。

SET CALCTASKDIMS

並列計算のタスクの特定に使用する次元の数を増やします。並列計算の使用を参照してください。

SET CLEARUPDATESTATUS

高機能計算のデータ・ブロックをEssbaseがマークする方法で制御します。SET CLEARUPDATESTATUSコマンドの使用を参照してください。

SET CREATEBLOCKEQ

疎次元のメンバーに非定数値を割り当てる際のブロックの作成を制御する「等式によるブロックの作成」設定をオンおよびオフにします。疎次元のメンバーに割り当てられた非定数値を参照してください。

SET CREATENONMISSINGBLK

潜在的なデータ・ブロックでの計算を使用可能にし、結果が#MISSINGでない場合に、これらのブロックを保存します。

SET FRMLBOTTOMUP

大規模なデータベース・アウトラインの中の疎次元の式の計算を最適化します。大規模なデータベース・アウトライン内の疎次元に基づく式の最適化を参照してください。

SET LOCKBLOCK

疎メンバー式を計算するときにEssbaseで同時にロックできるブロックの最大数を指定します。

SET MSG

SET NOTICE

計算を追跡するメッセージを表示します。

SET RUNTIMESUBVARS

計算スクリプトで使用されるランタイム代替変数を宣言します。計算スクリプトでのランタイム代替変数の使用を参照してください。

SET UPDATECALC

高機能計算をオンおよびオフにします。高機能計算のオンとオフを参照してください。

SET UPTOLOCAL

通貨換算の場合に、定義済の同じ通貨を使用する親に集計を限定します。データベースの計算を参照してください。

計算スクリプト内のSETコマンドは、同じSETコマンドが次に検出されるまで有効です。

次の計算スクリプトでは、Essbaseで年次元を計算するときに詳細レベルのメッセージ(SET MSG DETAIL;)が表示され、メジャー次元を計算するときに要約レベルのメッセージ(SET MSG SUMMARY;)が表示されます:

      SET MSG DETAIL;
CALC DIM(Year);
   

SET MSG SUMMARY;

CALC DIM(Measures);

SET計算コマンドの中には、データベースへの追加パスをトリガーするものがあります。

次の計算スクリプトでは、EssbaseでQtr1とSET AGGMISSGオンのメンバーの組合せを計算し、次にデータベースに対し2回目の計算パスを行い、EastとSET AGGMISSGオフのメンバーの組合せを計算します:

      SET AGGMISSG ON;
Qtr1;
SET AGGMISSG OFF;
   

East;

2パス計算の使用も参照してください。

計算スクリプトでの式の使用

計算スクリプトにはメンバー式を入れることができます。メンバー式を入れた場合、その式はデータベース・アウトラインでメンバーに適用されている競合する式より優先されます。

計算スクリプトでは、次の両方の操作を実行できます:

  • データベース・アウトラインのメンバー式を計算します

  • 式を定義します

データベース・アウトラインのメンバーに適用されている式を計算するには、後にセミコロン(;)を付けたメンバー名を使用します。たとえば、次のコマンドでは、データベース・アウトラインのVarianceメンバーに適用されている式を計算します:

      Variance;
   

アウトラインを計算して得られた値を上書きするには、計算スクリプトで定義した式を手動で適用します。たとえば、次の式では、データベース内を循環して、メンバーPayroll、MarketingおよびMiscの値を加算し、その結果をExpensesメンバーに置きます。この式は、データベース・アウトラインでExpensesメンバーに置かれている式を上書きします:

      Expenses = Payroll + Marketing + Misc;
   

注:

式は共有メンバーまたは「ラベルのみ」メンバーには適用できません。

参照:

ブロック・ストレージ・データベース用の式の作成。を参照してください。

基本的な等式

計算スクリプトで等式を使用して、値をメンバーに割り当てることができます。等式の構文は次のとおりです:

      member
       = 
      mathematical_expression
      ;
   

memberは、データベース・アウトラインのメンバー名です。mathematical_expressionは、有効な算術演算です。

Essbaseによって式が評価され、その値が指定されたメンバーに割り当てられます。

次の例では、Essbaseはデータベースのデータを循環しながら、Sales内の値からCOGS内の値を減算し、結果をMarginに配置します:

      Margin = Sales - COGS;
   

この例では、Essbaseはデータベースのデータを循環しながら、Retail内の値からCost内の値を減算し、結果の値をRetailの値のパーセンテージとして計算し、その結果をMarkupに配置します:

      Markup = (Retail - Cost) % Retail;
   

>(より大きい)と<(より小さい)の論理演算子を等式で使用することもできます。

次の例では、2月の売上高が1月の売上高より多い場合、Sales Increase Flagの値は1になります。そうでない場合、値は0になります:

      Sales Increase Flag = Sales -> Feb > Sales -> Jan;
   

条件付き等式

計算スクリプトでメンバー式の一部としてIFステートメントを使用する場合は、次のことを実行する必要があります:

  • IFステートメントを単一のメンバーと関連付けます

  • IFステートメントを丸カッコで囲みます

次の例では、IF...ENDIFステートメント全体を丸カッコで囲み、Profitメンバーと関連付けています(Profit(IF(...)...)):

      Profit
(IF (Sales > 100)
   Profit = (Sales - COGS) * 2;
ELSE
   Profit = (Sales - COGS) * 1.5;
ENDIF;)
   

Essbaseでは、データベースを循環して、次の計算を実行します:

  1. IFステートメントによって、現在のメンバーの組合せに対するSalesの値が100より大きいかどうかがチェックされます。

  2. Salesが100より大きい場合、EssbaseではSalesの値からCOGSの値が減算され、その差に2が乗算されて、結果がProfitに置かれます。

  3. Salesが100以下の場合、EssbaseではSalesの値からCOGSの値が減算され、その差に1.5が乗算されて、結果がProfitに置かれます。

相互依存の式

計算スクリプトで相互依存の式を使用するときは、IFステートメントの場合と同じルールが適用されます。次のことを実行する必要があります:

  • 式を単一のメンバーと関連付けます

  • 式をカッコで囲みます

次の例では、式全体を丸カッコで囲み、Opening Inventoryメンバーと関連付けています:

      "Opening Inventory"
(IF(NOT @ISMBR (Jan))
   "Opening Inventory" = @PRIOR("Ending Inventory");
ENDIF;)
"Ending Inventory" = "Opening Inventory" - Sales + Additions;
   

計算スクリプトを使用した高機能計算の制御

疎次元メンバーに式があり、その式に次のいずれかのタイプの関数が含まれているとします:

  • 関係(@PRIOR、@NEXTなど)

  • 財務(@NPV、@INTERESTなど)

Essbaseでは、データ・ブロックが高機能計算用に消去としてマークされている場合でも、式を含んでいるデータ・ブロックを必ず再計算します。

データ・ブロックの計算および高機能計算についての理解。を参照してください。

式と計算のグループ化

計算スクリプトで式と次元を慎重にグループ化すれば、計算パフォーマンスを大幅に改善できます。参照:

一連のメンバー式の計算

式を計算するときは、必ず丸カッコを正しく使用してください。

次の例では、丸カッコが正しく使用されていないため、Essbaseでデータベース内を2回循環し、1回目にメンバーQtr1とQtr2の式が計算され、2回目にQtr3の式が計算されます:

      (Qtr1;
Qtr2;)
Qtr3;
   

対照的に、次の構成では、Essbaseでデータベース内を1回のみ循環し、メンバーQtr1、Qtr2およびQtr3の式が計算されます:

      Qtr1;
Qtr2;
Qtr3;
   

または

      (Qtr1;
Qtr2;
Qtr3;)
   

同様に、次の式では、Essbaseでデータベース内を1回循環し、1つのパスで両方の式が計算されます:

      Profit = (Sales - COGS) * 1.5;
Market = East + West;
   

一連の次元の計算

一連の次元を計算するときは、可能なかぎり次元をグループ化することで、パフォーマンスを最適化できます。

たとえば、次の式では、Essbaseでデータベース内を1回のみ循環します:

      CALC DIM(Year, Measures);
   

対照的に、次の構文では、Essbaseでデータベース内を2回循環し、各CALC DIMコマンドが1回ずつ計算されます:

      CALC DIM(Year);
CALC DIM(Measures);
   

計算スクリプトでの代替変数、ランタイム代替変数および環境変数の使用

代替変数は頻繁に変化する情報を参照する場合に使用されます。環境変数はユーザー固有のシステム設定のプレースホルダとして使用されます。

代替変数の一般的な説明は、代替変数の使用を参照してください。

計算スクリプトでの代替変数の使用

計算スクリプトに代替変数を入れると、その代替変数は、Essbaseによってユーザーがその代替変数用に指定した値に置き換えられます。代替変数は、頻繁に変更されるメンバーの情報やリストを参照する場合などに役に立ちます。

Administration Servicesで代替変数の値を作成し、指定します。

代替変数は、サーバー、アプリケーションおよびデータベース・レベルで作成できます。代替変数を計算スクリプトで使用するには、代替変数が計算スクリプトで使用可能である必要があります。たとえば、データベースレベルの代替変数は、データベース内の計算スクリプトでのみ使用でき、サーバーレベルの代替変数は、サーバー上のすべての計算スクリプトで使用できます。

計算スクリプトでは、代替変数の前にアンパサンド(&)を挿入します。Essbaseでは、アンパサンドで始まる文字列は代替変数として扱われ、計算スクリプトを解析する前に、その変数は割り当てられている値に置き換えられます。

たとえば、Sample.BasicでQtr1を当四半期として計算するには、次のようにします:

  • 当四半期の代替変数(&CurQtr)を作成し、その変数に値Qtr1を割り当てます

  • &CurQtr代替変数を使用する計算スクリプトを作成します。例:

                FIX(&CurQtr)
       CALC DIM(Measures, Product);
    ENDFIX
             

計算スクリプトでのランタイム代替変数の使用も参照してください。

計算スクリプトでのランタイム代替変数の使用

代替変数と同様に、代替変数が許可される場合には常に、ランタイム代替変数を計算スクリプトに含めることができます。計算スクリプトでは、ランタイム代替変数の名前の前にアンパサンド(&)を付ける必要があります。

ランタイム代替変数は、計算スクリプトで使用されるすべてのランタイム代替変数をSET RUNTIMESUBVARS計算コマンドで宣言する必要がある点が代替変数と異なります。SET RUNTIMESUBVARSには、ランタイム代替変数の名前を指定する必要があります。ランタイム代替変数のデフォルト値の指定はオプションです。<RTSV_HINT>rtsv_description</RTSV_HINT>タグの文字列として指定する、ランタイム代替変数のデータ型およびデータ入力制限の説明もオプションです。

SET RUNTIMESUBVARSの次の例では、myMarket、salesNumおよびPointDの3つのランタイム代替変数が宣言されています。myMarketとpointDにはデフォルト値が設定されています(たとえば、myMarketのデフォルト値は"New York"です)。salesNumの宣言にはデフォルト値は含まれていませんが、<RTSV_HINT>タグに説明が含まれています。

      SET RUNTIMESUBVARS
{
   myMarket = “New York”;
   salesNum <RTSV_HINT>salesNum: Input the value as an integer, such as 100</RTSV_HINT>;
   pointD = "Actual"->"Final";
};
   

デフォルト値が設定されていないランタイム代替変数に対しては、次のいずれかの方法を使用してランタイムに値を指定して、SET RUNTIMESUBVARSコマンドに指定されているデフォルト値を上書きできます:

  • キー/値のペアの文字列としてランタイム代替変数が指定されたwith runtimesubvars構文を使用したMaxL execute calculationステートメント。

  • キー/値のペアの文字列としてランタイム代替変数が指定されたEssCalcWithRuntimeSubVars API。

  • クライアント・コンピュータ上のテキスト・ファイルまたはキー/値のペアの文字列としてランタイム代替変数を指定できるEssCalcFileWithRuntimeSubVars API。

キー/値のペアの文字列としてランタイム代替変数を指定する場合は、文字列を一重引用符で囲んで、キー/値のペアをセミコロンで区切る必要があります。このランタイム代替変数文字列の例では、4つのランタイム代替変数の名前と値が指定されています(たとえば、"a"という名前のランタイム代替変数の値は100です):

      'a=100;b=@CHILDREN("100");c="Actual"->"Final";d="New York"'
   

ランタイム代替変数をテキスト・ファイルに指定する場合は、.rsvという拡張子のテキスト・ファイルをクライアント・コンピュータ上に作成します。(Essbaseでは、Essbaseサーバー・コンピュータにあるランタイム代替変数ファイルはサポートされません。)ファイルの各行には、キー/値のペアとして1つのランタイム代替変数を指定し、最後にセミコロンを付ける必要があります。この.rsvファイルの例では、4つのランタイム代替変数の名前と値が指定されています(たとえば、"a"という名前のランタイム代替変数の値は100です):

      a=100;
b=200;
c=@CHILDREN("100");
d=@TODATE("DD/MM/YY","10/11/12");
   

計算が実行されると、ランタイム代替変数値が次の順序で決定されます:

  1. with runtimesubvars構文を使用したMaxL execute calculationステートメント、EssCalcWithRuntimeSubVarsまたはEssCalcFileWithRuntimeSubVars APIで指定された値。

  2. SET RUNTIMESUBVARS計算コマンドに指定されたデフォルト値。

ランタイム代替変数を使用する際には、次のガイドラインを考慮してください:

  • SET RUNTIMESUBVARSにランタイム代替変数を宣言したが、計算スクリプトでランタイム代替変数を使用しない場合、Essbaseは未使用のランタイム代替変数の宣言を無視します(警告や例外は生成されません)。

  • ランタイム代替変数は代替変数よりも優先されます。そのため、代替変数とランタイム代替変数の名前が同じ(たとえば、myProduct)の場合、ランタイム代替変数の値で、代替変数の値が上書きされます。

  • 複数のランタイム代替変数の名前が同じで値が異なる場合は、ランタイム代替変数の最初のインスタンスの値のみが使用されて、後続の他のすべての値は無視されます。

ランタイム代替変数の名前と値の設定ルールは、代替変数の場合と同じです。代替変数の名前と値の設定ルールを参照してください。

ランタイム代替変数のロギング

計算スクリプトに使用されているランタイム代替変数をログに書き込むには、essbase.cfgのENABLERTSVLOGGING構成設定をTRUEに設定します。ロギングは、Essbaseサーバー、アプリケーション、またはデータベース・レベルで実装できます。

ランタイム代替変数のログ・エントリはアプリケーション・ログ・ファイルに書き込まれます。Essbaseでは、キー/値のペアの文字列(または、EssCalcFileWithRuntimeSubVars APIを使用する場合は.rsvファイルに指定されているキー/値のペアのリスト)ごとにアプリケーション・ログに1つのエントリが書き込まれます。

次の例では、2つのランタイム代替変数(EntityとCurrency)およびそれらの値が1つのエントリとしてログに書き込まれます:

      Executing calc script 'calcprofit.csc' with runtime substitution variables {Entity = “MyCompany”; Currency = “USD”;}
   

ランタイム代替変数のデータ型および入力制限の指定

SET RUNTIMESUBVARS計算コマンドでは、ランタイム代替変数の宣言に<RTSV_HINT>rtsv_description</RTSV_HINT>タグを含めることができます。rtsv_descriptionは、ランタイム代替変数のデータ型およびデータ入力制限(たとえば、100以下の整数)を記述する文字列です。</RTSV_HINT>文字列は、計算では使用されません。

EssGetRuntimeSubVars APIでは、SET RUNTIMESUBVARSのランタイム代替変数宣言に指定されているすべての情報(名前、値および説明)が取得されます。その後、<RTSV_HINT>文字列を使用して、ランタイムに値を入力するようにユーザーにプロンプトを表示したり、計算スクリプトに値を渡す前に入力データを検証できます。

SET RUNTIMESUBVARSの次の例では、ランタイム代替変数の名前と説明のみが各定義に指定されており、デフォルト値は指定されていません:

      SET RUNTIMESUBVARS
{
   myMarket <RTSV_HINT>myMarket: Input the value as a string, such as "New York"</RTSV_HINT>;
   salesNum <RTSV_HINT>salesNum: Input the value as an integer, such as 100</RTSV_HINT>;
   pointD <RTSV_HINT>pointD: Input the value as a member combination, such as "Actual"->"Final"</RTSVVAR_HINT>;
};
   

計算スクリプトおよび式での環境変数の使用

計算スクリプトでは、ユーザー固有のシステム設定のプレースホルダとしてシステム環境変数を使用できます。環境変数は、オペレーティング・システム・レベルで定義されているので、Essbaseサーバー上のすべての計算スクリプトで使用できます。

注:

環境変数はMDXクエリーでは使用できません。

システム環境変数を宣言する方法は、オペレーティング・システムのドキュメンテーションを参照してください。

計算スクリプトで環境変数を使用するには、環境変数名の前にドル記号($)を挿入します。Essbaseでは、ドル記号で始まる文字列は環境変数として扱われ、計算スクリプトを解析する前に、その変数は割り当てられている値に置き換えられます。メンバー名が$で始まる場合は、その名前を引用符で囲みます。

計算スクリプトで環境変数を使用するときには、次のガイドラインに従います:

  • 環境変数の名前:

    • 英数字またはアンダースコア(_)で構成する必要があります

    • ハイフン(-)、アスタリスク(*)、スラッシュ(/)などの英数字以外の文字を入れることはできません

    • Unicodeモードのアプリケーションでは320バイト以下、非Unicodeモードのアプリケーションでは320文字以下にする必要があります

  • 環境変数の値:

    • 先頭のドル記号($)以外は、どの文字でも使用できます

    • 数値かどうかに関係なく、引用符(" ")で囲む必要があります。例:

                        MY_PROD="100"
                     
      
                        ENV_FILE="E:\temp\export1.txt"
                     

      環境変数を定義するときに値を引用符で囲まなかった場合、数値以外の値であれば、その環境変数が渡されるときにEssbaseによって値が自動的に引用符で囲まれます。

      数値の場合は、変数が渡されるときにEssbaseによってその値が自動的に引用符で囲まれることはありません。これは、数値を渡すのか、それともメンバー名を渡すのかをEssbaseで判断できないためです。たとえば、'Sales = $MY_SALES' where MY_SALES=700のような計算スクリプト・ステートメントを使用する場合、目的は数値 700を渡すことです。しかし、EssbaseによってMY_SALESが引用符で囲まれると、MY_SALESはメンバー名として扱われます。その結果、数値ではなくメンバー名が渡されるので、エラーが発生します。変数の数値を文字列として扱う場合は、環境変数を定義するときにその値を引用符で囲む必要があります。

    • Unicodeモードのアプリケーションでは256バイト以下、非Unicodeモードのアプリケーションでは256文字以下にする必要があります

たとえば、環境変数を使用して、データ・ブロックをフラット・ファイルにエクスポートするときのエクスポート・ファイルのパスとファイル名を定義できます。次の計算スクリプトでは、パスとファイル名(E:\temp\export1.txt)が明示的に定義されています:

      SET DATAEXPORTOPTIONS
{
   DATAEXPORTLEVEL "ALL";
   DATAEXPORTOVERWRITEFILE ON;
};

FIX ("New York", "100-10");
   DATAEXPORT "File" "," "E:\temp\export1.txt";
ENDFIX;

   

パスとファイル名(ENV_FILE="E:\temp\export1.txt")を参照するために環境変数(ENV_FILE)を宣言し、計算スクリプトで次の構文を使用できます:

      DATAEXPORT "File" "," $ENV_FILE;
   

Essbaseによって環境変数がユーザーの環境から取得した値に置き換えられます。

次の例では、Sales値(CurrMbr="Sales")のみをエクスポートするために別の環境変数(CurrMbr)が定義されています:

      SET DATAEXPORTOPTIONS
{
   DATAEXPORTLEVEL "ALL";
   DATAEXPORTOVERWRITEFILE ON;
};

FIX ("New York", "100-10", $CurrMbr);
   DATAEXPORT "File" "," $ENV_FILE;
ENDFIX;

   

環境変数を使用して、RUNJAVAに渡された引数も解析できます。RUNJAVAは、Essbaseのユーティリティで、計算スクリプトから直接カスタム定義関数を呼び出すことができます。たとえば、環境変数を使用してユーザーの電子メール・アドレスを取得できます。

次の例では、RUNJAVAステートメントが電子メール通知を明示的に定義されたユーザー(to@somedomain.comおよびcc@mydomain.com)に送信します:

      RUNJAVA com.hyperion.essbase.calculator.EssbaseAlert "localhost" “to@somedomain.com” "cc@mydomain.com" "" "" "Mail Subject" "Mail Body" "";
   

ユーザー(ENV_TOMAIL="to@somedomain.com"ENV_CCMAIL="to@mydomain.com")に対して環境変数を宣言し、計算スクリプトで次の構文を使用できます:

      RUNJAVA com.hyperion.essbase.calculator.EssbaseAlert "localhost" $ENV_TOMAIL $ENV_CCMAIL "" "" "Mail Subject" "Mail Body" "";
   

データの消去およびコピー

データベースからデータのサブセットを消去したり、あるメンバーのセットから別のメンバーのセットにデータ値をコピーすることができます。参照:

データの消去

表85に、データを消去するコマンドをリストします:

表 85. データを消去するためのコマンドのリスト

コマンド

計算

CLEARDATA

指定するセルの値を#MISSINGに変更します。データ・ブロックは削除されません。

FIXコマンドをCLEARDATAコマンドと使用して、データベースのサブセットを消去します。

CLEARBLOCK

すべての密次元メンバーを含む、ブロックのコンテンツ全体を削除します。

Essbaseでは、CLEARBLOCKがブロック内のメンバーに対するFIXコマンドの内部にないかぎり、ブロック全体を削除します。

CLEARBLOCK UPPER

集計レベル・ブロックを削除します。

CLEARBLOCK NONINPUT

派生値を含んでいるブロックを削除します。計算操作によってすべて作成されたブロックには適用されますが、値がロードされたブロックには適用されません。

CLEARBLOCK DYNAMIC

動的計算および保管メンバーの組合せのブロックを削除します。

データ値の動的計算。を参照してください。

CLEARBLOCK EMPTY

空のブロックを削除します。

次の計算スクリプト・コマンドは、シナリオ次元が密か疎かによって、異なる結果を導き出します:

      FIX(Actual)
   CLEARBLOCK NONINPUT;
ENDFIX
   
  • 密: コマンドは、入力データ値を含まず、シナリオ次元のActualメンバーと交差するすべてのデータ・セルを削除します。

疎: コマンドは、シナリオ次元のメンバーがActualであるブロックのみを削除します。

次の式では、ColasのすべてのActualデータ値を消去します:

      CLEARDATA Actual -> Colas;
   

データベース全体を消去する方法は、Oracle Essbase Administration Services Online Helpの「データの消去」を参照してください。

データのコピー

DATACOPY計算コマンドは、データベース内のあるメンバー範囲から別のメンバー範囲にデータ・セルをコピーします。2つの範囲は同じサイズである必要があります。たとえば、次の式はActual値をBudget値にコピーします:

      DATACOPY Actual TO Budget;
   

FIXコマンドを使用すると、値のサブセットをコピーできます。たとえば、次の式は1月のみのActual値をBudget値にコピーします:

      FIX (Jan)
   DATACOPY Actual TO Budget;
ENDFIX
   

FIXコマンドの使用を参照してください。

データベースのサブセットの計算

データベースのサブセットを計算するには、次のいずれかの方法を使用します:

  • メンバーのリストを計算するメンバー・セット関数を使用して式を作成します。

    メンバーのリストの計算を参照してください。

  • FIX...ENDFIXコマンドを使用して、包含によって値の範囲を計算します。

    FIXコマンドの使用を参照してください。

  • EXCLUDE...ENDEXCLUDEコマンドを使用して、除外によって値の範囲を計算します。

    除外コマンドの使用を参照してください。

注:

高機能計算がオンの場合、新しく計算されたデータ・ブロックは、データベースの部分計算後に消去としてマークされません。データベースのサブセットを計算するときには、SET CLEARUPDATESTATUS AFTERコマンドを使用して、新しく計算されたブロックが必ず消去としてマークされるようにすることができます。このコマンドを使用すると、Essbaseでは高機能計算を使用してできるだけ効率的にデータベースが再計算されます。高機能計算についての理解。を参照してください。

メンバーのリストの計算

メンバー・セット関数は、指定したメンバーに基づいたメンバーのリストを生成します。たとえば、@IDESCENDANTS関数を使用すると、指定したメンバーのすべての子孫のリストが生成されます。式でメンバー・セット関数を使用すると、式を計算する前にEssbaseによってメンバーのリストが生成されます。

次の例では、メンバーTotal Expensesで@IDESCENDANTSコマンドを使用すると、Total Expensesそれ自体と、その子孫のMarketing、PayrollおよびMiscのリストが生成されます:

      @IDESCENDANTS("Total Expenses");
   

FIXコマンドの使用

FIXコマンドを使用して、計算に含めるメンバーを定義します。

次の例では、Eastの子孫(New York、Massachusetts、Florida、ConnecticutおよびNew Hampshire)のみのBudget値のみが計算されます:

      FIX(Budget,@DESCENDANTS(East))
   CALC DIM(Year, Measures, Product);
ENDFIX
   

次の例では、New MktというUDAが設定されたEastの子に対するメンバーの組合せが確定されます:

      FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt"))
   Marketing = Marketing * 1.1;
ENDFIX
   

次の例では、ワイルドカード一致(???)を使用して、文字-10で終わるメンバー名、つまりメンバー100-10、200-10、300-10および400-10を確定します:

      FIX(@MATCH(Product, "???-10"))
   Price = Price * 1.1;
ENDFIX
   

密次元でFIXコマンドのみを使用すると、Essbaseによって、必要な値または指定したメンバーの値を含んだブロック全体が取得されます。I/Oは影響を受けないので、計算パフォーマンス時間が向上します。

疎次元でFIXコマンドを使用すると、Essbaseによって、指定した疎次元メンバーのブロックが取得されます。I/Oは大幅に低下する可能性があります。

Essbaseで、密次元メンバーで使用するFIXコマンドごとにデータベース内を1回循環します。可能な場合は、FIXブロックを組み合せると計算パフォーマンスを向上させることができます。

たとえば、1つのFIXコマンドを使用した場合、次の計算スクリプトでは、Essbaseでデータベース内を1回のみ循環し、ActualとBudgetの両方の値が計算されます:

      FIX(Actual,Budget)
   CALC DIM(Year, Measures);
ENDFIX
   

2つのFIXコマンドを使用した場合、次の計算スクリプトでは、Essbaseでデータベース内を2回循環し、1回目はActualデータ値が計算され、2回目はBudgetデータ値が計算されます:

      FIX(Actual)
   CALC DIM(Year, Measures);
ENDFIX
FIX(Budget)
   CALC DIM(Year, Measures);
ENDFIX
   

計算する次元のサブセットをFIXコマンド内で確定することはできません。たとえば、次の計算スクリプトでは、CALC DIMより前のFIXで、市場次元の特定のメンバーが確定されますが、CALC DIMの演算で市場次元全体が計算されるため、エラー・メッセージが戻されます:

      FIX(@CHILDREN(East) AND @UDA(Market,"New Mkt"))
   CALC DIM(Year, Measures, Product, Market);
ENDFIX
   

FIXコマンドは、他のFIXコマンド・ブロック内でネストできます。ただし、ネストされたFIXコマンドが誤って使用されると、不正確な結果が生じる場合があります。たとえば、次の計算スクリプトの目的は、Eastのすべての子に1を割り当ててからNew Yorkに2を割り当てることです:

      FIX (@CHILDREN(EAST))
   ''100-10''=1;
      FIX (''New York'')
         ''100-10''=2;
      ENDFIX
ENDFIX
   

しかし、ネストされたFIXコマンドは、そのコマンドより上のFIXコマンドで指定された次元のサブセットを確定します(これは許可されていません)。したがって、スクリプトはEastのすべての子に2を割り当てます。これは、次のように記述されたようにスクリプトが実行されるからです:

      FIX (@CHILDREN(EAST),''New York'')
   ''100-10''=1;
   ''100-10''=2;
ENDFIX
   

ネストされたFIXコマンドを使用するよりも、2つの個別のFIXコマンド・ブロックを使用してください。例:

      FIX (@CHILDREN(EAST))
   ''100-10''=1;
ENDFIX

FIX (''New York'')
   ''100-10''=2;
ENDFIX
   

FIXコマンドには制限があります。『Oracle Essbaseテクニカル・リファレンス』を参照してください。

除外コマンドの使用

EXCLUDE...ENDEXCLUDEコマンドを使用して、計算から除外するメンバーを定義します。含めるメンバーを定義するよりも、含めないメンバーを指定する方が簡単な場合があります。

注:

EXCLUDEコマンドには制限があります。『Oracle Essbaseテクニカル・リファレンス』を参照してください。

DATAEXPORTコマンドを使用したデータのエクスポート

計算スクリプトでDATAEXPORTコマンドを使用すると、データをバイナリまたはテキストで、またはリレーショナル・データベースに直接エクスポートできます。データエクスポートの一連の計算コマンドでは、エクスポートするデータの種類が限定されており、出力とフォーマットの様々なオプションが用意されています。

注:

バイナリ・ファイルへのDATAEXPORTは、Essbaseのリリース間または32ビット・オペレーティング・システムと64ビット・オペレーティング・システムの間ではサポートされていません。

次のコマンド・シーケンスは、データをエクスポートするための一般的な計算スクリプトの構造を示しています:

      SET DATAEXPORTOPTIONS
  {
    DATAEXPORTLEVEL 
      parameters
      ;
    DATAEXPORTDYNAMICCALC ON | OFF;
    DATAEXPORTNONEXISTINGBLOCKS ON | OFF;
    DATAEXPORTDECIMAL 
      n
      ;
    DATAEXPORTPRECISION 
      n
      ;
    DATAEXPORTCOLFORMAT ON | OFF;
    DATAEXPORTCOLHEADER 
      dimensionName
      ;
    DATAEXPORTDIMHEADER ON | OFF;
    DATAEXPORTRELATIONALFILE ON | OFF;
    DATAEXPORTOVERWRITEFILE ON | OFF;
    DATAEXPORTDRYRUN ON | OFF;
   };
DATAEXPORTCOND 
      parameters
      ;
FIX 
  (
      fixMembers)
      
  DATAEXPORT 
      parameters
      ;
ENDFIX;

   

次の表は、すべてオプションのSET DATAEXPORTOPTIONSコマンドの一覧を示しています:

  • 表86 - コンテンツ・オプション

  • 表87 - 出力フォーマット・オプション

  • 表88 - 処理オプション

表 86. SET DATAEXPORTOPTIONSコマンド: コンテンツ・オプション

コマンド

計算

DATAEXPORTLEVEL

次のいずれかのデータ値を指定します: ALL、LEVEL0またはINPUT

DataExportLevelオプションにデータ値を指定する際には、次のガイドラインを使用します:

  • 値では大文字と小文字は区別されません。たとえば、LEVEL0でもlevel0でも指定できます。

  • オプションで、値を引用符で囲みます。たとえば、LEVEL0でも"LEVEL0"でも指定できます。

  • 値を指定しない場合、Essbaseでは、デフォルト値のALLが使用されます。

  • 指定した値が正しくない場合(LEVEL 0やLEVEL2など)、Essbaseでは、デフォルト値のALLが使用されます。

DATAEXPORTDYNAMICCALC

動的に計算された値のエクスポートを制御します

DATAEXPORTNONEXISTINGBLOCKS

すべての潜在的なデータ・ブロックからデータをエクスポートするのか、それとも既存のデータ・ブロックからのみデータをエクスポートするのかを指定します

DATAEXPORTDECIMAL

エクスポートした値の小数点以下の桁数を指定します

DATAEXPORTPRECISION

エクスポートした値の合計桁数を指定します

表 87. SET DATAEXPORTOPTIONSコマンド: 出力フォーマット・オプション

コマンド

計算

DATAEXPORTCOLFORMAT

縦欄フォーマットにするのか、縦欄でないフォーマットにするのかを指定します

DATAEXPORTCOLHEADER

列ヘッダーの密次元を指定します

DATAEXPORTDIMHEADER

すべての次元名を表示するヘッダー・レコードをファイルのデータと同じ順序で追加します

DATAEXPORTRELATIONALFILE

データをリレーショナル・データベースにインポートするためにテキスト・エクスポート・ファイルをフォーマットします

表 88. SET DATAEXPORTOPTIONSコマンド: 処理オプション

コマンド

計算

DATAEXPORTOVERWRITEFILE

名前と場所が同一の既存のファイルを置き換えるかどうかを指定します

DATAEXPORTDRYRUN

エクスポート・プロセス全体を実行しなくても、計算コマンドのセットを検証し、エクスポートの統計(時間の予測を含む)を表示できるようにします

  データのサブセットをエクスポートする計算スクリプトを作成するには、次のようにします:

  1. SET DATAEXPORTOPTIONSコマンドを指定して、エクスポートのコンテンツ(表86を参照)、フォーマット(表87を参照)およびプロセス(表88を参照)のオプションを定義します。

  2. DATAEXPORTCONDコマンドを使用して、データ値に基づいてデータを選択します。

  3. FIX...ENDFIXまたはEXCLUDE...ENDEXCLUDE計算コマンドを使用して、エクスポートするデータベースのスライスを選択します。

  4. FIX...ENDFIXまたはEXCLUDE...ENDEXCLUDEグループの内部にDATAEXPORTコマンドを入れます。

    DATAEXPORTコマンドを使用して、エクスポートされたデータをリレーショナル・データベースに直接挿入する場合は、リレーショナル・データベースへのデータのエクスポートを参照してください。

  5. DATAIMPORTBIN計算コマンドを使用して、以前エクスポートしたバイナリ・エクスポート・ファイルをインポートします。

    注:

    DATAIMPORTBINは、Essbaseのリリース間または32ビット・オペレーティング・システムと64ビット・オペレーティング・システムの間ではサポートされません。

    SET DATAIMPORTIGNORETIMESTAMP計算コマンドを使用すると、一致するアウトライン・タイムスタンプのインポート要件を管理できます。

その他のエクスポート方法として、ESSCMD、MaxLおよび管理サービス・コンソールを使用してデータベースをバックアップする方法があります。レポート・ライターを使用して、出力テキスト・ファイルを作成し、データベースのサブセットを選択およびフォーマットできます(レポート・スクリプトを使用したテキスト・データのエクスポートを参照)。

リレーショナル・データベースへのデータのエクスポート

DATAEXPORTコマンドを使用して、データをリレーショナル・データベースに直接挿入する場合は、次の点に注意してください:

  • データが書き込まれるテーブルは、データがエクスポートされる前に存在している必要があります

  • テーブルおよび列の名前にスペースを含めることはできません

デフォルトでは、エクスポートしたデータを挿入するときに、Essbaseでは行挿入メソッドを使用します。このメソッドでは、行が1つずつ挿入されます。パフォーマンスを向上させるために、バッチ挿入メソッドを使用できます(使用中のリレーショナル・データベースとODBCドライバがこの機能をサポートしている場合)。

注:

64ビットのEssbaseでは、DATAEXPORTバッチ挿入メソッドを使用した、SQLデータ・ソースへのデータの直接エクスポートをサポートしていません。

バッチ挿入を使用可能にするには、essbase.cfgのDATAEXPORTENABLEBATCHINSERT構成設定をTRUEに設定します。Essbase側でバッチ・サイズを判断するのではなく、一度に挿入する行数を制御する場合は、DEXPSQLROWSIZE構成設定を使用して、バッチの行数(2から1000)を指定します。Essbaseによってリレーショナル・データベースおよびODBCドライバがバッチ挿入をサポートするかどうかが決定できない場合は、行挿入メソッドが使用され、DEXPSQLROWSIZE(設定されている場合)は無視されます。

注:

DATAEXPORTENABLEBATCHINSERTがTRUEに設定され、DEXPSQLROWSIZEが1に設定されている場合、バッチ挿入は使用できません(DEXPSQLROWSIZEを1に設定すると、行が1つずつ挿入されます)。

計算スクリプトを使用したデータのエクスポートの長所と短所

他の方法を使用してデータをエクスポートする場合と比べると、計算スクリプトを使用した場合には次の長所と短所があります:

  • 長所

    • データのサブセットをエクスポートできます

    • 複数のエクスポート先(フラット・ファイル、リレーショナル・データベースおよびバイナリ・ファイル)をサポートしています

    • タイプ、フォーマットまたはデータのオプションが用意されています

    • 計算スクリプトの一部として、バッチ・プロセスに配置できます

    • DATAEXPORTはメモリーのカーネル・ストレージ・ブロックに直接アクセスするので、動的計算エクスポート・オプション(DATAEXPORTDYNAMICCALC)を使用しない場合は、エクスポートを非常に速く実行できます

    • バイナリのエクスポートで使用される圧縮フォーマットでは、エクスポート・ファイルに必要なストレージが他よりも少ないので、バイナリのエクスポートとインポートによって、より高速にデータをバックアップおよび復元できます

    • データの変更を追跡する他の計算コマンドの前および後にDATAEXPORTコマンドを使用することによって、デバッグ・ツールとして使用してバッチ計算結果を追跡できます

  • 短所

    • レポート・ライターのフォーマットと比べると、データ・フォーマットのオプションに制限があります

    • 保管済メンバーと動的計算メンバーしか処理せず、属性メンバーと別名に対するサポートがありません

    • 集約ストレージ・データベースをサポートしていません

    • データをクライアントに直接エクスポートできません

    • DATAEXPORTNONEXISTINGBLOCKSをONに設定している場合を除いて、動的計算データのエクスポート(DATAEXPORTDYNAMICCALC)が使用されるとパフォーマンスに重大な影響を与える可能性があります。

潜在的なブロックでの計算の有効化

密次元に設定された式を密メンバーで使用した場合、計算結果が密次元からの値で、オペランドが疎次元からの値であると、Essbaseでは、必要なブロックが自動的には作成されません。

次の例では、既存の実績データから売上高予算と支出データを作成するとします。SalesとExpensesはメジャー密次元のメンバーで、BudgetとActualはシナリオ疎次元のメンバーです。

      FIX(Budget)
   (Sales = Sales -> Actual * 1.1;
   Expenses = Expenses -> Actual * .95;)
ENDFIX
   

等式の結果であるSalesとExpensesは密次元のメンバーで、オペランドであるActualは疎次元のメンバーです。Essbaseでは、密メンバー式は既存のデータ・ブロックに対してしか実行されないので、計算スクリプトによって必要なデータ・ブロックが作成されず、存在しないブロックに対してBudgetデータ値が計算されません。

次の方法を使用してこの問題を解決できます:

DATACOPYを使用した既存ブロックのコピー

DATACOPYコマンドを使用して既存の各ブロックにブロックを作成し、新しいブロックで計算を実行します。例:

      DATACOPY Sales -> Actual TO Sales -> Budget;
DATACOPY Expenses -> Actual TO Expenses -> Budget;
FIX(Budget)
   (Sales = Sales -> Actual * 1.1;
   Expenses = Expenses -> Actual * .95;)
ENDFIX
   

Essbaseによって、既存の対応するActualブロックごとに、Budget値を含むブロックが作成されます。DATACOPYコマンドが終了すると、スクリプトの残りの部分によって値が変更されます。

次の場合にDATACOPYを使用することをお薦めします:

  • 既存ブロックの値と、DATACOPYによって作成されたブロックの対応箇所の値との間に、数学的な関係がある場合。

    たとえば、前述の例では、Budget値は既存のActual値に基づいて計算されます。

    注意

    DATACOPYを実行すると、ソース・ブロックからのすべてのセルに、同じ値で新しいブロックが作成されます。ブロックの一部に対してのみ式を実行する場合、これらのコピーされたセルは計算終了時にそのまま残るので、結果として不適切な値となる可能性があります。

  • コピーされるブロックに#MISSING値のみを含むブロックがない場合。

    #MISSING値が存在する場合、#MISSING値のみを含むブロックが書き込まれます。不必要な#MISSINGブロックに、Essbaseのリソースと処理時間が必要になります。

SET CREATENONMISSINGBLKを使用したすべての潜在的なブロックの計算

不適切な値が心配な場合は、DATACOPYのかわりに、SET CREATENONMISSINGBLK ON計算コマンドを使用できます。このコマンドでは、すべての潜在的なブロックがメモリーで計算され、データ値を含む計算されたブロックのみが保管されます。SET CREATENONMISSINGBLK計算コマンドは、密次元または疎次元で値を計算するときに便利です。

次の例では、既存の実績データから売上高予算と支出データを作成します。SalesとExpensesはメジャー密次元のメンバーで、BudgetとActualはシナリオ疎次元のメンバーです。

      FIX(Budget)
SET CREATENONMISSINGBLK ON
   (Sales = Sales -> Actual * 1.1;
   Expenses = Expenses -> Actual * .95;)
ENDFIX
   

注:

SET CREATEBLOCKONEQ ONが疎次元に対して設定されている場合、SET CREATENONMISSINGBLK OFFコマンドが検出されるか、計算スクリプトが完了するまで、SET CREATENONMISSINGBLK ONによって一時的にSET CREATEBLOCKONEQ ONが上書きされます。疎次元のメンバーに割り当てられた非定数値を参照してください。

SET CREATENONMISSINGBLKコマンドを使用する場合の長所は、密メンバーに適用したときに、メンバー式の影響を受けるデータ・セルのみが保存される点です。短所は、メモリーに生成される潜在的なブロックが多すぎて、計算パフォーマンスに影響する可能性がある点です。このコマンドを使用するときには、FIXを使用して計算するブロックのスコープを制限するなど、潜在的なブロックの数を制限します。

パーティションでの計算スクリプトの使用

参照:

パーティション用の計算スクリプトの作成

パーティション・アプリケーションは、複数のサーバー、プロセッサまたはコンピュータにスパンできます。

アプリケーションをパーティション化して、各パーティションで個別に計算を実行すれば、計算パフォーマンスを大幅に改善できます。パーティションを使用するときには、次の点に注意します:

  • データベース計算全体に対するパフォーマンスの影響を評価します。パフォーマンスを向上させるために次のことを実行できます:

    • 計算全体を再デザインし、リモート・データベース内の透過パーティションにあるリモート値を参照しないようにします。

    • リモート・データベース内の値を動的に計算します。

      パーティション内のデータの動的計算を参照してください。

    • 該当する式が含まれているデータベース内の値を複製します。

      たとえば、東部地域の四半期ごとのデータを複製する場合は、第1四半期、第2四半期、第3四半期および第4四半期の値のみを複製し、親の年値をローカルで計算します。

  • Essbaseで参照される値を取得するときにその値が最新の値であることを確認してください。前に説明したオプション(再設計、動的計算または複製)のいずれかを選択するか、式を計算する前に参照されるデータベースを計算します。

パーティション・アプリケーションの設計パーティションの作成および管理。を参照してください。

パーティションの計算順序の制御

Essbaseで必要な結果を計算できるようにするには、データベースを特定の順序で計算する必要があります。

図134は、「West」、「Central」および「East」データベースの情報を「Corporate Database」から透過的に表示しているパーティションを例示しています。

図 134. パーティションの計算

この図は、「Corporate Database」のパーティション(「West」、「East」および「Central」)を示しています。

「West」、「Central」および「East」には実績値のみが含まれています。「Corporate」には実績値と予算値が含まれています。「West」、「Central」および「East」のデータを「Corporate Database」で表示できますが、データが存在するのは「West」、「Central」および「East」データベースのみです。つまり、データは「Corporate Database」には複製されていません。

このため、Essbaseで「Corporate」を計算するときには、「West」、「Central」および「East」から最新の値を取得する必要があります。必要な結果を得るには、「Corporate」を計算する前に「West」、「Central」および「East」を計算する必要があります。

計算スクリプトの保存、実行およびコピー

参照:

計算スクリプトの保存

計算スクリプトは、次のいずれかの場所に保存できます:

  • クライアント・コンピュータ上のファイルとして。

  • Essbaseサーバー上のアーティファクトとして。この場合、他のユーザーが計算スクリプトにアクセスできます。スクリプトと次のアーティファクトを関連付けることができます:

    • アプリケーションとそのアプリケーション内のすべてのデータベース。これにより、アプリケーション内の任意のデータベースに対して、スクリプトを実行できます。

      アプリケーションに関連付けられた計算スクリプトは、Essbaseサーバー・コンピュータのARBORPATH/app/appnameディレクトリに保存されます。

    • データベース。これにより、指定したデータベースに対してスクリプトを実行できます。

      データベースに関連付けられた計算スクリプトは、Essbaseサーバー・コンピュータのARBORPATH/app/appname/dbnameディレクトリに保存されます。

Essbaseを使用したアーティファクトの管理を参照してください。

  計算スクリプト・エディタを使用して計算スクリプトを保存する方法は、『Oracle Essbase Administration Servicesオンライン・ヘルプ』の「スクリプトの保存」を参照してください。

計算スクリプトの実行

Administration Servicesで計算スクリプトを実行するには、計算スクリプトをEssbaseサーバー上でアーティファクトとして保存する必要があります。計算スクリプトの保存を参照してください。

Administration Servicesを使用して計算スクリプトを実行するときには、計算をバックグラウンドで実行できるので、計算の処理中でも作業を続けることができます。バックグラウンド・プロセスのステータスをチェックして、いつ計算が完了したかを確認できます。Oracle Essbase Administration Services Online Helpの「計算スクリプトの実行」を参照してください。

  計算スクリプトを実行するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

計算スクリプトの実行

Oracle Essbase Administration Services Online Help

MaxL

execute calculation

Oracle Essbase Technical Reference

ESSCMD

RUNCALC

Oracle Essbase Technical Reference

Smart View

データの計算

Oracle Hyperion Smart View for Office User's Guide

計算スクリプトのコピー

計算スクリプトは、権限に応じて、Essbaseサーバー上のアプリケーションとデータベースにコピーできます。アプリケーション移行の一部として、サーバー間でスクリプトをコピーすることもできます。

  計算スクリプトをコピーするには、次のツールを使用します:

ツール

トピック

場所

Administration Services

スクリプトのコピー

Oracle Essbase Administration Services Online Help

MaxL

create calculation as

『Oracle Essbaseテクニカル・リファレンス』

ESSCMD

COPYOBJECT

『Oracle Essbaseテクニカル・リファレンス』

計算結果の確認

計算スクリプトの実行後に、Smart Viewで計算の結果を確認できます。

Essbaseは、実行した計算スクリプトに関して次の情報を提供します:

  • データベースの各パスに対する次元の計算順序

  • 合計計算時間

詳細を表示するには、計算スクリプトでSET MSG SUMMARY、SET MSG DETAILおよびSET NOTICEコマンドを使用します。データベース計算用のグローバル設定の指定を参照してください。

これらのメッセージを使用することによって、計算方法を理解することができ、次回の計算で調整を行うことができます。

この情報が表示される場所は、計算スクリプトの実行に使用したツールによって異なります。

  • Administration ServicesおよびSmart View - アプリケーション・ログ

    Essbaseサーバー・ログおよびアプリケーション・ログの表示を参照してください。

  • MaxL - 標準出力(コマンドライン・ウィンドウ)

    情報の量は、MaxLシェルに設定されているメッセージ・レベルによって異なります。

  • ESSCMD - ESSCMDウィンドウまたは標準出力(コマンドライン・ウィンドウ)

    情報の量は、ESSCMDに設定されているメッセージ・レベルによって異なります。

計算に必要なディスク・サイズの判断

ESTIMATEFULLDBSIZE構成設定を使用して、単一のCALC ALLですべてのデータまたはデータの一部をロードするために必要なディスク・サイズを見積ることができます。

計算によるデータベース・サイズへの影響の見積りを参照してください。