# NPV - Fonction de script

La fonction de script NPV() prend une taux de remise et plusieurs valeurs triées par période. Les entrées (revenus) sont positives et les sorties (paiements futurs) sont supposées être des valeurs négatives pour ces calculs. Ils se produisent à la fin de chaque période.

La valeur Net Present Value, or NPV, est utilisée pour calculer la valeur totale actuelle de flux de trésorerie futurs. Pour calculer la valeur NPV, nous devons estimer les flux de trésorerie futurs pour chaque période et déterminer le taux de remise correct. La fonction de script NPV() prend une taux de remise et plusieurs valeurs triées par période. Les entrées (revenus) sont positives et les sorties (paiements futurs) sont supposées être des valeurs négatives pour ces calculs. Ils se produisent à la fin de chaque période.

NPV(discount\_rate, value)

numérique Par défaut, le résultat sera formaté sous forme de devise.

La formule permettant de calculer la valeur NPV est la suivante :

![Formule de calcul de la valeur NPV.](https://help.qlik.com/fr-FR/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-npv-formula.png)

où :

* `R``t`= entrées/sorties de flux de trésorerie nettes au cours d'une seule période `t`

* `i` = taux de remise ou retour susceptible d'être obtenu dans des investissements alternatifs

* `t` = nombre de périodes

Arguments

| Argument | Description |
| --- | --- |
| discount\_rate | discount\_rate est le taux de pourcentage de remise appliqué.<br><br>Une valeur égale à 0.1 indique un taux de remise de 10 %. |
| value | Ce champ contient les valeurs de plusieurs périodes triées par période. La première valeur est supposée être le flux de trésorerie à la fin de la période 1, etc. |

La fonction `NPV()` présente les restrictions suivantes :

* Les valeurs textuelles, les valeurs NULL et les valeurs manquantes sont ignorées.

* Les valeurs de flux de trésorerie doivent être triées dans l'ordre de période croissant.

## Cas d'utilisation

`NPV()` est une fonction financière utilisée pour vérifier la rentabilité des projets et dériver d'autres mesures. Cette fonction est utile en cas de disponibilité de flux de trésorerie sous forme de données brutes.

## Paramètres régionaux

Sauf indication contraire, les exemples de cette rubrique utilisent le format de date suivant : MM/JJ/AAAA. Le format de date est indiqué dans l'instruction `SET DateFormat` de votre script de chargement de données. Le format de date par défaut peut être différent dans votre système en raison de vos paramètres régionaux et d'autres facteurs. Vous pouvez modifier les formats utilisés dans les exemples ci-dessous en fonction de vos besoins. Ou vous pouvez modifier les formats utilisés dans votre script de chargement pour qu'ils correspondent à ceux de ces exemples.

Les paramètres régionaux par défaut des applications sont basés sur les paramètres système régionaux de l'ordinateur ou du serveur sur lequel Qlik Sense est installé. Si le serveur Qlik Sense auquel vous accédez est configuré sur la Suède, l'éditeur de chargement de données utilisera les paramètres régionaux suédois pour les dates, l'heure et la devise. Ces paramètres de format régionaux ne sont pas liés à la langue affichée dans l'interface utilisateur Qlik Sense. Qlik Sense sera affiché dans la même langue que celle du navigateur que vous utilisez.

## Exemple 1 – un seul paiement (script)

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

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Jeu de données d'un projet et de son flux de trésorerie pour une période, chargé dans une table appelée `CashFlow`.

* Instruction resident load de la table `CashFlow`, utilisée pour calculer le champ NPV du projet dans une table appelée `NPV`.

* Taux de remise codé en dur de 10 %, utilisé dans le calcul NPV.

* Instruction `Group By`, utilisée pour regrouper l'ensemble des paiements du projet.

Script de chargement

```
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;
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `PrjId`

* `NPV`

Tableau de résultats

| PrjId | VPN |
| --- | --- |
| 1 | $909.09 |

Pour un seul paiement de 1 000 $ à recevoir à la fin d'une période, à un taux de remise de 10 % par période, la valeur NPV est égale à 1 000 $ divisé par (1 + taux de remise). La valeur NPV effective est égale à 909,09 $.

## Exemple 2 – plusieurs paiements (script)

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

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Jeu de données d'un projet et de son flux de trésorerie pour plusieurs périodes, chargé dans une table appelée `CashFlow`.

* Chargement résident de la table `CashFlow`, utilisé pour calculer le champ NPV du projet dans une table appelée `NPV`.

* Un taux de remise codé en dur de 10 % (0,1) est utilisé dans le calcul NPV.

* Instruction `Group By`, utilisée pour regrouper l'ensemble des paiements du projet.

Script de chargement

```
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;
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `PrjId`

* `NPV`

Tableau de résultats

| PrjId | VPN |
| --- | --- |
| 1 | $1735.54 |

Pour des paiements de 1 000 $ à recevoir à la fin de deux périodes, à un taux de remise de 10 % par période, la valeur NPV effective est égale à 1 735,54 $.

## Exemple 3 – plusieurs paiements (script)

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

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Taux de remise pour deux projets, chargés dans une table appelée `Project`.

* Flux de trésorerie pour plusieurs périodes pour chaque projet par ID de projet et ID de période. Cet ID de période peut être utilisé pour trier les enregistrements si les données ne sont pas triées.

* Combinaison de `NoConcatenate`, de chargements résidents et de la fonction `Left Join` pour créer une table temporaire, `tmpNPV`. La table combine les enregistrements des tables `Project` et `CashFlow` en une seule table uniforme. Les taux de remise de cette table sont répétés pour chaque période.

* Instruction resident load de la table `tmpNPV`, utilisée pour calculer le champ NPV de chaque projet dans une table appelée `NPV`.

* Taux de remise de valeur unique associé à chaque projet. Cette valeur est récupérée via la fonction `only()` et utilisée dans le calcul NPV pour chaque projet.

* Instruction `Group By`, utilisée pour regrouper l'ensemble des paiements pour chaque projet par ID de projet.

Pour éviter le chargement de toute donnée synthétique ou redondante dans le modèle de données, la table `tmpNPV` est abandonnée à la fin du script.

Script de chargement

```
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;
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `PrjId`

* `NPV`

Tableau de résultats

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

L'ID de projet 1 prévoit la réception de paiements de 1 000 $ à la fin de trois périodes, à un taux de remise de 10 % par période. Par conséquent, la valeur NPV effective est égale à 2 486,85 $.

L'ID de projet 2 prévoit deux paiements de 500 $ et deux autres paiements de 1 000 $ sur quatre périodes à un taux de remise de 15 %. Par conséquent, la valeur NPV effective est égale à 2 042,12 $.

## Exemple 4 – Exemple rentabilité de projet (script)

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

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Taux de remise et investissements initiaux (période 0) pour deux projets, chargés dans une table appelée Project.

* Flux de trésorerie pour plusieurs périodes pour chaque projet par ID de projet et ID de période. Cet ID de période peut être utilisé pour trier les enregistrements si les données ne sont pas triées.

* Combinaison de NoConcatenate, de chargements résidents et de la fonction Left Join pour créer une table temporaire, tmpNPV. La table combine les enregistrements des tables Project et CashFlow en une seule table uniforme. Les taux de remise de cette table sont répétés pour chaque période.

* Taux de remise de valeur unique associé à chaque projet, récupéré via la fonction only() et utilisé dans le calcul NPV pour chaque projet.

* Une instruction resident load de la table tmpNPV est utilisée pour calculer le champ NPV de chaque projet dans une table appelée NPV.

* Un champ supplémentaire, qui divise la valeur NPV par l'investissement initial de chaque projet, est créé pour calculer l'indice de rentabilité du projet.

* Une instruction group by, effectuant un regroupement par ID de projet, est utilisée pour regrouper tous les paiements pour chaque projet.

Pour éviter le chargement de toute donnée synthétique ou redondante dans le modèle de données, la table tmpNPV est abandonnée à la fin du script.

Script de chargement

```
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;
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* PrjId

* NPV

Créez la mesure suivante :

=only(Profitability\_Index)

Tableau de résultats

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

L'ID de projet 1 a une valeur NPV effective de 87 039,82 $ et un investissement initial de 100 000 $. Par conséquent, l'index de rentabilité est égal à 0,87. Étant donné qu'il est inférieur à 1, le projet n'est pas rentable.

L'ID de projet 2 a une valeur NPV effective de 123 513,71 $ et un investissement initial de 100 000 $. Par conséquent, l'index de rentabilité est égal à 1,24. Étant donné qu'il est supérieur à 1, le projet est rentable.

## En savoir plus

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

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

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

* [Max - Fonction de script](https://help.qlik.com/fr-FR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)

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

* [NPV - fonction de graphique](https://help.qlik.com/fr-FR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)

* [Only - Fonction de script](https://help.qlik.com/fr-FR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)

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