Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
melissatw
Contributor II
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

Labels (1)
1 Reply
christophebrault
Specialist
Specialist

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

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin