XNPV - 指令碼函數在此頁面
XNPV() 會針對配對數字 (以 pmt 和 date 表示) 所代表的現金流量排程 (不一定是定期),傳回彙總淨現值。 所有支出均按照 1 年 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() 不會折扣初始現金流,因為這一律發生在開始日期。後續付款均按照 1 年 365 天攤算。這不同於也會攤算第一筆付款的 NPV() 。
date
包含對應於 pmt 中提供之現金流量付款的日期排程的運算式或欄位。 第一個值作為計算未來現金流偏移的開始日期使用。
使用此函數時,適用下列限制:
什麼情況下使用
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 1 – 單筆付款 (指令碼) 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
包含一項專案及其一年現金流的資料集,位於名稱為 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;
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
根據公式,第一筆記錄的 XNPV 值為 0,而第二筆記錄的 XNPV 值為 $909.09;因此,XNPV 總值為 $909.09。
範例 2 – 多筆付款 (指令碼) 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
包含一項專案及其一年現金流的資料集,位於 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;
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
在此範例中,第一年結束時收到 $1,000 的付款,而第二年結束時收到 $500 的付款。在每個期間折扣率為 10% 的情況下,有效 XNPV 等於 $1322.21。
請注意,只有資料第一列應參照計算的基準日期。剩餘列的順序則不重要,因為日期參數用於計算已經過的期間。
範例 3 – 多筆付款和不規則現金流 (指令碼) 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
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;
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
專案 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。