Utilisation de variables dans la commande SendToReport(Dispatch(...))<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour à tous,
J'écris un script JMP qui crée une fenêtre avec des cases à cocher et des menus déroulants. Ces menus sont utilisés pour sélectionner des conditions qui peuvent ensuite être utilisées pour exécuter des rapports et générer des graphiques. L'un des graphiques que je crée comporte un nombre différent de lignes en fonction du nombre de cases à cocher sélectionnées. J'ai réussi à générer le graphique avec toutes les lignes, quelles que soient les cases cochées. Le problème que j'ai vient de la légende. Le premier ensemble de données apparaît toujours avec des points apparaissant dans la légende ainsi que dans la ligne. Tous les autres ensembles de données sur ce graphique ont leur ligne en ligne représentée sur la légende. Pour résoudre ce problème, je double-clique normalement sur la légende, décoche manuellement les points de la légende que je ne souhaite pas afficher, puis copie le script pour que cela se produise automatiquement. Lorsqu'il y a 4 ensembles de données sur le graphique, le script ressemblera à ceci après avoir apporté mes modifications à la légende :
EnvoyerToReport(
Expédition(
{},
"400",
LegendBox,
{Position( {-1, -3, -3, -3, 0, 1, 2, 3} )}
)
... //(autres commandes Dispatch())
)
J'ai d'autres commandes qui vont au graphique, telles que les changements de nom d'étiquette d'axe, donc cela apparaît parmi les autres commandes Dispatch() dans la commande SendToReport(). Le problème que j'ai est que je n'arrive pas à modifier la liste à l'intérieur de la commande Postion() en fonction du nombre de cases à cocher sélectionnées. Je peux coder en dur la liste correcte, mais le code ne fonctionne que pour ce nombre de cases à cocher sélectionnées. Par exemple, si je définis la liste sur {-1, -3, -3, 0, 1, 2}, le code ne fonctionne correctement que lorsque 3 cases sont cochées. J'ai créé une variable qui passe à la liste correcte en fonction du nombre de cases à cocher sélectionnées (et j'ai vérifié qu'elle est correctement affectée) mais lorsque je mets la variable dans la fonction Position(), le code n'effectue pas le changement que je souhaite. à. Le code ci-dessous attribue la liste correcte à la variable PL en fonction du nombre de cases à cocher cliquées (les variables à l'intérieur de la fonction SUM() représentent les sorties des cases à cocher).
PL = Si(
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 1, {-1, 0 },
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 2, {-1, -3, 0, 1},
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 3, {-1, -3, -3, 0, 1, 2},
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 4, {-1, -3, -3, -3, 0, 1, 2, 3},
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 5, {-1, -3, -3, -3, -3, 0, 1, 2, 3, 4},
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 6, {-1, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4 , 5},
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 7, {-1, -3, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4, 5, 6},
Somme(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 8, {-1, -3, -3, -3, -3, -3, -3, -3, 0, 1 , 2, 3, 4, 5, 6, 7},
);
J'ai vérifié que ce code attribue la bonne liste à la variable. Lorsque je branche la variable comme suit, cela ne supprime pas l'étiquette de points de la zone de légende comme je le souhaiterais, et lorsque je copie le script du graphique que j'ai généré, la commande Dispatch() dans la zone de légende est manquante .
Expédition(
{},
"400",
LegendBox,
{Position( PL )}
)
J'ai déjà utilisé des variables de la même manière, mais je fais toujours référence à un numéro dans la liste plutôt que d'essayer d'insérer une liste entière (par exemple PL[1]). J'ai essayé de nombreuses variantes mais aucune n'a fonctionné jusqu'à présent (PL[], {PL}, {PL[]}).
S'il vous plaît, aidez-moi à comprendre ce que je fais de mal. Veuillez me faire savoir si quelque chose n'est pas clair et je pourrai fournir plus de détails nécessaires pour aider à répondre à la question. Il s’agit d’un problème très mineur dans l’ensemble des choses, mais il me rend fou et j’ai du mal à le surmonter sans trouver de solution. Aide!
Re : Utilisation de variables dans la commande SendToReport(Dispatch(...))De rien !
Re : Utilisation de variables dans la commande SendToReport(Dispatch(...))Merci pour votre réponse Ian. J'ai compris ce qui se passait jusqu'à l'apparition de msTBD. Je suppose que c'est la variable qui changera en fonction des cases à cocher sélectionnées, mais je ne vois pas où le nombre de cases à cocher entre en jeu.
Re : Utilisation de variables dans la commande SendToReport(Dispatch(...))Bonjour Philippe,
Cette solution a fonctionné pour moi ! Merci beaucoup pour votre aide!!
Re : Utilisation de variables dans la commande SendToReport(Dispatch(...)) jbakri21
En plus de la suggestion de Ian. Voici une autre approche.
Tout d’abord, si vous avez une instruction IF comme vous le faites, j’utiliserais plutôt Choose(). Les arguments des conditions sont une séquence d'entiers commençant à 1, donc les clauses d'égalité ( expr==1, expr==2, expr==3) sont intégrées. (Voir la référence de syntaxe JSL pour en savoir plus).
Cela dit, voici votre nouvelle instruction conditionnelle :
PL = Choisir ( Somme (IW27, II09, II44, II08, II42, IW29, CC23, IW24),
{- 1 , 0 }, // 1
{- 1 , - 3 , 0 , 1 }, // 2
{- 1 , - 3 , - 3 , 0 , 1 , 2 }, // 3
{- 1 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 }, // 4
{- 1 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 }, // 5
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 }, // 6
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 }, // 7
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, // 8
) ;
Afin d'utiliser PL dans une autre instruction JSL, comme vous essayez de le faire avec Dispatch(), la variable paramètre doit être encapsulée dans Expr(). Donc,
Expédition(
{},
"400",
LegendBox,
{Position( Expr ( PL) )}
)
Cela vous permet d'évaluer (ou d'élargir) le contenu de PL, avant le tout est évalué. Pour que cela fonctionne, vous devez ensuite envelopper l'intégralité de la fonction graphique avec Eval( Eval Expr()). Un exemple complet apparaît ci-dessous :
dt = Ouvrir ( "$SAMPLE_DATA/Tourisme australien.JMP" );
PL = { 0 , - 1 , 1 , - 1 , 2 , - 1 } ;
//PL = {-1, 0, -1, 1, -1, 2} ;
Évaluer (
Expr d'évaluation (
dt << Générateur de graphiques (
Afficher le panneau de configuration ( 0 ),
Variables(
X( :Date),
Y( : Nom ( « Revenu (en milliers de dollars) » ) ),
Y( : Nom ( "Taux d'occupation des lits (%)" ) ),
Y( : Nom ( "Durée moyenne de séjour (jours)" ) )
),
Éléments(Position( 1 , 1 ), Points( X, Y, Légende( 4 ) ), Plus fluide ( X, Y, Légende ( 3 ) ) ),
Éléments(Position( 1 , 2 ), Points( X, Y, Légende( 1 ) ), Plus fluide ( X, Y, Légende ( 2 ) ) ),
Éléments(Position( 1 , 3 ), Points( X, Y, Légende( 6 ) ), Plus fluide ( X, Y, Légende ( 5 ) ) ),
EnvoyerToReport(
Expédition( {}, "titre du graphique" , TextEditBox, {Définir le texte ( "Tendances du tourisme" )} ),
Expédition( {}, "400" , LegendBox, {Position( Expr ( PL ) )} )
)
)
)
);
J'espère que cela t'aides!
Re : Utilisation de variables dans la commande SendToReport(Dispatch(...))(En adaptant un exemple plus simple du Scripting Index), vous devrez probablement utiliser ce type d'approche (ou peut-être une légère variante) :
Noms par défaut ici ( 1 ) ;
//Ce message s'applique à tous les objets de boîte d'affichage
Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
bivouac = bivarié ( oui ( : poids ) , X ( : hauteur ) ) ;
rbiv = bivouac << rapport ;
MS = 5 ;
ajouter des marqueurs = Expr ( rbiv << Expédition ( {} , "Complot Bivar" , Boîte de cadre , { Taille du marqueur ( msà déterminer )} ) ) ;
RemplacerDans ( ajouter des marqueurs , Expr ( msà déterminer ) , MS ) ;
ajouter des marqueurs ;