# XIRR 脚本函数

XIRR() 函数用于返回聚合内部回报率（每年），以揭示迭代于 group by 子句定义的大量记录上的 pmt 和 date 表达式的成对数值表示的现金流时间表（不必为周期性的）。 所有付款按 365 天一年年折扣。

Qlik 的 XIRR 函数（XIRR() 和 RangeXIRR() 函数）使用以下方程来求解 `Rate` 值，以确定正确的 XIRR 值：

`XNPV(Rate, pmt, date) = 0`

这个方程是用简化版的牛顿法求解的。

语法：

XIRR(pmt, date )

返回数据类型： 数字

参数

| 参数 | 描述 |
| --- | --- |
| pmt | 付款。表达式或字段包含与在 date 中指定的付款时间表对应的现金流。 |
| date | 表达式或字段包含与在 pmt 中指定的现金流支付对应的日期时间表。 |

使用此功能时，以下限制适用：

* 数据对的任意部分或两部分内存在文本值、NULL 值和缺失值会导致整个数据对被忽略。

* 此函数需要至少一个有效的负付款和至少一个无效的正付款（具有相应的有效日期）。如果没有提供这些付款，则会返回 NULL 值。

这些主题可以帮助您使用此函数：

* [XNPV 脚本函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/XNPV.htm)：使用此函数可以计算现金流表的聚合净现值。

* [RangeXIRR 脚本和图表功能](https://help.qlik.com/zh-CN/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-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/XNPV.htm)
* [RangeXIRR 脚本和图表功能](https://help.qlik.com/zh-CN/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)