NPV - スクリプト関数
NPV() スクリプト関数は、期間順の割引率と複数の値を取得します。これらの計算では、インフロー (収入) はプラス、アウトフロー (将来の支払い) はマイナスの値であると仮定しています。これらは、各期間の終わりに発生します。
正味現在価値 (NPV) は、将来のキャッシュ フローの現行合計価値を計算するのに使用されます。NPV を計算するには、各期間に対して将来のキャッシュ フローを推測して、正しい割引率を決定する必要があります。NPV() スクリプト関数は、期間順の割引率と複数の値を取得します。これらの計算では、インフロー (収入) はプラス、アウトフロー (将来の支払い) はマイナスの値であると仮定しています。これらは、各期間の終わりに発生します。
構文:
NPV(discount_rate, value)
戻り値データ型: 数値 既定では、結果は通貨としてフォーマットされます。
正味現在価値を計算する式:
次のような前提です:
引数
discount_rate |
discount_rate は、適用された割引のパーセントです。
値 0.1 は、10% の割引率を示します。
|
value |
この項目は、複数の期間を期間順に並べた値を保持します。最初の値は、期間 1 のキャッシュフローというように見なされます。
|
制限事項:
NPV() 関数には次の制限事項があります:
使用に適しているケース
NPV() は、プロジェクトの収益性をチェックし、他のメジャーを派生させるために使用される財務関数です。この関数は、キャッシュフローが生データとして存在する場合に有用です。
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。詳しくは「アプリとスクリプトの地域設定の変更」を参照してください。
アプリの既定地域設定は、ユーザー プロファイルに基づいています。これらの地域の書式設定は、Qlik Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。
アプリの作成者は、作成するアプリの既定の地域を設定できます。詳細については、「Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定」を参照してください。
例 1 - 単一の支払い (スクリプト)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
1 件のプロジェクトと 1 期間のそのキャッシュフローのデータセットで、CashFlow という名前のテーブルにロードされます。
-
CashFlow テーブルからの resident load で、NPV という名前のプロジェクトの NPV 項目を計算するのに使用されます。
-
ハードコードされた割引率 10% で、これは NPV 計算で使用されます。
-
Group By ステートメント、これはプロジェクトのすべての支払いをまとめるのに使用されます。
ロード スクリプト
CashFlow:
Load
*
Inline
[
PrjId,PeriodId,Values
1,1,1000
];
NPV:
Load
PrjId,
NPV(0.1,Values) as NPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
1 回の支払いで期末に 1000 ドルを受け取る場合、期間あたりの割引率を 10% とすると、NPV は 1000 ドルを (1+割引率) で除算した値になります。有効な NPV は 909.09 ドルと同値です。
例 2 – 複数支払い (スクリプト)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
1 件のプロジェクトと複数期間のそのキャッシュフローのデータセットで、CashFlow という名前のテーブルにロードされます。
-
CashFlow テーブルからの resident load で、NPV という名前のプロジェクトの NPV 項目を計算するのに使用されます。
-
ハードコードされた割引率 10% (0.1) で、これは NPV 計算で使用されます。
-
Group By ステートメント、これはプロジェクトのすべての支払いをまとめるのに使用されます。
ロード スクリプト
CashFlow:
Load
*
Inline
[
PrjId,PeriodId,Values
1,1,1000
1,2,1000
];
NPV:
Load
PrjId,
NPV(0.1,Values) as NPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
支払いで 2 期間の末に 1000 ドルを受け取る場合、期間あたりの割引率を 10% とすると、有効な NPV は 1735.54 ドルになります。
例 3 – 複数支払い (スクリプト)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
2 つのプロジェクトの割引率で、Project というテーブルにロードされます。
-
プロジェクト ID と期間 ID 別の、各プロジェクトに対する複数の期間のキャッシュフロー。この期間 ID は、データを順序付けしない場合に、レコードを順序付けするのに使用できます。
-
臨時テーブル tmpNPV を作成するための、NoConcatenate、Resident loads、および Left Join 関数の組み合わせ。テーブルは、Project と CashFlow テーブルを組み合わせて 1 つのフラット テーブルにします。このテーブルでは、各期間に対して割引率が繰り返されます。
-
tmpNPV テーブルからの resident load で、NPV という名前の各プロジェクトの NPV 項目を計算するのに使用されます。
-
各プロジェクトに関連付けられた単一値の割引率。これは、only() 関数を使って取得され、各プロジェクトに対する NPV 計算で使用されます。
-
Group By ステートメント、これはプロジェクト ID 別に各プロジェクトのすべての支払いをまとめるのに使用されます。
データ モデルに合計または重複データがロードされないようにするため、tmpNPV テーブルがスクリプトの終わりに削除されます。
ロード スクリプト
Project:
Load * inline [
PrjId,Discount_Rate
1,0.1
2,0.15
];
CashFlow:
Load
*
Inline
[
PrjId,PeriodId,Values
1,1,1000
1,2,1000
1,3,1000
2,1,500
2,2,500
2,3,1000
2,4,1000
];
tmpNPV:
NoConcatenate Load *
Resident Project;
Left Join
Load *
Resident CashFlow;
NPV:
Load
PrjId,
NPV(Only(Discount_Rate),Values) as NPV //Discount Rate will be 10% for Project 1 and 15% for Project 2
Resident tmpNPV
Group By PrjId;
Drop table tmpNPV;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル
1 |
$2486.85 |
2 |
$2042.12 |
プロジェクト ID 1 では、期間あたりの割引率 10% で、3 期間の末に支払額 1000 ドルを受け取ると予想されます。そのため、有効な NPV は 2486.85 です。
プロジェクト ID 2 では、割引率 15% で、4 期間に 500 ドルの支払いを 2 回と、さらに 1000 ドルの支払いを 2 回受け取ると予想されます。そのため、有効な NPV は 2042.12 です。
例 4 – プロジェクトの収益率の例 (例)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
2 つのプロジェクトの割引率と初期投資額 (期間 0) で、Project というテーブルにロードされます。
-
プロジェクト ID と期間 ID 別の、各プロジェクトに対する複数の期間のキャッシュフロー。この期間 ID は、データを順序付けしない場合に、レコードを順序付けするのに使用できます。
-
臨時テーブル tmpNPV を作成するための、NoConcatenate、Resident loads、および Left Join 関数の組み合わせ。テーブルは、Project と CashFlow テーブルを組み合わせて 1 つのフラット テーブルにします。このテーブルでは、各期間に対して割引率が繰り返されます。
-
各プロジェクトに関連付けられた単一値の割引率で、これは、only() 関数を使って取得され、各プロジェクトに対する NPV 計算で使用されます。
-
tmpNPV テーブルからの resident load で、NPV という名前の各プロジェクトの NPV 項目を計算するのに使用されます。
-
プロジェクトの収益性指数を算出するために、各プロジェクトの NPV を初期投資額で割る追加項目。
-
group by ステートメント (プロジェクト ID 別にグループ化) は、各プロジェクトのすべての支払いをまとめるのに使用されます。
データ モデルに合計または重複データがロードされないようにするため、tmpNPV テーブルがスクリプトの終わりに削除されます。
ロード スクリプト
Project:
Load * inline [
PrjId,Discount_Rate, Initial_Investment
1,0.1,100000
2,0.15,100000
];
CashFlow:
Load
*
Inline
[
PrjId,PeriodId,Values,
1,1,35000
1,2,35000
1,3,35000
2,1,30000
2,2,40000
2,3,50000
2,4,60000
];
tmpNPV:
NoConcatenate Load *
Resident Project;
Left Join
Load *
Resident CashFlow;
NPV:
Load
PrjId,
NPV(Only(Discount_Rate),Values) as NPV, //Discount Rate will be 10% for Project 1 and 15% for Project 2
NPV(Only(Discount_Rate),Values)/ Only(Initial_Investment) as Profitability_Index
Resident tmpNPV
Group By PrjId;
Drop table tmpNPV;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
次のメジャーを作成します:
=only(Profitability_Index)
結果テーブル
1 |
$87039.82 |
0.87 |
2 |
$123513.71 |
1.24 |
プロジェクト ID 1 の有効 NPV は 87039.82 ドルで、初期投資額は 100000 ドルです。そのため、収益性指数は 0.87 となります。これは 1 より小さいため、プロジェクトには収益性がありません。
プロジェクト ID 2 の有効 NPV は 123513.71 ドルで、初期投資額は 100000 ドルです。そのため、収益性指数は 1.24 となります。これは 1 より大きいため、プロジェクトは収益性があるということです。
詳細を見る