Published on

April 5, 2014

Исследование функции XIRR в SQL Server

Финансовые расчеты являются неотъемлемой частью многих бизнесов и оценок инвестиций. Одним из широко используемых финансовых расчетов является XIRR, который помогает измерять ставку доходности по денежным потокам. В этой статье мы рассмотрим реализацию XIRR в SQL Server с использованием SQL CLR.

XIRR тесно связан с функцией XNPV, функцией чистой текущей стоимости. Ставка доходности, рассчитанная с помощью XIRR, является процентной ставкой, соответствующей XNPV = 0. Давайте рассмотрим пример из документации Microsoft Office и попробуем его в SQL Server:

SELECT
    wct.XIRR([values],[dates],NULL) AS XIRR
FROM 
    (VALUES
        (-10000,'2008-01-01'),
        (2750,'2008-03-01'),
        (4250,'2008-10-30'),
        (3250,'2009-02-15'),
        (2750,'2009-04-01')
    ) n([values],[dates])

Этот запрос даст нам тот же ответ, что и в документации Microsoft Office:

XIRR
----------------------
0.373362533509583

Разработчики Westclintech реализовали функцию XIRR с использованием SQL CLR и включили ее в свою библиотеку функций XLeratorDB. Эта библиотека содержит более 750 функций, включая XIRR. Интересно, что в некоторых случаях функция XLeratorDB дает результат, который Excel не может получить. Это подчеркивает точность и надежность реализации XLeratorDB.

Давайте рассмотрим еще один пример:

SELECT
    wct.XIRR([values],[dates],NULL) AS XIRR
FROM 
    (VALUES
        (0,'2002-06-17'),
        (-42814703.5,'2008-08-19'),
        (44768952.93,'2002-11-16'),
        (0,'2003-10-31'),
        (-192485819.41,'2012-10-21'),
        (-128316512.7,'2003-01-19'),
        (-57458663.82,'2006-08-12'),
        (0,'2006-01-01'),
        (121072521.7,'2001-07-28'),
        (59000533.69,'2008-01-17'),
        (48964026.98,'2003-05-31')
    ) n([values],[dates])

В этом случае результат XLeratorDB:

XIRR
----------------------
0.101489308050466

Однако, когда те же денежные потоки помещаются в Excel 2013, результат равен 2.9802322388E-09, что по сути является нулем. Это расхождение можно объяснить тем, что Excel ожидает, что денежные потоки будут упорядочены по дате, в то время как функция XIRR в SQL Server позволяет датам находиться в любом порядке.

Чтобы проверить расчеты, мы можем использовать функцию XNPV, включенную в библиотеку XLeratorDB. Давайте проверим расчет XNPV, используя как значение XLeratorDB, так и значение Excel:

WITH mycte AS (
    SELECT *
    FROM (VALUES
        (0,'2002-06-17'),
        (-42814703.5,'2008-08-19'),
        (44768952.93,'2002-11-16'),
        (0,'2003-10-31'),
        (-192485819.41,'2012-10-21'),
        (-128316512.7,'2003-01-19'),
        (-57458663.82,'2006-08-12'),
        (0,'2006-01-01'),
        (121072521.7,'2001-07-28'),
        (59000533.69,'2008-01-17'),
        (48964026.98,'2003-05-31')
    ) n([values],[dates])
)
SELECT
    wct.XNPV(r,[values],[dates]) AS [NPV using XLDB value],
    wct.XNPV(2.9802322388E-09,[values],[dates]) AS [NPV using Excel value]
FROM (
    SELECT
        wct.XIRR([values],[dates],NULL) AS r
    FROM
        mycte
) n, mycte

Значение XLeratorDB возвращает значение XNPV, близкое к нулю, в то время как значение Excel этого не делает. Это дополнительно подтверждает точность реализации XLeratorDB.

Стоит отметить, что пакет XLeratorDB предлагает не только точные расчеты, но и отличную производительность. В тесте производительности на машине с 8 ядрами расчет XIRR смог обработать и сохранить результаты для 2,7 миллиона строк денежных потоков примерно за 17 секунд, с средней производительностью более 158 000 строк в секунду.

Пакет XLeratorDB предлагает убедительные аргументы для переноса финансовых расчетов из Excel в SQL Server. Благодаря своей точности, масштабируемости и скорости, он предлагает превосходную альтернативу для финансовых расчетов. Кроме того, поскольку расчеты выполняются на базе данных, их легко интегрировать в любую платформу или язык программирования, который может подключаться к базе данных.

Скачайте 15-дневную бесплатную пробную версию XLeratorDB сегодня и исследуйте мощь точных и эффективных финансовых расчетов в SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.