Quelle est la meilleure façon de calculer avec des variables de table et des colonnes ?Un script JSL (TestJSL) crée deux variables de table. Dans le script, ils sont utilisés pour calculer une nouvelle colonne : D1 à partir de la colonne existante : D0 en appliquant des états IF, etc.
Y a-t-il une meilleure façon de faire cela qu'avec la formule plutôt complexe pour :D1 ?
Re : Quelle est la meilleure façon de calculer avec des variables de table et des colonnes ?Merci encore. Maintenant, cela fonctionne, en exécutant le script de mise à jour. Le charme de la formule est que la mise à jour des données se fait automatiquement. Est-ce risqué de faire cela avec la formule pour environ 100k lignes (en évitant les erreurs….) ? Si je m'en tiens à la formule, serait-il préférable de générer une colonne :DT dans laquelle la première partie est calculée If( :P1 == 0 & :P2 < :Threshold, :D0 ) À quoi ressemblerait un script au cas où sont plusieurs colonnes : D0a :D0b afin de générer les colonnes correspondantes : D1a, .D1b ?
Re : Quelle est la meilleure façon de calculer avec des variables de table et des colonnes ?Eh bien, votre formule a fonctionné, vous pouvez donc l'utiliser. Je reconnais que la formule est difficile à maintenir.
Voici une alternative, ajoutez un script à la table. J'ai ajouté le JSL (après le wait(5) ) qui montre comment changer le quantile et le seuil et exécuter le script. Ou interactivement, changez les 2 variables et cliquez sur Mettre à jour D1.
Utilisez la méthode que vous trouvez la plus facile à utiliser.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
dt << New Column("D1", Numeric, Continuous);
dt << New Script ("Update D1",
dt = current data table();
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
qq = Quantile(dt:Quantile, dt:D0[_xx] );
//caption(char(qq)); wait(2); caption(remove); //uncomment to test
dt:D1 << Set Each Value(
If(:P1 ==0 & :P2 <:Threshold & :D0< qq, :D0, empty())
);
);
wait(5);
dt << Set Table Variable( "Quantile", 0.6 );
dt << Set Table Variable( "Threshold", 1.8 );
dt << Run Script("Update D1") ;
Re : Quelle est la meilleure façon de calculer avec des variables de table et des colonnes ?Merci pour votre solution. Ça fonctionne bien. Cependant, après l'exécution du JSL et le réajustement de la variable de table "Quantile" et "Threshold", la nouvelle colonne : D1 ne répond qu'aux changements sur "Threshold" et non aux changements sur "Quantile". Cela pourrait-il être corrigé ?
@gzmorgan0 a écrit:
Il existe plusieurs façons de le faire sans avoir une formule de table et des variables de table utilisant des valeurs définies.
Étant donné que votre script a utilisé une formule, cette alternative JSL utilise une formule. Si vous pouvez vous passer d'une formule de colonne, d'autres méthodes peuvent être utilisées, y compris un script pour demander le quantile, le seuil, puis recalculer qq et recalculer D1.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
dt << New Column("D1", Numeric, Continuous,
Formula( If(:P1 ==0 & :P2 <:Threshold & :D0< :QQ, :D0) )
);
Merci pour votre solution. Ça fonctionne bien. Cependant, après l'exécution du JSL et le réajustement de la variable de table "Quantile" et "Threshold", la nouvelle colonne : D1 ne répond qu'aux changements sur "Threshold" et non aux changements sur "Quantile".
Re : Quelle est la meilleure façon de calculer avec des variables de table et des colonnes ?Il existe plusieurs façons de le faire sans avoir une formule de table et des variables de table utilisant des valeurs définies.
Étant donné que votre script a utilisé une formule, cette alternative JSL utilise une formule. Si vous pouvez vous passer d'une formule de colonne, d'autres méthodes peuvent être utilisées, y compris un script pour demander le quantile, le seuil, puis recalculer qq et recalculer D1.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
dt << New Column("D1", Numeric, Continuous,
Formula( If(:P1 ==0 & :P2 <:Threshold & :D0< :QQ, :D0) )
);