19 ブロック・ストレージ・データベースの式の例の確認
これらの数式の例は、独自の数式の作成に役立ちます。
この章の情報は、ブロック・ストレージ・データベースにのみ適用され、集約ストレージ・データベースには関連しません。
勘定科目ディメンションの期間累計値の計算
アウトラインに勘定科目としてタグ付けされたディメンションが含まれている場合、@PTD関数を使用して期間累計値を計算できます。
この例では、次に示すように、Sample.BasicデータベースのMeasuresディメンションのInventoryブランチを使用します:
Inventory (~) (Label Only)
Opening Inventory (+) (TB First) (Expense Reporting)
IF(NOT @ISMBR(Jan))
Additions (~) (Expense Reporting)
Ending Inventory (~) (TB Last) (Expense Reporting)
年および現在の四半期の期間累計値を計算するには、Yearディメンションに2つのメンバーを追加: 四半期累計の場合はQTD、年累計の場合はYTD。 例:
QTD (~) @PTD(Apr:May)
YTD (~) @PTD(Jan:May);
現在の月が5月であると仮定した場合、次の式をQTDメンバーに追加します:
@PTD(Apr:May);
YTDメンバーに次の式を追加します:
@PTD(Jan:May);
Essbaseでは、必要に応じて月の範囲の値が合計されます。 ただし、期首インベントリにはタイム・バランス・タグ最初があり、期末インベントリにはタイム・バランス・タグ最後があります。 Essbaseはこれらの値を取得し、それに応じて処理します。 「最初、最後および平均の値の計算」を参照してください。
InventoryブランチのメンバーおよびSalesメンバーの計算結果の例を次に示します:
表19-1 結果: 期間累計値を計算する計算スクリプトの例
Measures->Time | 1月 | 2月 | 3月 | 4月 | 5月 | QTD | YTD |
---|---|---|---|---|---|---|---|
インベントリのオープン |
100 |
110 |
120 |
110 |
140 |
110 |
100 |
追加 |
110 |
120 |
100 |
160 |
180 |
340 |
670 |
売上高 |
100 |
110 |
110 |
130 |
190 |
320 |
640 |
期末インベントリ |
110 |
120 |
110 |
140 |
130 |
130 |
130 |
販売および追加の値が合計されました。
期首インベントリには最初のタグがあります。 QTDの場合、Essbaseは現行四半期の最初の値であるAprを取得します。YTDの場合、Essbaseは年の最初の値であるJanを取得します。
終了インベントリには最終タグがあります。 QTDの場合、Essbaseは現在の四半期の最後の値(5月)を取得します。 YTDの場合、Essbaseは年の最後の値(5月)を取得します。
ノート:
動的時系列メンバーを使用して、期間累計値を計算することもできます。
ローリング値の計算
@AVGRANGE関数を使用してローリング平均を計算し、@ACCUM関数を使用して年累計ローリング値を計算できます。
たとえば、データベースに月次Salesデータ値が含まれ、データベース・アウトラインにメンバーAVG_SalesおよびYTD_Salesが含まれているとします。
次の式をAVG_Salesメンバーに追加します:
@AVGRANGE(SKIPNONE, Sales, @CURRMBRRANGE(Year, LEV, 0, , 0));
また、YTD_Salesメンバーに次の式を追加します:
@ACCUM(Sales);
Essbaseは、時間としてタグ付けされたディメンションの月全体の平均販売値を計算します。 SKIPNONEパラメータは、#MISSING値も含めてすべての値が含まれることを意味します。 Essbaseは、結果をAVG_Salesに配置します。
次の表に、Essbaseで累積販売値を計算し、その結果をYTD_Salesに配置した場合の結果を示します:
表19-2 結果: ローリング値を計算する計算スクリプトの例
Measures -> Time | 1月 | 2月 | 3月 | Qtr1 |
---|---|---|---|---|
売上高 |
100 |
200 |
300 |
600 |
AVG_Sales |
100 |
150 |
200 |
#MISSING |
YTD_Sales |
100 |
300 |
600 |
#MISSING |
AVG_Salesの値は、月累計の平均です。 たとえば、AVG_Sales -> Marは、Jan、FebおよびMarのSalesの平均です。
YTD_Salesの値は、現在の月までの累積値です。 そのため、YTD_Sales -> FebはSales -> JanとSales -> Febの合計です。
月次アセット移動の計算
@PRIOR関数を使用すると、前月の値に基づいて値を計算できます。
たとえば、月単位で格納されるアセット・データ値がデータベースに含まれているとします。 現在の月の値から前月の値を減算することで、連続する月のアセット価値(アセット変動)の差異を計算できます。
次の3つのメンバーがデータベースのアセット価値を管理するとします:
-
月次アセット価値のアセット
-
アセット移動値のAsset_MVNT
-
年度開始時のアセット価値に対するOpening_Balance
Janの場合、Asset_MVNT値はJan値からOpening_Balance値を減算して計算されます。
次の式をAsset_MVNTメンバーに追加します:
IF(@ISMBR(Jan)) Asset_MVNT = Assets - Opening_Balance;
ELSE Asset_MVNT = Assets - @PRIOR(Assets);
ENDIF;
次の表に、Essbaseでアセット価値の差異を連続した月数で計算した場合の結果を示します:
表19-3 結果: 月次アセット移動を計算する計算スクリプトの例
Assets -> Time | Opening_Balance | 1月 | 2月 | 3月 |
---|---|---|---|---|
資産 |
1200 |
1400 |
1300 |
1800 |
Asset_MVNT |
200 |
-100 |
500 |
Essbaseは月を循環し、次の計算を実行します:
-
IF文および@ISMBR関数は、Yearディメンションの現在のメンバーがJanかどうかを確認します。JanのAsset_MVNT値は前月の値を減算して計算できないため、このチェックが必要です。
-
Yearディメンションの現在のメンバーがJanの場合、EssbaseはJan -> Assetsの値からOpening_Balanceを減算し、その結果をJan -> Asset_MVNTに配置します。
-
Yearディメンションの現在のメンバーがJanでない場合、@PRIOR関数は前月のアセットの値を取得します。 Essbaseは、当月のアセットから前月のアセットを差し引きます。 結果は現在の月のAsset_MVNT値に配置されます。
#MISSING値のテスト
データベース内の#MISSING値をテストできます。
データベース・アウトラインにCommissionというメンバーが含まれているとします。 現在のメンバーの組合せの販売値が#MISSINGでない場合、コミッションは販売の10%で支払われます。 データベース・アウトラインのCommissionメンバーに適用されると、次の式でCommissionが計算されます:
IF(Sales <> #MISSING) Commission = Sales * .1;
ELSE Commission = #MISSING;
ENDIF;
計算スクリプトに式を配置する場合は、次のように式をCommissionメンバーに関連付ける必要があります:
Commission(IF(Sales <> #MISSING) Commission = Sales * .1;
ELSE Commission = #MISSING;
ENDIF;);
Essbaseはデータベースを循環し、次の計算を実行します:
-
IF文は、現在のメンバーの組合せに対するSalesメンバーの値を確認します。
-
Salesが#MISSINGでない場合、EssbaseはSalesメンバーの値に0.1を乗算し、Commissionメンバーに結果を配置します。
-
Salesが#MISSINGの場合、EssbaseはCommissionメンバーに#MISSINGを配置します。
属性式の計算
データベース内の属性ディメンション・メンバーに対して特定の計算を実行できます。
たとえば、オンスでサイズ設定された製品の収益性をオンスで計算するには、計算式で@ATTRIBUTEVAL関数を使用できます。 Sample.Basicデータベースでは、MeasuresディメンションのRatiosブランチに、Profit per Ounceというメンバーが含まれています。 このメンバーの式:
Profit/@ATTRIBUTEVAL(@NAME(Ounces));
Essbaseは、Productsディメンションを循環し、次の計算を実行します:
-
Ounces属性ディメンションのメンバーに関連付けられている基本メンバーごとに、@ATTRIBUTEVAL関数は数値属性値(Ouncesのメンバー12の場合は12など)を戻します。 @NAME関数は、@ATTRIBUTEVAL関数に渡す前に文字列Ouncesを処理する必要があります。
-
次に、Essbaseは利益を@ATTRIBUTEVALの結果で除算し、オンス当たりの利益を算出します。
「計算式での属性の使用」も参照してください。