# NPV 脚本函数

NPV() 脚本函数接受贴现率和按期间排序的多个值。在这些计算中，流入（收入）为正值，流出（未来付款）为负值。这些发生在每个周期结束时。

净现值 (NPV) 用于计算未来现金流的当前总价值。为了计算净现值，我们需要估计每个期间的未来现金流，并确定正确的贴现率。NPV() 脚本函数接受贴现率和按期间排序的多个值。在这些计算中，流入（收入）为正值，流出（未来付款）为负值。这些发生在每个周期结束时。

语法：

NPV(discount\_rate, value)

返回数据类型： 数字。 默认情况下，结果将被格式化为货币。

净现值的计算公式为：

![计算净现值的公式。](https://help.qlik.com/zh-CN/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` 表中的常驻荷载，用于计算名为 `NPV` 的表中项目的 NPV 字段。

* 硬编码贴现率为 10%，用于净现值计算。

* 用于对项目的所有付款进行分组的 `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 |

对于在一个周期结束时收到的 1000 美元的单笔付款，在每个周期 10% 的贴现率下，净现值等于 1000 美元除以（1 + 贴现率）。有效净现值等于 909.09 美元

## 示例 2 – 多次付款（脚本）

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

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 一个项目及其多个期间的现金流的数据集，该数据集加载到名为 `CashFlow` 的表中。

* `CashFlow` 表中的常驻荷载，用于计算名为 `NPV` 的表中项目的 NPV 字段。

* 硬编码贴现率为 10% (0.1)，用于净现值计算。

* 用于对项目的所有付款进行分组的 `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 |

对于在两个周期结束时收到的 1000 美元付款，按每个周期 10% 的贴现率计算，有效净现值等于 1735.54 美元。

## 示例 3 – 多次付款（脚本）

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

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 两个项目的贴现率，它被加载到名为 `Project` 的表中。

* 按项目 ID 和期间 ID 列出每个项目的多个期间的现金流。如果数据未排序，则可以使用此期间 ID 对记录进行排序。

* `NoConcatenate`、常驻加载和 `Left Join` 函数的组合用于创建临时表 `tmpNPV`。该表将 `Project` 和 `CashFlow` 表的记录合并为一个平面表。此表将重复每个期间的贴现率。

* `tmpNPV` 表中的常驻荷载，用于计算名为 `NPV` 的表中每个项目的 NPV 字段。

* 与每个项目关联的单个值贴现率。这是使用 `only()` 函数检索的，并用于每个项目的净现值计算。

* 一个 `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 预计在三个周期结束时收到 1000 美元的付款，每个周期的贴现率为 10%。因此，有效净现值等于 2486.85 美元。

项目 ID 2 预计在四个时期内以 15% 的贴现率支付两次 500 美元的付款和另外两次 1000 美元的付款。因此，有效净现值等于 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、常驻加载和 Left Join 函数的组合用于创建临时表 tmpNPV。该表将 Project 和 CashFlow 表的记录合并为一个平面表。此表将重复每个期间的贴现率。

* 与每个项目相关的单值贴现率，使用 only() 函数检索，并用于每个项目的净现值计算。

* tmpNPV 表中的常驻负载用于计算名为 NPV 的表中每个项目的 NPV 字段。

* 创建一个额外字段，将净现值除以每个项目的初始投资，以计算项目盈利能力指数。

* 按项目 ID 分组的 group-by 语句用于对每个项目的所有付款进行分组。

为了避免将任何合成或冗余数据加载到数据模型中，将在脚本末尾删除 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 的有效净现值为 87039.82 美元，初始投资为 100000 美元。因此，盈利能力指数等于 0.87。因为它小于 1，所以该项目不盈利。

项目 ID 2 的有效净现值为 123513.71 美元，初始投资为 100000 美元。因此，盈利能力指数等于 1.24。因为它大于 1，所以项目是有利可图的。

## 了解详情

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

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

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

* [Max 脚本函数](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)

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

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

* [Only 脚本函数](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)

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