# NPV 指令碼函數

NPV() 指令碼函數採用折扣率和依期間排序的多個值。對於這些計算，流入量 (收入) 為正值，而流出量 (未來付款) 假設為負值。這發生在每個期間結束時。

淨現值 (或 NPV) 用於計算未來現金流目前的總值。若要計算 NPV，我們必須估計每段期間的未來現金流，並判斷正確的折扣率。NPV() 指令碼函數採用折扣率和依期間排序的多個值。對於這些計算，流入量 (收入) 為正值，而流出量 (未來付款) 假設為負值。這發生在每個期間結束時。

語法：

NPV(discount\_rate, value)

傳回的資料類型： 數值。 依照預設，結果將會格式化為貨幣。

計算淨現值的公式為：

![NPV 的計算公式。](https://help.qlik.com/zh-TW/sense/May2026/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` 陳述式中指定。由於地區設定和其他因素，您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式，以滿足您的需求。或者，您可以在載入指令碼中變更格式，以符合這些範例。

應用程式中的預設地區設定是根據安裝 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)

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含一項專案及其單一期間現金流的資料集，其載入到名為 `CashFlow` 的表格中。

* `CashFlow` 表格的 Resident 載入，其用於針對 `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 |

對於每個期間 10% 折扣率並預計在單一期間結束時收到的 $1000 單筆付款，該 NPV 等於 $1000 除以 (1 + 折扣率)。有效 NPV 等於 $909.09

## 範例 2 – 多筆付款 (指令碼)

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含一項專案及其多期間現金流的資料集，其載入到名為 `CashFlow` 的表格中。

* `CashFlow` 表格的 Resident 載入，其用於針對 `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 |

對於每個期間 10% 折扣率並預計在兩個期間結束時收到的 $1000 付款，有效 NPV 等於 $1735.54。

## 範例 3 – 多筆付款 (指令碼)

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 兩項專案的折扣率，其載入到名為 `Project` 的表格中。

* 每項專案依專案 ID 和期間 ID 劃分的多期間現金流。如果資料未排序，此期間 ID 可用於排序記錄。

* `NoConcatenate`、Resident 載入及 `Left Join` 函數的組合建立臨時表格 `tmpNPV`。該表格將 `Project` 和 `CashFlow` 表格的記錄結合成一個扁平表格。此表格會重複每個期間的折扣率。

* `tmpNPV` 表格的 Resident 載入，其用於針對 `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% 折扣率的 $1000 付款。因此，有效 NPV 等於 $2486.85。

專案 ID 2 預計在四個期間中會有折扣率為 15% 的兩筆 $500 付款，以及另外兩筆 $1000 付款。因此，有效 NPV 等於 $2042.12。

## 範例 4 – 專案收益性範例 (指令碼)

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 兩項專案的折扣率和初始付款 (期間 0)，其載入到名為 Project 的表格中。

* 每項專案依專案 ID 和期間 ID 劃分的多期間現金流。如果資料未排序，此期間 ID 可用於排序記錄。

* NoConcatenate、Resident 載入及 Left Join 函數的組合建立臨時表格 tmpNPV。該表格將 Project 和 CashFlow 表格的記錄結合成一個扁平表格。此表格會重複每個期間的折扣率。

* 與每項專案相關聯的單值折扣率會使用 only() 函數擷取並用於每項專案的 NPV 計算。

* tmpNPV 表格的 Resident 載入用於針對 NPV 表格的每項專案計算 NPV 欄位。

* 將 NPV 除以每項專案初始付款的其他欄位已建立並用於計算專案收益性指數。

* 依專案 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/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)

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

* [Join](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

* [Max 指令碼函數](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)

* [NoConcatenate](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)

* [NPV - 圖表函數](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)

* [Only 指令碼函數](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)

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