Filtres dynamiques pour requête SQLDonc, je ne connais vraiment rien à SQL, j'ai donc utilisé le générateur de requêtes JMP et basé tout mon code sur cela.
Fondamentalement, je veux permettre à l'utilisateur de filtrer toutes les données qu'il souhaite via un écran contextuel où il peut choisir la colonne à filtrer, puis les valeurs qu'il souhaite filtrer.Toutes les colonnes de ma table JMP sont des noms de colonne valides dans ma base de données.Je suis donc arrivé au point où j'ai créé un tableau associatif qui contient tous les filtres et valeurs que l'utilisateur a choisis où les clés sont les filtres.
Le problème que j'ai est dans la nouvelle requête SQL où je peux utiliser "Où" pour effectuer le filtrage réel, je ne sais pas comment ajouter mon tableau associatif.
Je suis sûr qu'il y a une meilleure façon de faire cela.Des pensées?
_dt = Current Data Table();
selection = Associative Array();
//Create a window to collect filter information
TestIdWindow = New Window( "Filters Window",
<<MODAL></MODAL>
Re : Filtres dynamiques pour requête SQLMerci stephen.Permettez-moi d'essayer votre suggestion aujourd'hui.Je n'ai pas pensé à créer l'intégralité de la requête SQL sous forme de chaîne, juste la partie Where.
Quant à votre commentaire sur le fait de n'avoir que 5 à 12 options à filtrer, c'était en fait l'objectif initial.Mais ensuite, je ne pouvais pas décider sur quelles 5 à 12 choses je pense que tous les utilisateurs voudraient filtrer, alors j'ai pensé bien, si je peux déjà en faire quelques-unes de manière statique, à quel point serait-il difficile de le rendre dynamique.Puis ça a explosé et me voilà 
Re : Filtres dynamiques pour requête SQLIl existe une fonctionnalité pour l'utilisation de colonnes catégorielles dans votre SQL appelée _AllRows_ que vous pouvez invoquer si l'utilisateur ne fait aucun choix :
//window for selection
// get data
PickFilter = Function( {chosenCostCentre},
//{Default Local},
//deal with user making no choice
If(NItems(chosenCostCentre[1])==0,
chosenCostCentre[1] = "_AllRows_";
);
...Ensuite, en utilisant JSL dynamique, vous pouvez insérer ce texte à la place de la liste s'il n'y a pas de liste :
...
//get report names from filter table
Eval(
Parse(
Eval Insert(
"\[
dtFilterNames = New SQL Query(
Connection( connectionString ),
QueryName( "RvwReports" ),
Select( Column( "ReportID", "t1" ), Column( "ReportName", "t1" ) ),
From( Table( "RvwReports", Schema( "dbo" ), Alias( "t1" ) ) ),
Where(
In List(
Column( "CostCentreCommon", "t1" ),
^chosenCostCentre[1]^,
UI( SelectListFilter( CheckBoxList, Base( "Categorical" ) ) )
)
)
) << Run Foreground( );
]\"
)
)
);De même, en utilisant JSL dynamique, vous pouvez écrire chaque clause sous la forme d'une chaîne distincte, avec la valeur par défaut définie sur clause="" ; et ne les mettez à jour que si l'utilisateur sélectionne cette colonne dans une liste initiale de colonnes à filtrer.
À ce stade, si vous ne limitez pas l'utilisateur en pré-décidant quelles sont les 5 à 12 colonnes les plus importantes, alors pourquoi n'utilisent-ils pas le générateur de requêtes JMP intégré et écrivez-vous simplement le post-SQL JSL ?
Re : Filtres dynamiques pour requête SQLJe sais ce qu'est le code de la clause, mais l'utilisateur peut ne pas vouloir faire un filtre sur chaque colonne, juste certaines.Est-il acceptable que certains codes de clause ne se comparent à rien ?
De plus, il peut y avoir près d'une centaine de colonnes, je ne veux pas avoir à ajouter explicitement un code de clause pour chaque colonne.
J'ai testé cela avec quelques colonnes, mais j'essaie de construire cette clause where dynamiquement.Je prends quelques précautions dans mon code pour forcer toutes les clauses à être catégoriques ... mais j'ai juste besoin de comprendre comment faire la clause where avec les listes In de manière dynamique.
Where(
In List(
Column( "Column 1", "t1" ),
{"some value 1",
"some value 2"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
) & In List(
Column( "Column 2", "t1" ),
{Some value 3, some value 4},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
)
)
Re : Filtres dynamiques pour requête SQLEssayez d'abord d'exécuter votre requête SQL avec tous les filtres appliqués manuellement aux colonnes que l'utilisateur choisira. Cela générera le code de clause where requis dans lequel vous pouvez mettre des listes de valeurs choisies par l'utilisateur.