XIRR - 指令碼函數
XIRR() 會針對由 group by 子句所定義之若干記錄上反覆運算的配對數字 pmt 和 date 所代表的現金流量排程 (不一定是定期),傳回彙總的內部報酬率 (每年)。 所有支出均按照 1 年 365 天攤算。
Qlik 的 XIRR 功能 (XIRR() 和 RangeXIRR() 函數) 使用解開 Rate 值的下列方程式,以判定正確的 XIRR 值:
XNPV(Rate, pmt, date) = 0
會使用 Newton 方法的簡化版本解開方程式。
語法:
XIRR(pmt, date )
傳回的資料類型: 數值
引數 | 描述 |
---|---|
pmt |
付款。包含對應於 date 中提供之付款排程的現金流量的運算式或欄位。 |
date | 包含對應於 pmt 中提供之現金流量付款的日期排程的運算式或欄位。 |
使用此函數時,適用下列限制:
-
若資料配對中有任一資料是 (或兩個都是) 文字值、NULL 值及遺漏值,會導致整個資料配對被忽略。
-
此函數需要至少一個有效負值和至少一個有效正值付款 (連同對應的有效日期)。若未提供這些付款,會傳回 NULL 值。
這些主題可能可協助您使用此函數:
-
XNPV - 指令碼函數: 使用此函數計算現金流排程的彙總淨現值。
-
RangeXIRR - 指令碼與圖表函數:RangeXIRR() 是 XIRR() 函數的同等範圍函數。
在 Qlik Sense 用戶端管理 的不同版本,此函數使用的基礎演算法有變化。如需關於演算法最近更新的資訊,請參閱支援文章 XIRR 函數修正和更新。
範例
解譯 XIRR 傳回值
XIRR 功能通常用來分析投資,這在開始時有支出 (負) 款項,隨後則有一系列金額較小的收入 (正) 款項。以下是簡化範例,只有一個負值和一個正值款項:
Cashflow:
LOAD * inline [
Date|Payments
2023-01-01|-100
2024-01-01|110
] (delimiter is '|');
我們的初始付款是 100,並在一年後取回 110。這代表每年 10% 的報酬率。XIRR(Payments, Date) 傳回值 0.1。
XIRR 功能的傳回值可以是正值或負值。在投資情況下,負值結果表示投資有損失。透過付款欄位進行總和彙總,即可簡單計算獲得或損失的金額。
在上述範例中,我們將自己的金錢借出一年。報酬率可以想成利息。若您是交易的另一方 (例如,若您是借入者而非借出者),也可以使用 XIRR 功能。
考慮此範例:
Cashflow:
LOAD * inline [
Date|Payments
2023-01-01|100
2024-01-01|-110
] (delimiter is '|');
這與第一個範例相同,但情況相反。在此,我們借貸了 100 一年,償還時需附帶 10% 利息。在此範例中,XIRR 計算傳回 0.1 (10%),與第一個範例的值相同。
請注意,在第一個範例中,我們收到了利潤 10,而在第二個範例中,我們損失了 10,但 XIRR 功能的傳回值在兩個範例中都是正值。這是因為無論您是交易哪一方,XIRR 功能都會計算交易中的隱藏利息。
多個解決方案下的限制
Qlik 的 XIRR 功能透過下列方程式定義,其中會解出 Rate 值:
XNPV(Rate, pmt, date) = 0
有時候此方程式可以有多個解決方案。這稱為「多 IRR 問題」,由於非正常現金流 (也稱為不尋常的現金流) 所造成。下列載入指令碼顯示此範例:
Cashflow:
LOAD * inline [
Date|Payments
2021-01-01|-200
2022-01-01|500
2023-01-01|-250
] (delimiter is '|');
在此範例中,有一個負值解決方案和一個正值解決方案 (Rate = -0.3 和 Rate = 0.8)。XIRR() 將會傳回 0.8。
當 Qlik 的 XIRR 功能搜尋解決方案時,這從 Rate = 0 開始,並逐步增加比率,直到找到解決方案為止。若有多個正值解決方案,將會傳回第一個出現的內容。若找不到正值解決方案,會將 Rate 重設為零並開始以負向搜尋解決方案。
請注意,「正常」現金流保證只有一個解決方案。「正常」現金流表示具有相同符號 (正或負) 的所有款項都在連續的群組中。