Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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