Qlik Community

Groupe des Utilisateurs Francophones

Vous êtes francophone? Ce groupe est pour vous. Venez découvrir comment démarrer avec Qlik Sense et QlikView, poser vos questions et partager vos tutos et astuces avec les membres de notre communauté.

melissatw
New Contributor II

Calcul de mensualité

Bonjour,

Voici un exemple de ma table de paiement T_PAIEMENT extraite directement de plusieurs fichiers Excel mensuels concaténés :

CodeClientDateFichierDatePaiementMontantPaiement
BDI20150420155000
BDI20150520156000
BDI20150620158000

Ici le champ MontantPaiement contient les montants cumulés des paiements pour l'année 2015.

A partir de cette table je voudrais calculer les mensualités pour chaque client à une date donnée, c'est à dire que pour ce client je voudrais avoir la table suivante :

CodeClientDateFichierDatePaiementMontantPaiementMensualité
BDI201504201550005000 (=montant du premier paiement)
BDI201505201560001000(=6000-5000 : montant de la mensualité de Mai 2015)
BDI201506201580002000(=8000-6000 : montant de la mensualité de juin 2015)

Pour faire ce calcul la seule idée qui me vient c'est de faire un auto-jointure dans le script en faisant un test sur la DateFichier mais au niveau performance ce n'est vraiment pas le top....

Est-ce que quelqu'un aurait une autre idée svp ou au moins de quoi optimiser mon code?

Voici mon bout de code :

I_PAIEMENT:

LOAD

     CodeClient

     DateFichier as DateFichierM1

     MontantPaiement as MontantPaiementM1

Resident T_PAIEMENT;

left join LOAD *

Resident T_PAIEMENT;

Drop Table T_PAIEMENT;

J_PAIEMENT:

LOAD

     CodeClient

     DateFichier

     DatePaiement

     MontantPaiement

     if(not isnull(MontantPaiementM1),MontantPaiement - MontantPaiementM1,MontantPaiement) as Mensualite

Resident I_PAIEMENT

Where DateFichier = addMonth(DatFichierM1,1);

Merci beaucoup

1 Reply
Highlighted
christophebrault
Valued Contributor

Re: Calcul de mensualité

Bonjour,

Pour réaliser ceci, tu peux utiliser la fonction peek()

et donc quelque chose comme :

LOAD

     CodeClient,

     DateFichier as DateFichierM1,

     If(peek(CodeClient)=CodeClient, // test si le client est le même que la ligne précédente

          MontantPaiement-peek(MontantPaiement),// si oui, fais la différence

          MontantPaiement) as  MontantPaiementM1 // si non, garde le montant du premier paiement

Resident T_PAIEMENT

order by CodeClient,DateFichier; // la table est triée pour que les clients soient les uns après les autres