8 Replies Latest reply: Jan 26, 2017 12:23 PM by Sébastien Fatoux RSS

    Association de deux champs ayant des valeurs différentes et provenant de tables différentes

    LEPAGE BORIS

      Bonjour à tous,

       

      Désolé pour le titre un peu bancal, j'ai eu du mal à synthétiser ma demande sur le titre.

       

      Le contexte :

      Je suis en train de faire une application sur la promotion, hors nous faisons en interne quelques rajouts manuels qui ne sont pas correctement intégrés dans la base de données.

       

      Tables disponibles :

      - Table 1 : Détail_Commande

           - champs : Num_cde

                           Point_de_vente

                           Code_produit

                           Date_création_cde

                           Date_retrait_cde

                           Flag_promo ("0" pas de promo / "1" promo présente)

                           Type_remise (contient différentes valeurs "Remise A" / "Remise B" / "Remise C" / "Remise D")

                           ...

       

      - Table 2 :  Table Remise Manuelle

           - champs : Code_produit

                           Point_de_vente

                           Date_début_promo

                           Date_fin_promo

                           Type_remise_2 (contient deux valeurs différentes : "Remise E" / vide)

                          

      Attendus :

      J'aimerais liés les deux tables de manière à n'avoir qu'une seule dimension  "type de remise" qui intégrerais les remise "A,B,C,D et E"

      Le problème que je rencontre c'est que la remise "E" doit être valide uniquement dans les cas suivant

      - Code produit identique entre les deux tables

      - Point_de_vente identique entre les deux tables

      - Date_création_cde compris entre Date_début_promo et Date_fin_promo

       

      Merci d'avance pour votre aide

        • Re: Association de deux champs ayant des valeurs différentes et provenant de tables différentes
          Sébastien Fatoux

          Dans les condition de validité de la remise E, vous n'avez pas parlé du Flag_promo et du Type_remise.

           

          Si il y a déjà une promo avec Remise B, la remplace-t-on par Remise E ou est-ce qu'on a les 2 remises ou alors est-ce que la remise manuelle ne s'applique qu'aux cas sans promo ?

            • Re: Association de deux champs ayant des valeurs différentes et provenant de tables différentes
              LEPAGE BORIS

              Pour répondre à votre question, la remise manuelle ne s'applique qu'aux cas sans promo

                • Re: Association de deux champs ayant des valeurs différentes et provenant de tables différentes
                  Sébastien Fatoux

                  Bonjour,

                   

                  Essayer comme ceci :

                   

                   

                  SET DateFormat='DD.MM.YYYY';

                  Detail_commande:
                  LOAD * INLINE [
                  Num_cde, Point_de_vente, Code_produit, Date_création_cde, Date_retrait_cde, Flag_promo, Type_remise
                  1, AAA, aaa, 03.01.2017, 05.01.2017, 1, Remise A
                  2, AAA, aaa, 21.01.2017, 22.01.2017, 0,
                  3, BBB, aaa, 21.01.2017, 22.01.2017, 0,
                  4, AAA, bbb, 21.01.2017, 22.01.2017, 0,
                  5, AAA, aaa, 03.02.2017, 05.02.2017, 1, Remise B
                  6, AAA, aaa, 21.02.2017, 22.02.2017, 0
                  ]
                  ;

                  Remise_Manuelle:
                  LOAD * INLINE [
                  Point_de_vente, Code_produit, Date_début_promo, Date_fin_promo, Type_remise_2, tmp
                  AAA, aaa, 01.01.2017, 31.01.2017, Remise E, xxx
                  ]
                  ;

                  RENAME Field Type_remise to Type_remise_1;

                  inner join(Remise_Manuelle)
                  IntervalMatch (Date_création_cde, Point_de_vente, Code_produit)
                  LOAD Date_début_promo, Date_fin_promo, Point_de_vente, Code_produit
                  Resident Remise_Manuelle;

                  Left join(Detail_commande)
                  LOAD
                  Date_création_cde, // Join key
                  Point_de_vente, // Join key
                  Code_produit, // Join key
                  Type_remise_2
                  Resident Remise_Manuelle;

                  DROP Table Remise_Manuelle;

                  Left join(Detail_commande)
                  LOAD
                  Num_cde,
                  if(Flag_promo=0, Type_remise_2, Type_remise_1) as Type_remise
                  Resident Detail_commande;

                  DROP Fields Type_remise_1, Type_remise_2;

                    • Re: Association de deux champs ayant des valeurs différentes et provenant de tables différentes
                      LEPAGE BORIS

                      Merci beaucoup pour votre aide, je n'ai pas eu le temps / courage d'essayer votre solution hier soir,

                      Je viens de finir d'ajouter votre script, je fais quelques test avant de marquer votre réponse comme correcte, mais à première vu cela semble correcte.

                      • Re: Association de deux champs ayant des valeurs différentes et provenant de tables différentes
                        LEPAGE BORIS

                        Bonjour,

                         

                        Je rencontre un nouveau problème sur le script,

                        Sur un faible volume de donnée (comme dans votre exemple) cela fonctionne parfaitement,

                         

                        Lorsque le volume de donnée devient plus important la table "Detail_commande" augmente énormément de volume

                         

                        Sur l'exemple ci-dessous nous avons 18 commandes, hors après l'exécution du script, la table contient 658 lignes.

                         

                        Merci d'avance pour votre aide

                         

                        SET DateFormat='DD.MM.YYYY';

                        Detail_commande:
                        LOAD * INLINE [
                        Num_cde, Point_de_vente, Code_produit, Date_création_cde, Date_retrait_cde, Flag_promo, Type_remise
                        1, AAA, aaa, 03.01.2017, 05.01.2017, 1, Remise A
                        2, AAA, aaa, 21.01.2017, 22.01.2017, 0,
                        3, BBB, aaa, 21.01.2017, 22.01.2017, 0,
                        4, AAA, bbb, 21.01.2017, 22.01.2017, 0,
                        5, AAA, aaa, 03.02.2017, 05.02.2017, 1, Remise B
                        6, AAA, aaa, 21.02.2017, 22.02.2017, 0

                        7, AAA, aaa, 03.01.2017, 05.01.2017, 1, Remise A

                        8, CCC, aaa, 21.01.2017, 22.01.2017, 0,

                        9, BBB, aaa, 21.01.2017, 22.01.2017, 0,

                        10, AAA, bbb, 21.01.2017, 22.01.2017, 0,

                        11, AAA, aaa, 03.02.2017, 05.02.2017, 1, Remise B

                        12, AAA, aaa, 21.02.2017, 22.02.2017, 0,

                        13, AAA, aaa, 03.01.2017, 05.01.2017, 1, Remise A

                        14, AAA, aaa, 21.01.2017, 22.01.2017, 0,

                        15, BBB, aaa, 21.01.2017, 22.01.2017, 0,

                        16, AAA, bbb, 21.01.2017, 22.01.2017, 0,

                        17, AAA, aaa, 03.02.2017, 05.02.2017, 1, Remise B

                        18, AAA, aaa, 21.02.2017, 22.02.2017, 0

                        ];

                        Remise_Manuelle:
                        LOAD * INLINE [

                        Point_de_vente, Code_produit, Date_début_promo, Date_fin_promo, Type_remise_2, tmp

                        AAA, aaa, 01.01.2017, 31.01.2017, Remise E, xxx

                        BBB, bbb, 21.01.2017, 22.01.2017, Remise E, xxx

                        AAA, aaa, 01.01.2017, 31.01.2017, Remise E, xxx

                        AAA, bbb, 21.01.2017, 22.01.2017, Remise E, xxx

                        AAA, aaa, 01.01.2017, 31.01.2017, Remise E, xxx

                        AAA, bbb, 21.01.2017, 22.01.2017, Remise E, xxx

                        BBB, aaa, 01.01.2017, 31.01.2017, Remise E, xxx

                        AAA, bbb, 21.01.2017, 22.01.2017, Remise E, xxx

                        ];



                        RENAME Field Type_remise to Type_remise_1;

                        inner join(Remise_Manuelle)
                        IntervalMatch (Date_création_cde, Point_de_vente, Code_produit)
                        LOAD Date_début_promo, Date_fin_promo, Point_de_vente, Code_produit
                        Resident Remise_Manuelle;

                        Left join(Detail_commande)
                        LOAD
                        Date_création_cde, // Join key
                        Point_de_vente, // Join key
                        Code_produit, // Join key
                        Type_remise_2
                        Resident Remise_Manuelle;

                        DROP Table Remise_Manuelle;

                        Left join(Detail_commande)
                        LOAD
                        Num_cde,
                        if(Flag_promo=0, Type_remise_2, Type_remise_1) as Type_remise
                        Resident Detail_commande;

                        DROP Fields Type_remise_1, Type_remise_2;