5 Replies Latest reply: Apr 1, 2014 9:12 AM by Benjamin DEMOUSTIER RSS

    Ecrétage

    Benjamin DEMOUSTIER

      Bonjour,

       

      est-il possible, via le script, de ne charger que la partie représentative d'une table, à savoir toutes les valeurs ne dépassant pas +/- x% de la moyenne.

      autrement dit, comment éliminer les valeurs extrêmes d'une table lors de son chargement ?

       

      merci d'avance

       

      Cdlt

        • Re: Ecrétage

          Bonjour,

           

          Pourquoi ne pas calculer directement cette moyenne dans le script et ensuite lors du chargement LOAD faire un filtre dans une clause Where ?

           

          Cdt,

          Benjamin Drouin

          Consultant BI

          http://www.competencebi.com/

          • Re: Ecrétage

            Voici un exemple :

            1) On commence par charger une table de données non écrétée (table VALEUR_BRUTE)

            2) On calcule la moyenne (table VALEUR_MOYENNE)

            3) On récupère uniquement les valeurs ne dépassant pas un certain écart (ici 20%) avec la moyenne (VALEUR_ECRETEE)

             

            VALEUR_BRUTE:

            LOAD * INLINE [
                Code, Valeur
                1, 10
                2, 12
                3, 15
                4, 15
                5, 17
                6, 8
                7, 9
                8, 14
                9, 13
                10, 9
            ]
            ;

            VALEUR_MOYENNE:
            LOAD
             
            Avg(Valeur) as Moyenne
            RESIDENT VALEUR_BRUTE;

            LET MOY = Num(peek('Moyenne', 0, 'VALEUR_MOYENNE'));

             

            DROP TABLE VALEUR_MOYENNE;

            VALEUR_ECRETEE:
            LOAD
             
            Code,
             
            Valeur,
              '$(MOY)'
            as Moyenne,
             
            fabs(Valeur-Num('$(MOY)', '0.00'))/Num('$(MOY)', '0.00')*100 as Ecart 
            RESIDENT VALEUR_BRUTE
            WHERE fabs(Valeur-Num('$(MOY)', '0.00'))/Num('$(MOY)', '0.00')*100 < 20;

            DROP TABLE VALEUR_BRUTE;

             

              • Re: Ecrétage
                Benjamin DEMOUSTIER

                Bonsoir,

                 

                Effectivement, cela doit marcher, bien vu ! J'essai dés que possible.

                 

                Je pensais pourtant qu'il y avait une fonction tte prête à mettre comme condition dans le script sans avoir a passer par des tables temporaire.

                 

                Mais seul le résultat compte

                 

                A +

              • Re: Ecrétage
                Benjamin DEMOUSTIER

                Bonjour à tous et merci de vos réponse,

                 

                En fait, je cherchais sous Qlik l'équivalent de la fonction 'moyenne.reduite' d'excel.

                je ne l'ai pas (encore) trouvé mais je m'en sors en jouant effectivement avec les table temporaire et l'utilisation du 'group by' (exemple ci-dessous).

                 

                Ca marche, ce qui est l'essentiel, mais je ne trouve pas ça trés "élégant"

                 

                exmple:

                quote

                data_tmp:

                LOAD serie,
                serie1,
                valeur
                FROM
                C:\Users\ho.bdemoustier\Desktop\ZZZZ.xlsx
                (
                ooxml, embedded labels, table is Feuil1);
                Join
                LOAD
                serie,
                avg(valeur) as moyenne
                Resident data_tmp group by (serie);
                NoConcatenate
                data:
                load *
                Resident data_tmp where valeur<=(moyenne*1.2);
                drop Table data_tmp

                unquote