# NPV - スクリプト関数

NPV() スクリプト関数は、期間順の割引率と複数の値を取得します。これらの計算では、インフロー (収入) はプラス、アウトフロー (将来の支払い) はマイナスの値であると仮定しています。これらは、各期間の終わりに発生します。

正味現在価値 (NPV) は、将来のキャッシュ フローの現行合計価値を計算するのに使用されます。NPV を計算するには、各期間に対して将来のキャッシュ フローを推測して、正しい割引率を決定する必要があります。NPV() スクリプト関数は、期間順の割引率と複数の値を取得します。これらの計算では、インフロー (収入) はプラス、アウトフロー (将来の支払い) はマイナスの値であると仮定しています。これらは、各期間の終わりに発生します。

構文:

NPV(discount\_rate, value)

戻り値データ型： 数値 既定では、結果は通貨としてフォーマットされます。

正味現在価値を計算する式:

![NPV を計算するための式。](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-npv-formula.png)

次のような前提です:

* `R``t`= 単一期間 `t` 中の正味キャッシュ インフロー/アウトフロー

* `i` = 代替投資で得られた割引率または利益率

* `t` = タイマー期間数

引数

| 引数 | 説明 |
| --- | --- |
| discount\_rate | discount\_rate は、適用された割引のパーセントです。<br><br>値 0.1 は、10% の割引率を示します。 |
| value | この項目は、複数の期間を期間順に並べた値を保持します。最初の値は、期間 1 のキャッシュフローというように見なされます。 |

制限事項:

`NPV()` 関数には次の制限事項があります:

* テキスト値、NULL 値、欠損値は無視されます。

* キャッシュフロー値は、期間を昇順に並べる必要があります。

## 使用に適しているケース

`NPV()` は、プロジェクトの収益性をチェックし、他のメジャーを派生させるために使用される財務関数です。この関数は、キャッシュフローが生データとして存在する場合に有用です。

## 地域の設定

特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの `SET DateFormat` ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。

App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。

## 例 1 - 単一の支払い (スクリプト)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/NPV.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 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;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `PrjId`

* `NPV`

結果テーブル

| PrjId | NPV |
| --- | --- |
| 1 | $909.09 |

1 回の支払いで期末に 1000 ドルを受け取る場合、期間あたりの割引率を 10% とすると、NPV は 1000 ドルを (1＋割引率) で除算した値になります。有効な NPV は 909.09 ドルと同値です。

## 例 2 – 複数支払い (スクリプト)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/NPV.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 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;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `PrjId`

* `NPV`

結果テーブル

| PrjId | NPV |
| --- | --- |
| 1 | $1735.54 |

支払いで 2 期間の末に 1000 ドルを受け取る場合、期間あたりの割引率を 10% とすると、有効な NPV は 1735.54 ドルになります。

## 例 3 – 複数支払い (スクリプト)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/NPV.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 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;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `PrjId`

* `NPV`

結果テーブル

| PrjId | NPV |
| --- | --- |
| 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 – プロジェクトの収益率の例 (例)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/NPV.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 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;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* PrjId

* NPV

次のメジャーを作成します:

=only(Profitability\_Index)

結果テーブル

| PrjId | NPV | =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 より大きいため、プロジェクトは収益性があるということです。

## 詳細を見る

* [Drop table](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)

* [group by](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm#group_by)

* [Join](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

* [Max - スクリプト関数](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)

* [NoConcatenate](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)

* [NPV - チャート関数](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)

* [Only - スクリプト関数](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)

* [Resident LOAD](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm#Resident)