# 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 指令碼函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/XNPV.htm)：使用此函數計算現金流排程的彙總淨現值。

* [RangeXIRR 指令碼與圖表函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/RangeFunctions/RangeXIRR.htm)：RangeXIRR() 是 XIRR() 函數的同等範圍函數。

資訊備註

如需更多關於此函數使用之基礎演算法最近更新的資訊，請參閱支援文章 [XIRR 函數修正和更新](https://community.qlik.com/t5/Member-Articles/XIRR-function-Fix-and-Update/ta-p/2049021)。

## 範例

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 一系列現金流的交易資料。

* 使用 XIRR() 函數運算這些現金流的內部年度報酬率。

載入指令碼

```
Cashflow:
LOAD 2013 as Year, * inline [
Date|Payments
2013-01-01|-10000
2013-03-01|3000
2013-10-30|4200
2014-02-01|6800
] (delimiter is '|');
 
Cashflow1:
LOAD Year,XIRR(Payments, Date) as XIRR2013  Resident Cashflow Group By Year;
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `Year`

* `XIRR2013`

結果表格

| 年 | XIRR2013 |
| --- | --- |
| 2013 | 0.5385 |

## 解譯 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` 重設為零並開始以負向搜尋解決方案。

請注意，「正常」現金流保證只有一個解決方案。「正常」現金流表示具有相同符號 (正或負) 的所有款項都在連續的群組中。

## 瞭解更多資訊

* [XNPV 指令碼函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/XNPV.htm)
* [RangeXIRR 指令碼與圖表函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/RangeFunctions/RangeXIRR.htm)
* [XIRR 函數修正和更新](https://community.qlik.com/t5/Member-Articles/XIRR-function-Fix-and-Update/ta-p/2049021)