# XNPV Функция скрипта

Функция XNPV() возвращает агрегированную чистую текущую стоимость для графика потоков денежных средств (необязательно регулярных), представленных парными числами в элементах pmt и date. Все платежи учитываются на основе года с 365 днями.

Синтаксис:

XNPV(discount\_rate, pmt, date)

Возвращаемые типы данных: число

Примечание к информацииПо умолчанию результат будет отформатирован как валюта.

Для расчета XNPV используется следующая формула:

Формула агрегирования XNPV

Формула агрегирования XNPV

Формула агрегирования XNPV ![Изображение формулы для функции скрипта XNPV.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-xnpv-formula.png)

где:

* `P``i`= чистый приход-расход денежных средств в течение одного периода `i`

* `d``1`= дата первого платежа

* `d``i` = дата `i`^-го^ платежа

* `rate` = процент скидки

Чистая текущая стоимость (Net Present Value, NPV) используется для расчета текущей общей стоимости будущих потоков движения денежных средств с учетом ставки дисконта. Для расчета XNPV необходимо оценить будущие потоки движения денежных средств с соответствующими датами. После этого для каждого платежа применяется сложная ставка дисконта на основе даты платежа.

Выполнение агрегирования XNPV для серии платежей выполняется аналогично агрегированию суммы этих платежей. Разница заключается в том, что каждая сумма модифицируется (или «дисконтируется») в соответствии с выбранной дисконтной ставкой (подобно процентной ставке) и с тем, насколько далеко в будущем ожидается платеж. Выполнение XNPV с параметром discount\_rate=0 дает значение XNPV, равное результату операции суммирования (Sum) (платежи не модифицируются перед суммированием). В общем, чем ближе значение discount\_rate к нулю, тем ближе результат XNPV к результату агрегирования суммы.

Аргументы

| Аргумент | Описание |
| --- | --- |
| discount\_rate | discount\_rate — годовая ставка дисконта, на которую должны уменьшаться платежи.<br><br>Значение 0,1 соответствует скидке 10%. |
| pmt | Платежи. Выражение или поле, содержащее денежные потоки, соответствующие графику платежей, представленному в элементе date. Положительные значения воспринимаются рассматриваются как доходы, а отрицательные — как расходы.<br><br>Примечание к информацииXNPV() не уменьшает начальный поток денежных средств, так как он всегда происходит в дату начала. Последующие платежи учитываются на основе года с 365 днями. Эта функция отличается от функции NPV(), которая также применяет скидку к первому платежу. |
| date | Выражение или поле, содержащее график дат, соответствующих потоку денежных средств, представленному в элементе pmt. Первое значение используется как начальная дата при расчетах смещения для будущих денежных потоков. |

При работе с этой функцией действуют следующие варианты:

* Текстовые значения, значения NULL и отсутствующие значения в какой-либо или обеих частях пары значений приводят к игнорированию всей пары значений.

## Когда использовать NPV

* `XNPV()` используется при финансовом моделировании для расчета чистой текущей стоимости (NPV) инвестиционной возможности.

* Благодаря более высокой точности XNPV этой функции отдается предпочтение перед NPV для всех типов финансовых моделей.

## Региональные настройки

Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: MM/DD/YYYY. Формат даты указан в операторе `SET DateFormat` скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами. Для получения дополнительной информации см. раздел [Изменение региональных настроек для приложений и скриптов](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm).

Региональные настройки по умолчанию в приложениях основаны на профиле пользователя. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Cloud. Qlik Cloud будет отображаться на языке, который используется в браузере.

Если вы — разработчик приложений, то можете задать регион по умолчанию для создаваемых приложений. Для получения дополнительной информации см. раздел [Установка предпочтительных региональных настроек для создания приложений и скриптов в Аналитика Qlik Cloud](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting).

## Пример 1. Один платеж (скрипт)

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

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных одного проекта и его денежного потока за один год в таблице под именем `CashFlow`. В качестве начальной даты для расчета задано 1 июля 2022 года со значением денежного потока 0. Через год регистрируется денежный поток $1000.

* Резидентная загрузка из таблицы `CashFlow`, используемая при расчете поля `XNPV` для проекта в таблице под именем `XNPV`.

* Жестко запрограммированный процент скидки 10% (0,1), используемый при расчете XNPV.

* Оператор `Group By` используется для группировки всех платежей в проекте.

Скрипт загрузки

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `PrjId`

* `XNPV`

Результирующая таблица

| PrjId | XNPV |
| --- | --- |
| 1 | $909.09 |

Согласно формуле, XNPV для первой записи имеет значение 0, а для второй записи XNPV = $909.09. Таким образом, общая величина XNPV составила $909.09.

## Пример 2. Несколько платежей (скрипт)

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

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных одного проекта и его денежного потока за один год в таблице под именем `CashFlow`.

* Резидентная загрузка из таблицы `CashFlow`, используемая при расчете поля `XNPV` для проекта в таблице под именем `XNPV`.

* Жестко запрограммированный процент скидки 10% (0,1), используемый при расчете XNPV.

* Оператор `Group By` используется для группировки всех платежей в проекте.

Скрипт загрузки

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2024',500
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `PrjId`

* `XNPV`

Результирующая таблица

| PrjId | XNPV |
| --- | --- |
| 1 | $1322.21 |

В этом примере платеж $1000 получен в конце первого года, а платеж $500 получен в конце второго года. Так как действует скидка 10% за период, фактическое значение XNPV составляет $1322.21.

Обратите внимание, что только первая строка данных должна ссылаться на базовую дату для расчетов. Для остальных строк порядок не имеет значения, так как параметр даты используется для расчета истекшего периода.

## Пример 3. Несколько платежей и нерегулярные денежные потоки (скрипт)

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

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Процентные ставки скидки для двух проектов в таблице под именем `Project`.

* Денежные потоки за несколько периодов для каждого проекта по идентификаторам проекта и датам. Поле `Dates` используется для расчета продолжительности периода, для которого к денежному потоку применяется скидка. Помимо первой записи (начальный денежный поток и дата), порядок записей не имеет значения, и его изменение не повлияет на расчеты.

* С использованием комбинации `NoConcatenate`, резидентных загрузок и функции `Left Join` создается временная таблица `tmpNPV`, которая объединяет записи таблиц `Project` и `CashFlow` в одну плоскую таблицу. В этой таблице процентные ставки скидки будут повторяться для каждого денежного потока.

* Резидентная загрузка из таблицы `tmpNPV`, используемая при расчете поля `XNPV` для каждого проекта в таблице под именем `XNPV`.

* Одна процентная ставка скидки, связанная с каждым проектом, извлекается с помощью функции `only()` и используется при расчете `XNPV` для каждого проекта.

* Оператор `Group By`, используемый для группировки по идентификатору проекта, применяется с целью группировки всех платежей и соответствующих дат для каждого проекта.

* Для предотвращения загрузки синтетических или избыточных данных в модель данных, таблица `tmpXNPV` удаляется в конце скрипта.

Скрипт загрузки

```
Project:
Load * inline [
PrjId,Discount_Rate
1,0.1
2,0.15
];

CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2021',0
1,'07/01/2022',1000
1,'07/01/2023',1000
2,'07/01/2020',0
2,'07/01/2023',500
2,'07/01/2024',1000
2,'07/01/2022',500
];

tmpXNPV:
NoConcatenate Load *
Resident Project;
Left Join
Load * 
Resident CashFlow;

XNPV:
Load 
	PrjId,
	XNPV(Only(Discount_Rate),Values,Dates) as XNPV //Discount Rate will be 10% for Project 1 and 15% for Project 2
Resident tmpXNPV
Group By PrjId;

Drop table tmpXNPV;
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `PrjId`

* `XNPV`

Результирующая таблица

| PrjId | XNPV |
| --- | --- |
| 1 | $1735.54 |
| 2 | $278.36 |

Для идентификатора проекта 1 имеется начальный денежный поток $0 от 1 июля 2021 года. Имеются два платежа $1000 к получению в конце двух последующих лет со скидкой по 10% за период. Таким образом, фактическое значение XNPV составляет $1735.54.

Идентификатор проекта 2 содержит начальный расход $1000 (со знаком «минус») от 1 июля 2020 года. Через два года ожидается платеж $500. Через три года ожидается еще один платеж $500. В заключение 1 июля 2024 года ожидается платеж $1000. Так как действует скидка 10% за период, фактическое значение XNPV составляет $1322.21.

## Подробнее

* [Drop table](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)
* [group by](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm#group_by)
* [Join](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)
* [Max Функция скрипта](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)
* [NoConcatenate](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)
* [NPV — функция диаграммы](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)
* [Only Функция скрипта](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)
* [Resident LOAD](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm#Resident)