0 Replies Latest reply: Mar 16, 2015 11:34 AM by Willy GARNIER RSS

    Utilisation des set analysis

    Willy GARNIER

      Bonjour,

       

      j'ai une table que je charge avec ce srcipt:

      devises:

      LOAD

        CUDIVI as %DIVI,

        CUCUCD as Code_devise,

        date#(CUCUTD,'YYYYMMDD') as DateValidité_Devise,

        CUARAT as Taux_devise

      FROM CCURRA.QVD (qvd)

      WHERE

        CUCRTP=4

      ;

       

      Il y en gros ces données là dedans:

       

      Select '1Z0', 'USD', '2015-01-01 00:00:00.000', 1.30

      UNION ALL Select '1Z0', 'USD', '2015-02-01 00:00:00.000', 1.20

      UNION ALL Select '1Z0', 'USD', '2015-03-01 00:00:00.000', 1.10

      UNION ALL Select '1Z0', 'USD', '2015-04-01 00:00:00.000', 1.00

      UNION ALL Select '1Z0', 'GBP', '2015-01-01 00:00:00.000', 0.9

      UNION ALL Select '1Z0', 'GBP', '2015-03-01 00:00:00.000', 0.95

      UNION ALL Select 'AAA', 'USD', '2015-01-01 00:00:00.000', 1.00

      Donc:

      - un identifiant %DIVI

      - un code devise Code_devise

      - une date de début DateValidité_Devise

      - un taux Taux_devise

       

      Je cherche à obtenir pour une date donnée le taux à appliquer pour un identifiant et un code devise .

       

      Pour une date donnée "DATE_REF" j'arrive à trouver la date du taux à appliquer via cette expression:

       

      MAX (total<%DIVI,[Code devise]>

        if(

         DateValidité_Devise<DATE_REF,DateValidité_Devise

        )

      )

       

      J'aimerais donc filtrer uniquement les lignes les lignes ayant DateValidité_Devise = à ce MAX.

       

      J'ai tenté les expressions suivantes:

           Pour la date de validité

      =if(

      isnull(only(total<%DIVI,[Code devise]> if(DateValidité_Devise=DATE_REF,true()))),

      MAX (total<%DIVI,[Code devise]>

        if(

         DateValidité_Devise<DATE_REF,DateValidité_Devise

        )

      )  

      )

       

           Pour le taux

      =if(

      isnull(only(total<%DIVI,[Code devise]> if(DateValidité_Devise=DATE_REF,true()))),

      ONLY(AGGR(

        IF(DateValidité_Devise=

         MAX (total<%DIVI,[Code devise]>

          if(

           DateValidité_Devise<DATE_REF,DateValidité_Devise

          )

         )

        ,[Taux devise]

        )

      ,DateValidité_Devise,%DIVI,[Code devise])

      )

      )

      Ca fonctionne sauf quand la date DATE_REF est égale à la date de début d'une période.

      Je n'ai rien qui apparaît dans les 2 expressions à ce moment là

       

      Merci,

      Willy