サービスまたは契約の会計条件のモデリングに使用されるメトリックには一般的に 3 種類あります。 内部変数については以下のとおりです。
次の例を検討します。
新会社が発足し、電子メール サービスやそれに伴うメールボックスの設定と保守が必要になります。 新しいスタッフが雇用されるので、メールボックスの数は明らかに増加します。 契約 1 件あたりの電子メール サービスには、固定費 $1000 と、1 月当たりに課金されるメールボックスごとの追加費用が発生します。 メールボックス 1 つ当たりのこのコストは、以下のように段階的になっています。
|
メールボックスの数 |
メールボックス当たりのコスト |
|
1-1,000 |
$1.00 |
|
1,001 - 5,000 |
$0.80 |
|
5,001+ |
$0.50 |
したがって、追加されるメールボックスが多くなれば、追加に要するコストは低くなります (たとえば、1500 個のメールボックス作成には(1000 x $1)+(500 x $0.80)= 1400 ドル必要です)。このモデルを使用し、2 つのメトリックを作成して契約に反映できます。
さらに、経営陣による、通年(2007)のスタッフ数の推計は以下のとおりです。 この動向は、会社設立時の雇用と、それに続く他地域でのオフィス新設によるものです。
|
1 月 |
2 月 |
3 月 |
4 月 |
5 月 |
6 月 |
7 月 |
8 月 |
9 月 |
10 月 |
11 月 |
12 月 |
|
50 |
100 |
500 |
900 |
1600 |
1700 |
1800 |
2500 |
2600 |
3500 |
3600 |
5800 |
これらのメトリックをモデル化するには、以下の手順に従います。
以下の詳細を使用して、契約の固定費メトリック(価格アイテム タイプを使用)を作成します。

このサービスの契約への固定費を明記するためには、これをビジネス ロジック(固定費は Result 関数から返される必要あり)へのパラメータとして実装します。すると、このパラメータは、メトリックの[目標ステートメント]を通じて参照できます。

この Metric に対するパラメータ値を返すことは、単に、Result 関数を通じてサービス コスト値を返すことになります。

次に、変数価格メトリック(ここでも価格アイテム タイプを使用)を作成し、使用するメールボックス数の消費コストを確認します。 このメトリックを 'メールボックス消費コスト' と指定し、詳細を以下のように指定して作成します。

このインスタンスでは、消費パラメータをメトリック詳細に入力する必要があります。 これらは単価テーブルに入ります。 メールボックス数と費用の上記テーブルのモデルを作成するには、メールボックスと単価の 1 つの上限に対する列を作成します。

次に、各段階に対する値を入力します。 この場合、メールボックスの上限により、それに関連するコスト ブラケットが決定されます。 3 段階あるので、それに応じてテーブルに追加されます。

これに加え、メールボックス消費の予測関数を実装します。 具体的には、プリセットされた月次レイアウトを使用して予測テーブルを作成します。

次に、これは、シナリオ説明で与えられたテーブルの値で満たされます。

これで、メトリック用の目標ステートメントを追加できます。 この場合、単価テーブルおよび予測テーブルが派生元なので、パラメータ値は不要です。

最後に、以下のようにビジネス ロジックを完了します。
Option Explicit
Dim PPUmap1, PPUmap2, PPUmap3, PPUkey, FCmap, periodFC, TierPPU
Dim currentMonth, TotalMailboxes, MailboxesThisPeriod, TotalPrice
Sub OnRegistration(dispatcher)
'サンプル登録のみ
dispatcher.RegisterByMetric "OnMailboxAddedEvent", "NewMailboxEventType", _
"MailboxResource", "MONTH", "MetricName", "MetricContract", _
"MetricContractParty"
End Sub
Sub OnLoad(TIME)
'価格段階マップおよび予測マップの初期化
Set PPUmap1 = Context.Field ("Price Per Unit")(1)
Set PPUmap2 = Context.Field ("Price Per Unit")(2)
Set PPUmap3 = Context.Field ("Price Per Unit")(3)
Set FCmap = Context.Field ("Forecast")(1)
End Sub
Sub OnPeriodStart(TIME)
'処理内容: ここにコードを追加して期間開始イベントを処理する
currentMonth = GetMonth (time)
If Context.IsInForecast Then
periodFC = getForecastValue (currentMonth)
End If
MailboxesThisPeriod = 0
TotalPrice = 0
End Sub
Sub OnPeriodEnd(TIME, isComplete)
' 段階的価格設定モデルを使用して、
' メールボックスすべての現在価格を計算
' 総コストを決定するために各段階を通過するので、
' これは累積的手法を使用しています。
TotalPrice = getMailboxCost (TotalMailboxes)
End Sub
Sub OnTimeslotEnter(TIME)
End Sub
Sub OnTimeslotExit(TIME)
End Sub
Sub OnMailboxAddedEvent(eventDetails)
MailboxesThisPeriod = MailboxesThisPeriod + 1
TotalMailboxes = TotalMailBoxes + 1
End Sub
Function Forecast
Forecast = getMailboxCost (periodFC)
End Function
Function Target
Target = Null
End Function
Function Result
result = TotalPrice
End Function
Function getforecastvalue(q)
getforecastvalue = FCmap (q)
End Function
Function getmonth(time)
' この関数で月を取得
Dim lTime
lTime = Tools.GetLocaleTime(time)
getmonth = monthname (datepart ("m", lTime), True) & _
"-0" & datepart ("d", lTime) & "-" & datepart ("yyyy", lTime)
End Function
Function getMailboxCost(num_boxes)
' 関数は、段階的価格モデルを使用してメールボックスのコストを計算します
Dim returnValue
If num_boxes <= PPUmap1 ("Mailboxes") Then
' 最初の段階
returnValue = num_boxes * PPUmap1 ("UnitCost")
' Out.Log "Tier1: " & num_boxes
Else If num_boxes > PPUmap1 ("Mailboxes") And num_boxes <= PPUmap2 ("Mailboxes") Then
' 第 2 段階のみ
returnValue = (PPUmap1 ("Mailboxes") * PPUmap1 ("UnitCost")) + _
((num_boxes - PPUmap1 ("Mailboxes")) * PPUmap2 ("UnitCost"))
'Out.Log "Tier2: " & num_boxes
Else If num_boxes > PPUmap2 ("Mailboxes") Then
' 第 3 段階
returnValue = (PPUmap1 ("Mailboxes") * PPUmap1 ("UnitCost")) + _
((PPUmap2 ("Mailboxes") - PPUmap1 ("Mailboxes")) * PPUmap2 ("UnitCost")) + _
((num_boxes - PPUmap2 ("Mailboxes")) * PPUmap3 ("UnitCost"))
'Out.Log "Tier3: " & num_boxes
End If
getMailboxCost = returnValue
'Out.Log "Cost is: " & returnValue
End Function
注: このビジネス ロジック スクリプトは、('予測' テーブルを使用した)予測計算および会計消費コスト結果の両方を処理します。 どちらも、このメトリック用に定義された、'単価' に基づく段階的価格を計算する式 getMailboxCost() を使用しています。
| Copyright © 2012 CA. All rights reserved. | このトピックについて CA Technologies に電子メールを送信する |