# NPV - Função de script

A função de script NPV() tem uma taxa de desconto e vários valores ordenados por período. As entradas (receitas) são positivas e as saídas (pagamentos futuros) são consideradas valores negativos para esses cálculos. Elas ocorrem no final de cada período.

O Valor presente líquido, ou NPV, é usado para calcular o valor total atual de um fluxo futuro de fluxos de caixa. Para calcular o NPV, precisamos estimar os fluxos de caixa futuros para cada período e determinar a taxa de desconto correta. A função de script NPV() tem uma taxa de desconto e vários valores ordenados por período. As entradas (receitas) são positivas e as saídas (pagamentos futuros) são consideradas valores negativos para esses cálculos. Elas ocorrem no final de cada período.

Sintaxe:

NPV(discount\_rate, value)

Tipo de dados de retorno: numérico. Por padrão, o resultado será formatado como moeda.

A fórmula para calcular o valor atual líquido é:

![Fórmula para calcular o NPV.](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-npv-formula.png)

na qual:

* `R``t`= Entradas e saídas líquidas de caixa durante um único período `t`

* `i` = Taxa de desconto ou retorno que poderia ser obtida em investimentos alternativos

* `t` = Número de períodos do cronômetro

Argumentos

| Argumento | Descrição |
| --- | --- |
| discount\_rate | discount\_rate é a taxa percentual de desconto aplicado.<br><br>Um valor de 0,1 indicaria uma taxa de desconto de 10%. |
| value | Esse campo contém valores para vários períodos ordenados por período. Supõe-se que o primeiro valor seja o fluxo de caixa no final do período 1, e assim por diante. |

Limitações:

A função `NPV()` tem as seguintes limitações:

* Os valores de texto, os valores NULL e os valores ausentes são ignorados.

* Os valores do fluxo de caixa devem estar em ordem crescente de período.

## Quando usar

`NPV()` é uma função financeira usada para verificar a rentabilidade do projeto e derivar outras medidas. Essa função é útil quando fluxos de caixa estão disponíveis como dados brutos.

## Configurações regionais

A menos que especificado de outra forma, os exemplos neste tópico usam o seguinte formato de data: MM/DD/AAAA. O formato de data é especificado na instrução `SET DateFormat` no seu script de carregamento de dados. A formatação de data padrão pode ser diferente no seu sistema devido às suas configurações regionais e outros fatores. Você pode alterar os formatos nos exemplos abaixo para atender às suas necessidades. Ou pode alterar os formatos no seu script de carregamento para corresponder a esses exemplos.

As configurações regionais padrão nos aplicativos são baseadas nas configurações regionais do sistema do computador ou servidor em que o Qlik Sense está instalado. Se o servidor Qlik Sense que você está acessando estiver definido como Suécia, o Editor de carregamento de dados usará as configurações regionais suecas para datas, horas e moedas. Essas configurações de formato regional não estão relacionadas ao idioma exibido na interface do usuário do Qlik Sense. O Qlik Sense será exibido no mesmo idioma do navegador que você está usando.

## Exemplo 1: Pagamento único (script)

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Um conjunto de dados de um projeto e seu fluxo de caixa referentes a um período, que é carregado em uma tabela denominada `CashFlow`.

* Um carregamento residente da tabela `CashFlow`, que é usado para calcular o campo NPV do projeto em uma tabela denominada `NPV`.

* Uma taxa de desconto codificada de 10%, usada no cálculo de NPV.

* Uma instrução `Group By`, que é usada para agrupar todos os pagamentos do projeto.

Script de carregamento

```
CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values
1,1,1000
];

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

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `PrjId`

* `NPV`

Tabela de resultados

| PrjId | NPV |
| --- | --- |
| 1 | $909.09 |

Para que um único pagamento de $ 1.000 seja recebido no final de um período, com uma taxa de desconto de 10% por período, o NPV é igual a $ 1.000 dividido por (1 + taxa de desconto). O NPV efetivo é igual a $ 909,09

## Exemplo 2: Vários pagamentos (script)

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Um conjunto de dados de um projeto e seu fluxo de caixa referentes a vários períodos, que é carregado em uma tabela denominada `CashFlow`.

* Um carregamento residente da tabela `CashFlow`, que é usado para calcular o campo NPV do projeto em uma tabela denominada `NPV`.

* Uma taxa de desconto codificada de 10% (0,1) é usada no cálculo de NPV.

* Uma instrução `Group By`, que é usada para agrupar todos os pagamentos do projeto.

Script de carregamento

```
CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values
1,1,1000
1,2,1000
];

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

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `PrjId`

* `NPV`

Tabela de resultados

| PrjId | NPV |
| --- | --- |
| 1 | $1735.54 |

Para pagamentos de $ 1.000 a serem recebidos no final de dois períodos, com uma taxa de desconto de 10% por período, o NPV efetivo é igual a $ 1.735,54.

## Exemplo 3: Vários pagamentos (script)

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Taxas de desconto para dois projetos, que são carregadas em uma tabela denominada `Project`.

* Fluxos de caixa para vários períodos para cada projeto por ID de projeto e ID de período. Esse ID de período pode ser usado para ordenar os registros, caso os dados não estejam ordenados.

* A combinação de `NoConcatenate`, carregamentos residentes e a função `Left Join` para criar uma tabela temporária, `tmpNPV`. A tabela combina os registros das tabelas `Project` e `CashFlow` em uma tabela simples. Essa tabela terá taxas de desconto repetidas para cada período.

* Um carregamento residente da tabela `tmpNPV`, que é usado para calcular o campo NPV de cada projeto em uma tabela denominada `NPV`.

* A taxa de desconto de valor único associada a cada projeto. Isso é recuperado usando a função `only()` e é usado no cálculo de NPV para cada projeto.

* Uma instrução `Group By`, que é usada para agrupar todos os pagamentos de cada projeto por ID de projeto.

Para evitar que dados sintéticos ou redundantes sejam carregados no modelo de dados, a tabela `tmpNPV` é descartada no final do script.

Script de carregamento

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

CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values
1,1,1000
1,2,1000
1,3,1000
2,1,500
2,2,500
2,3,1000
2,4,1000
];

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

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

Drop table tmpNPV;
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `PrjId`

* `NPV`

Tabela de resultados

| PrjId | NPV |
| --- | --- |
| 1 | $2486.85 |
| 2 | $2042.12 |

O ID de projeto 1 espera que pagamentos de $ 1.000 sejam recebidos ao final de três períodos, com uma taxa de desconto de 10% por período. Portanto, o NPV efetivo é igual a $ 2.486,85.

O ID de projeto 2 espera dois pagamentos de $ 500 e dois pagamentos adicionais de $ 1.000 em quatro períodos com uma taxa de desconto de 15%. Portanto, o NPV efetivo é igual a $ 2.042,12.

## Exemplo 4: Exemplo de lucratividade do projeto (script)

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Taxas de desconto e investimentos iniciais (período 0) para dois projetos, carregados em uma tabela denominada Project.

* Fluxos de caixa para vários períodos para cada projeto por ID de projeto e ID de período. Esse ID de período pode ser usado para ordenar os registros, caso os dados não estejam ordenados.

* A combinação de NoConcatenate, carregamentos residentes e a função Left Join para criar uma tabela temporária, tmpNPV. A tabela combina os registros das tabelas Project e CashFlow em uma tabela simples. Essa tabela terá taxas de desconto repetidas para cada período.

* A taxa de desconto de valor único associada a cada projeto, que é recuperada usando a função only() e usada no cálculo do NPV para cada projeto.

* Um carregamento residente da tabela tmpNPV é usado para calcular o campo NPV de cada projeto em uma tabela denominada NPV.

* É criado um campo adicional que divide o NPV pelo investimento inicial de cada projeto para calcular o índice de lucratividade do projeto.

* Um agrupamento por extrato, agrupado por ID de projeto, é usado para agrupar todos os pagamentos de cada projeto.

Para evitar que dados sintéticos ou redundantes sejam carregados no modelo de dados, a tabela tmpNPV é descartada no final do script.

Script de carregamento

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

CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values,
1,1,35000
1,2,35000
1,3,35000
2,1,30000
2,2,40000
2,3,50000
2,4,60000
];

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

NPV:
Load
        PrjId,
        NPV(Only(Discount_Rate),Values) as NPV, //Discount Rate will be 10% for Project 1 and 15% for Project 2
    NPV(Only(Discount_Rate),Values)/ Only(Initial_Investment) as Profitability_Index
Resident tmpNPV
Group By PrjId;

Drop table tmpNPV;
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* PrjId

* NPV

Crie a seguinte medida:

=only(Profitability\_Index)

Tabela de resultados

| PrjId | NPV | =only(Profitability\_Index) |
| --- | --- | --- |
| 1 | $87039.82 | 0.87 |
| 2 | $123513.71 | 1.24 |

O ID de projeto 1 tem um NPV efetivo de $ 87.039,82 e um investimento inicial de $ 100.000. Portanto, o índice de rentabilidade é igual a 0,87. Por ser menor que 1, o projeto não é lucrativo.

O ID de projeto 2 tem um NPV efetivo de $ 123.513,71 e um investimento inicial de $ 100.000. Portanto, o índice de rentabilidade é igual a 1,24. Por ser maior que 1, o projeto é lucrativo.

## Saiba mais

* [Drop table](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)

* [group by](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm#group_by)

* [Join](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

* [Max - Função de script](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)

* [NoConcatenate](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)

* [NPV - função de gráfico](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)

* [Only - Função de script](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)

* [Resident LOAD](https://help.qlik.com/pt-BR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm#Resident)