Limiter les choix et n'autoriser qu'une seule sélection dans le filtre de requête de base de donnéesJe veux un filtre de requête qui n'affichera qu'une partie des entrées de la base de données. Je voudrais également limiter les utilisateurs à un seul choix. Voici un exemple de code que j'ai utilisé dans un post précédent.
New SQL Query(
Version( 130 ), Connection( "JMP" ),
JMP Tables(
["SAT" => "$SAMPLE_DATA\SAT.jmp",<BR /> "SATByYear" => "$SAMPLE_DATA\SATByYear.jmp"]
),
QueryName( "SATQuery" ),
Select( Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table( "SAT", Alias( "t2" ),
Join( Type( Left Outer ),
EQ( Column( "State", "t1" ), Column( "State", "t2" ) ) &
EQ( Column( "% Taking (2004)", "t1" ),
Column( "% Taking (2004)", "t2" ) )
& EQ( Column( "X", "t1" ), Column( "X", "t2" ) )
& EQ( Column( "Y", "t1" ), Column( "Y", "t2" ) )
& EQ( Column( "Population", "t1" ), Column( "Population", "t2" ) )
& EQ( Column( "Latitude", "t1" ), Column( "Latitude", "t2" ) )
& EQ( Column( "Longitude", "t1" ), Column( "Longitude", "t2" ) )
)
)
),
Where(
In List( Column( "State", "t1" ),
_AllRows_,
UI( SelectListFilter(
ListBox,
Base( "Categorical",
Prompt( "State:", Character, PromptName( "t1.State_1" ),
ValueSource( Column( "State", Alias( "State" ), Table( "SATByYear" ) ) )
)
)
)
)
)
)
) << Run;Par exemple, que se passe-t-il si je souhaite uniquement montrer aux utilisateurs l'Alaska, la Californie, Hawaï, l'Oregon et l'État de Washington ?
Je peux remplacer _AllRows_ par {"Alaska", "California", "Hawaii", "Oregon", "Washington"}. Cependant, cela montre toujours tous les états. Il présélectionne juste les 5 états dans la liste.
Ma vraie application est une grosse base de données avec plusieurs filtres, donc je ne veux pas utiliser de tables intermédiaires.
De plus, je voudrais autoriser les utilisateurs à ne sélectionner qu'un seul état. Est-il possible? Je peux changer le type de filtre.
Re : Limiter les choix et n'autoriser qu'une seule sélection dans le filtre de requête de base de donnéesUne option consiste à produire une invite pour la sélection de l'utilisateur afin de transmettre ces valeurs sélectionnées à une instruction SQL pour exécution.Le script peut utiliser le Créer une connexion à la base de données () et Exécuter SQL () pour interagir avec votre base de données. L'exemple ci-dessous est un exemple plus simple qui peut être utilisé pour créer un script plus robuste, il faudra donc plus de travail pour que cela fonctionne pour votre cas d'utilisation. Espérons que cela vous aidera à obtenir les résultats que vous désirez.
//clearing all symbols.
Delete Symbols ();
//defining an empty value for selection so it can handle when nothing is selected.
selection = {};
//Prompt providing values available for said user
nwp = New Window( "States",
<<MODAL></MODAL>Re : Limiter les choix et n'autoriser qu'une seule sélection dans le filtre de requête de base de donnéesMerci d'avoir géré mes attentes. Une correction est que je ne lui ai pas demandé de tout faire. Renvoyer des listes vides est aussi simple que de renvoyer des listes complètes lorsque rien n'est sélectionné. Limiter les utilisateurs à un seul choix est courant pour de nombreux langages et API. Exposer uniquement un sous-ensemble de choix potentiels pourrait être la demande la plus exigeante. Les développeurs pourraient être intéressés de savoir qu'il existe un intérêt pour ces fonctionnalités particulières.
Je comprends que les choses prennent du temps et je ne m'attends pas à l'une de ces fonctionnalités très bientôt. Entre-temps, les solutions de contournement suggérées ont été pour la plupart utiles. Ce forum est apprécié.
Si quelqu'un peut recommander des ressources pour créer des interfaces de filtre de requête de base de données personnalisées dans JMP, je suis très intéressé.
J'explore également d'autres options, telles que JavaScript, Rails, R, etc. Pousser les gens vers d'autres langues ne semble cependant pas être une utilisation appropriée d'un forum de discussion JMP. Donc, si je conçois autre chose, je ne le posterai pas ici.
Re : Limiter les choix et n'autoriser qu'une seule sélection dans le filtre de requête de base de donnéesIl peut être difficile pour un outil général comme le générateur de requêtes de JMP de tout faire.Avez-vous envisagé de créer votre propre interface personnalisée pour la requête ?Ce sera plus de travail au début, mais ensuite vous aurez exactement les fonctionnalités que vous voulez.
Re : Limiter les choix et n'autoriser qu'une seule sélection dans le filtre de requête de base de donnéesMerci, gzmorgan0 , Votre effort est utile et apprécié. Cela ne correspond pas à mon espoir d'éviter les tables intermédiaires, mais je peux voir comment l'utilisation d'Invisible et de Set Dirty pourrait le faire fonctionner pour mon cas avec plusieurs filtres. Je n'étais pas au courant de cette solution. Je marquerai votre réponse comme une solution et j'espère que quelqu'un publiera une amélioration.
J'ai essayé de faire des choses dans Where et In List, notamment avec ValueSource. Autant que je sache, ValueSource ne fait rien dans mes scripts. Je ne le vois pas dans l'index de script.
Peut-être que je suis gâté par les formulaires en ligne. Je souhaite néanmoins demander à tous les développeurs JMP de lire, pouvez-vous ajouter la fonctionnalité suivante aux filtres de requête DB.
- Retourne une liste vide quand rien n'est sélectionné (mon message précédent)
- Autoriser la publication d'un sous-ensemble d'une colonne dans une boîte de filtre ListBox, peut-être en utilisant une liste quelque part dans Where ou In List
- Autoriser les situations à limiter les utilisateurs à choisir un seul élément.
Re : Limiter les choix et n'autoriser qu'une seule sélection dans le filtre de requête de base de donnéesJ'ai essayé 3 options :
- Une simple modification de votre script répertorierait tous les États, mais présélectionnerait la liste des États du Pacifique. L'utilisateur voit la liste en surbrillance, mais doit utiliser CTRL-clic pour sélectionner ou désélectionner.
- Le message supprimé contenait un script qui utilisait une liste manuelle. Il afficherait une liste d'États du Pacifique. Cependant, il n'a pas filtré en fonction des sélections de l'utilisateur. J'ai essayé Ands et une autre syntaxe, mais la requête a toujours renvoyé l'ensemble complet des États du Pacifique.
- La seule façon d'obtenir la liste plus petite était d'ouvrir SATByYear, de créer un sous-ensemble à l'aide d'une requête, puis d'utiliser cette table de sous-ensemble dans New SQL Query. Remarque << Set Dirty(0) définit la table comme non modifiée et la requête SQL la fermera une fois la requête exécutée.
Names Default to Here(1);
dt0 = Open("$Sample_Data\SATByYear.jmp", "Invisible");
satby_dt = query(Table(dt0, "t1"),"Invisible", "SELECT DISTINCT * FROM t1
WHERE t1.State IN ( 'Alaska' , 'California' , 'Hawaii' , 'Oregon' , 'Washington' ) ");
close(dt0,NoSave);
satby_dt << Set Name("SATByYear");
satby_dt << set dirty(0);
wait(1);
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
[ "SATByYear" => "Source(satby_dt)", "SAT" => "$Sample_Data\SAT.jmp" ]
),
QueryName( "SQLQuery" ),
Select(
Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table(
"SAT",
Alias( "t2" ),
Join(
Type( Left Outer ),
EQ( Column( "State", "t2" ), Column( "State", "t1" ) ) &
EQ(
Column( "% Taking (2004)", "t2" ),
Column( "% Taking (2004)", "t1" )
) & EQ( Column( "X", "t2" ), Column( "X", "t1" ) ) &
EQ( Column( "Y", "t2" ), Column( "Y", "t1" ) ) &
EQ( Column( "Population", "t2" ), Column( "Population", "t1" ) ) &
EQ( Column( "Latitude", "t2" ), Column( "Latitude", "t1" ) ) &
EQ( Column( "Longitude", "t2" ), Column( "Longitude", "t1" ) )
)
)
),
Where(
In List(
Column( "State", "t1" ),
_AllRows_,
UI(
SelectListFilter(
ListBox,
Base(
"Categorical",
Prompt(
"State:",
Character,
PromptName( "t1.State_1" ),
ValueSource(
Column(
"State",
Alias( "State" ),
Table( "SATByYear" )
)
)
)
)
)
)
)
)
) << Run;
Re : Limiter les choix et n'autoriser qu'une seule sélection dans le filtre de requête de base de donnéesJ'ai supprimé ma première réponse. La liste manuelle a fourni les invites attendues, mais n'a pas filtré en fonction de la sélection de l'utilisateur.
Cherchez une mise à jour, bientôt.