1 Reply Latest reply: Nov 15, 2017 6:03 AM by Christophe Brault RSS

    Calcul de mensualité

    Mélissa Moulet

      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

        • Re: Calcul de mensualité
          Christophe Brault

          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