XNPV - 指令碼函數在此頁面
XNPV() 指令碼函數採用對應至每個折扣 (折扣率除外) 現金流的特定日期。這與 NPV() 函數不同,因為 NPV() 假設所有期間都相等。因此,XNPV() 比 NPV() 更精確。
語法:
XNPV( discount_rate, pmt,
date)
傳回的資料類型: 數值。 依照預設,結果將會格式化為貨幣。
XNPV 的計算公式為:
其中:
P i = 單一期間 i 的淨現金流入-流出量
d 1 = 第一筆付款日期
d i = 第 i 筆付款日期
rate = 折扣率
淨現值 (或 NPV) 用於計算未來現金流目前的總值。若要計算 NPV,我們必須估計每段期間的未來現金流,並判斷正確的折扣率。
XNPV() 採用折扣率和依期間排序的多個值。流入量 (收入) 為正值,而流出量 (未來付款) 假設為負值。這發生在每個期間結束時。
引數
discount_rate
discount_rate 是套用的折扣百分比。
0.1 的值表示 10% 的折扣率。
value
此欄位保留現金流值。第一個值假設為一開始的現金流,且對應日期用於所有未來現金流的現值計算參考。
資訊備註 XNPV() 不會攤算初始現金流。後續付款均按照 1 年 365 天攤算。這不同於攤算每筆付款的 NPV() 。
date
此欄位保留現金流 (value ,第二個參數) 發生的日期。第一個值作為計算未來現金流偏移的開始日期使用。
限制:
若資料配對中有任一資料是 (或兩個都是) 文字值、NULL 值及遺漏值,即會忽略資料配對。
什麼情況下使用
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式: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;
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
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。
另請參見: