全部展开/折叠  
                     XNPV - 脚本函数在该页面上  
                
                    
XNPV()  函数用于返回聚合净现值,以揭示 pmt  和 date  表达式的成对数值表示的现金流时间表(不必为周期性的)。 所有付款按 365 天一年年折扣。 
                
                语法:    
                XNPV( discount_rate, pmt, 
 date) 
                返回数据类型:    数字 
                信息注释 默认情况下,结果将被格式化为货币。
                计算 XNPV 的公式如下所示:
                
                    XNPV 聚合公式
                    
                  
                其中:
                
                    
                        P i = 单期净现金流入流出 i 
                     
                    
                        d 1 = 第一次付款日期
                     
                    
                        d i  = 第 i   次付款日期
                     
                    
                        rate  = 贴现率
                     
                 
                净现值 (NPV) 用于在给定折扣率的情况下计算未来现金流的当前总价值。要计算 XNPV,我们需要估计具有相应日期的未来现金流。在此之后,对于每次付款,我们将根据付款日期采用复合折扣率。
                对一系列付款执行 XNPV 聚合类似于对这些付款执行求和聚合。不同之处在于,每个金额都会根据所选的折扣率(类似于利率)和未来付款的时间进行修改(或“打折扣”)。在 discount_rate  参数设置为零的情况下执行 XNPV 将使 XNPV 等效于求和操作(在求和之前不会修改付款)。一般而言,discount_rate  设置得越接近零,XNPV 结果就越类似于求和聚合的结果。
                
                    参数 
                     
                     
                    
                        
                     
                    
                        
                            discount_rate 
                            
                                discount_rate  是付款折扣时依据的年费率。
                                值 0.1 表示 10% 的贴现率。
                             
                         
                        
                            pmt 
                            
                                付款。表达式或字段包含与在 date  中指定的付款时间表对应的现金流。 正值被假定为流入,负值被假定为流出。
                                信息注释 XNPV()  不会对初始现金流进行折扣,因为它总是在开始日期发生。后续付款按 365 天的年折扣。这与第一笔付款也打折的 NPV()  不同。
                             
                         
                        
                            date 
                            
                                表达式或字段包含与在 pmt  中指定的现金流支付对应的日期时间表。 第一个值用作计算未来现金流抵销的开始日期。
                             
                         
                     
                
 
                使用此功能时,以下限制适用:
                
                适用场景 
                
                区域设置 
                除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat  语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。有关详细信息,请参阅修改应用程序和脚本的区域设置  。 
                应用程序中的默认区域设置基于用户配置文件。这些区域格式设置与 Qlik Cloud  用户界面中显示的语言无关。Qlik Cloud  将以与您使用的浏览器相同的语言显示。
                如果你是应用程序创建者,你可以为自己创建的应用程序设置默认区域。有关更多信息,请参阅设置 Qlik Cloud 分析 中创建应用程序和脚本所用的首选区域设置  。
                
                    示例 1 – 一次性付款(脚本) 
                    加载脚本和结果 
                            概述
                            打开数据加载编辑器,并将下面的加载脚本添加到新部分。 
                            加载脚本包含:
                            
                                
                                    一个项目及其一年现金流的数据集 ,位于名为 CashFlow  的表中。计算的初始日期为 2022 年 7 月 1 日,净现金流为 0。一年后,现金流为 1000 美元。
                                 
                                
                                    CashFlow  表中的常驻荷载 ,用于计算名为 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; 
                            结果
                            加载数据并打开工作表。创建新表并将这些字段添加为维度:
                            
                            
                            根据公式,第一条记录的 XNPV 值为 0,第二条记录的 XNPV 值是 909.09 美元。因此,总 XNPV 是 909.09 美元。
                          
                 
                
                    示例 2 – 多次付款(脚本) 
                    加载脚本和结果 
                            概述
                            打开数据加载编辑器,并将下面的加载脚本添加到新部分。 
                            加载脚本包含:
                            
                                
                                    一个项目及其一年现金流的数据集,位于名为 CashFlow  的表中。
                                 
                                
                                    CashFlow  表中的常驻荷载,用于计算名为 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; 
                            结果
                            加载数据并打开工作表。创建新表并将这些字段添加为维度:
                            
                            
                            在本例中,第一年年底收到 1000 美元的付款,第二年年底收到 500 美元的付款。如果每期贴现率为 10%,有效 XNPV 等于 1322.21 美元。 
                            请注意,只有第一行数据应引用计算基准日期。对于其余的行,顺序并不重要,因为日期参数用于计算经过的期间。
                          
                 
                
                    示例 3 – 多次付款和不规则现金流(脚本) 
                    加载脚本和结果 
                            概述
                            打开数据加载编辑器,并将下面的加载脚本添加到新部分。 
                            加载脚本包含:
                            
                                
                                    名为 Project  的表中两个项目的折扣率。
                                 
                                
                                    按项目 ID 和日期列出每个项目的多个期间的现金流。Dates  字段用于计算贴现率应用于现金流的持续时间。除了第一条记录(初始现金流和日期)外,记录的顺序并不重要,更改它不应影响计算。
                                 
                                
                                    使用 NoConcatenate 、Resident Load 和 Left Join  函数的组合,将创建一个临时表 tmpNPV ,将 Project  和 CashFlow  表的记录组合在一个平面表中。此表将重复每个现金流的贴现率。
                                 
                                
                                    tmpNPV  表中的常驻荷载,用于计算名为 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; 
                            结果
                            加载数据并打开工作表。创建新表并将这些字段添加为维度:
                            
                            
                            2021 年 7 月 1 日,项目 ID 1 的初始现金流为 0 美元。在随后的两年结束时,将收到两笔 1000美 元的付款,每个期间的贴现率为 10%。因此,有效 XNPV 等于 1735.54 美元。 
                            项目 ID 2 在 2020 年 7 月 1 日的初始流出量为 1000 美元(因此为负号)。两年后,预计将支付 500 美元。3 年后,预计将再支付 500 美元。最后,2024 年 7 月 1 日,预计将支付 1000 美元。贴现率为 15% 时,有效 XNPV 等于 278.36 美元。