前のトピック: 会計メトリック モデリング例

次のトピック: データ モデリングの例

ケース スタディ 6: 契約/サービスの会計条件のモデリング

サービスまたは契約の会計条件のモデリングに使用されるメトリックには一般的に 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() を使用しています。