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 - 脚本函数:使用此函数可以计算现金流表的聚合净现值。
-
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 重置为零,并开始在负方向上寻找解。
请注意保证“正常”现金流,以便只有一个解。“正常”现金流意味着所有具有相同符号(正或负)的付款都在一个连续组中。