# XNPV 指令碼函數

XNPV() 會針對配對數字 (以 pmt 和 date 表示) 所代表的現金流量排程 (不一定是定期)，傳回彙總淨現值。 所有支出均按照 1 年 365 天攤算。

語法：

XNPV(discount\_rate, pmt, date)

傳回的資料類型： 數值

資訊備註依照預設，結果將會格式化為貨幣。

XNPV 的計算公式顯示如下：

XNPV 彙總公式

XNPV 彙總公式

XNPV 彙總公式 ![XNPV 指令碼函數的公式影像。](https://help.qlik.com/zh-TW/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-xnpv-formula.png)

其中：

* `P``i` = 單一期間 `i` 的淨現金流入-流出量

* `d``1`= 第一筆付款日期

* `d``i` = 第 `i` 筆付款日期

* `rate` = 折扣率

淨現值 (或 NPV) 用於計算在指定折扣率下未來現金流目前的總值。若要計算 XNPV，我們需要以對應的日期估算未來現金流。在此之後，對於每筆付款，我們會根據付款日期套用複合折扣率。

透過一系列的付款執行 XNPV 彙總類似於透過這些付款執行總和彙總。差別在於，會根據所選的折扣率 (類似利率) 和付款距離未來多久來修改 (或「折扣」) 每筆金額。使用設定為零的 discount\_rate 參數執行 XNPV 將會讓 XNPV 等同於總和操作 (在加總之前不會修改付款)。一般而言，設定的 discount\_rate 越接近零，XNPV 結果就會越類似於總和彙總的結果。

引數

| 引數 | 描述 |
| --- | --- |
| discount\_rate | discount\_rate 是付款應據此折扣的年折扣率。<br><br>0.1 的值表示 10% 的折扣率。 |
| pmt | 付款。包含對應於 date 中提供之付款排程的現金流量的運算式或欄位。 正值假設為收入，而負值則假設為支出。<br><br>資訊備註XNPV() 不會折扣初始現金流，因為這一律發生在開始日期。後續付款均按照 1 年 365 天攤算。這不同於也會攤算第一筆付款的 NPV()。 |
| date | 包含對應於 pmt 中提供之現金流量付款的日期排程的運算式或欄位。 第一個值作為計算未來現金流偏移的開始日期使用。 |

使用此函數時，適用下列限制：

* 若資料配對中有任一資料是 (或兩個都是) 文字值、NULL 值及遺漏值，會導致整個資料配對被忽略。

## 什麼情況下使用

* `XNPV()` 用於計算投資機會淨現值 (NPV) 的財務模型。

* 由於其精確度較高，因此與 NPV 相比偏好為所有財務模型類型採用 XNPV。

## 區域設定

除非另有說明，否則此主題中的範例皆使用下列日期格式：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/XNPV.htm)

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

概述

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

載入指令碼包含：

* 包含一項專案及其一年現金流的資料集，位於名稱為 `CashFlow` 的表格中。初始計算日期設為 2022 年 7 月 1 日，且淨現金流為 0。一年後會有 $1000 的現金流。

* `CashFlow` 表格的 Resident 載入，其用於針對名稱為 `XNPV` 的表格中的專案計算 `XNPV` 欄位。

* 10% (0.1) 的硬式編碼折扣率用於 XNPV 計算。

* `Group By` 陳述式用於分組專案的所有付款。

載入指令碼

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `PrjId`

* `XNPV`

結果表格

| PrjId | XNPV |
| --- | --- |
| 1 | $909.09 |

根據公式，第一筆記錄的 XNPV 值為 0，而第二筆記錄的 XNPV 值為 $909.09；因此，XNPV 總值為 $909.09。

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

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

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

概述

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

載入指令碼包含：

* 包含一項專案及其一年現金流的資料集，位於 `CashFlow` 的表格中。

* `CashFlow` 表格的 Resident 載入，其用於針對 `XNPV` 表格中的專案計算 `XNPV` 欄位。

* 10% (0.1) 的硬式編碼折扣率用於 XNPV 計算。

* `Group By` 陳述式用於分組專案的所有付款。

載入指令碼

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2024',500
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `PrjId`

* `XNPV`

結果表格

| PrjId | XNPV |
| --- | --- |
| 1 | $1322.21 |

在此範例中，第一年結束時收到 $1,000 的付款，而第二年結束時收到 $500 的付款。在每個期間折扣率為 10% 的情況下，有效 XNPV 等於 $1322.21。

請注意，只有資料第一列應參照計算的基準日期。剩餘列的順序則不重要，因為日期參數用於計算已經過的期間。

## 範例 3 – 多筆付款和不規則現金流 (指令碼)

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

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

概述

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

載入指令碼包含：

* `Project` 表格中兩項專案的折扣率。

* 每項專案依專案 ID 和日期劃分的多期間現金流。`Dates` 欄位用於計算將折扣率套用至現金流的持續時間。第一筆記錄 (初始現金流和日期) 除外的記錄順序不重要，而且變更後不會影響計算。

* 使用 `NoConcatenate`、Resident 載入及 `Left Join` 函數建立臨時表格 `tmpNPV` 時，該表格會將 `Project` 和 `CashFlow` 表格的記錄結合至一個扁平表格中。此表格會重複每個現金流的折扣率。

* `tmpNPV` 表格的 Resident 載入，其用於針對 `XNPV` 表格中的每項專案計算 `XNPV` 欄位。

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

* 依專案 ID 分組的 `Group By` 陳述式用於分組每項專案的所有付款和對應日期。

* 若要避免任何合成或冗餘資料載入到資料模型，指令碼結束時會捨棄 `tmpXNPV` 表格。

載入指令碼

```
Project:
Load * inline [
PrjId,Discount_Rate
1,0.1
2,0.15
];

CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2021',0
1,'07/01/2022',1000
1,'07/01/2023',1000
2,'07/01/2020',0
2,'07/01/2023',500
2,'07/01/2024',1000
2,'07/01/2022',500
];

tmpXNPV:
NoConcatenate Load *
Resident Project;
Left Join
Load * 
Resident CashFlow;

XNPV:
Load 
	PrjId,
	XNPV(Only(Discount_Rate),Values,Dates) as XNPV //Discount Rate will be 10% for Project 1 and 15% for Project 2
Resident tmpXNPV
Group By PrjId;

Drop table tmpXNPV;
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `PrjId`

* `XNPV`

結果表格

| PrjId | XNPV |
| --- | --- |
| 1 | $1735.54 |
| 2 | $278.36 |

專案 ID 1 在 2021 年 7 月 1 日的初始現金流為 $0。連續兩年結束時預計收到每個期間 10% 折扣率的 $1,000 付款。因此，有效 XNPV 等於 $1735.54。

專案 ID 2 在 2020 年 7 月 1 日的初始流出量為 $1000 (因此為負號)。兩年後，預計有 $500 的付款。三年後，預計有另一筆 $500 的付款。最後在 2024 年 7 月 1 日，預計有 $1,000 的付款。在折扣率為 15% 的情況下，有效 XNPV 等於 $278.36。

## 瞭解更多資訊

* [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)