Je ne suis pas sûr de comprendre exactement ce que vous aimeriez voir, mais voici la JSL générée à partir d'une requête comme celle que je viens de montrer.
Notez la partie Where (). C'est pur JSL. Il n'y a pas de variables que vous pourriez coller dans votre SQL personnalisé.
Il semble que vos choix d’effort soient:
- Écrire la JSL pour créer les invites et déterminer comment insérer les réponses dans votre code SQL; ou,
- Convertir la requête en Générateur de requêtes et le laisser vous y inviter.
Je ne sais pas ce qui demande plus d'effort pour vous, mais la conversion en générateur de requêtes semble plus flexible et vous donnera plus d'options à long terme.
New SQL Query(
Version( 130 ),
Connection(
connection_string
),
QueryName( "inventory" ),
Select(
Column( "warehouseid", "t1" ),
Column( "sku", "t1" ),
Column( "sku_description", "t1" ),
Column( "quantityonhand", "t1" ),
Column( "quantityonorder", "t1" )
),
From(
Table( "inventory", Schema( "Sporting Goods By Stan" ), Alias( "t1" ) ),
Table(
"warehouse",
Schema( "Sporting Goods By Stan" ),
Alias( "t9" ),
Join(
Type( Left Outer ),
EQ( Column( "warehouseid", "t9" ), Column( "warehouseid", "t1" ) )
)
),
Table(
"order_item",
Schema( "Sporting Goods By Stan" ),
Alias( "t6" ),
Join(
Type( Left Outer ),
EQ( Column( "sku", "t6" ), Column( "sku", "t1" ) )
)
),
Table(
"sku_data",
Schema( "Sporting Goods By Stan" ),
Alias( "t8" ),
Join(
Type( Left Outer ),
EQ( Column( "sku", "t8" ), Column( "sku", "t1" ) )
)
),
Table(
"retail_order",
Schema( "Sporting Goods By Stan" ),
Alias( "t7" ),
Join(
Type( Left Outer ),
EQ( Column( "ordernumber", "t7" ), Column( "ordernumber", "t6" ) )
)
)
),
Where(
In List(
Column( "department", "t8" ),
{"Water Sports"},
UI(
SelectListFilter(
ListBox,
Base(
"Categorical",
Prompt(
"Select a department:",
Character,
PromptName( "t8.department_1" ),
ValueSource(
Column(
"department",
Alias( "department" ),
Table(
"sku_data",
Schema( "Sporting Goods By Stan" )
)
)
)
)
)
)
)
)
)
) << Run;
Oui. Lorsque je crée les requêtes directement dans JMP, je peux obtenir les invites. Mon problème est que lorsque je prends une requête existante et que je la mets dans une requête SQL personnalisée, mes invites ne sont pas disponibles. Pour une requête simple, le générateur de requêtes dans JMP fonctionne, mais j'ai des jointures assez longues et compliquées que je ne souhaite pas reconstruire.
Si vous utilisez le Générateur de requêtes, il générera automatiquement les invites à l'aide de l'option "Invite à l'exécution" dans la zone des filtres.

Lorsque vous exécutez la requête, l'utilisateur sera invité. Aucune raison de le construire vous-même.

salut @Joeystringer ,
Voici un exemple de quelque chose que vous pouvez exécuter avant de lancer la requête:
dlg = New Window("Parameter Specification", << Modal,
V List Box(
Text Box("Please specify the value of lineID."),
H List Box(
Text Box("LineID: "),
neb = Number Edit Box();
),
Button Box("OK", LineID = neb << Get);
)
);
Show(LineID);Cette fenêtre demande simplement à l'utilisateur d'entrer un nombre dans la zone d'édition des numéros. Le bouton "OK" obtient la valeur dans la zone et l'enregistre sous "ID ligne" que vous pouvez utiliser dans votre requête. L'option "<< Modal" rend la fenêtre modale, ce qui signifie que JMP n'exécutera pas le reste du script situé après la fenêtre tant que l'utilisateur n'aura pas appuyé sur "OK".
Je vous recommande vivement de consulter le Guide de script (Aide> Livres> Guide de script) pour apprendre à créer un script pour les dialogues si vous souhaitez effectuer des tâches plus complexes.
J'utilise beaucoup de SSR et suis habitué à avoir des paramètres comme @Sitename ou @Date. J'ai plusieurs requêtes que j'utilise sur d'autres plates-formes, mais j'aime bien pouvoir les mettre dans JMP. Le problème que je rencontre est que je ne sais pas comment utiliser la boîte de dialogue pour mes paramètres lorsque je fais le SQL personnalisé. Par exemple, comment pourrais-je écrire ceci pour qu'une boîte apparaisse demandant "Lineid"? ils seraient en mesure de répondre et la requête serait exécutée.
SELECT *
DE tblline
où tblline.lineid=@LineID;