Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLChère communauté,
J'aimerais utiliser l'objet de filtre de données pour permettre aux utilisateurs de filtrer certaines données à interroger à partir de la base de données Oracle via SQL.
J'ai donc extrait une petite partie des données dans une table JMP,
et placez un filtre de données dessus.
À partir du filtre de données, je peux extraire la clause where,
cela peut ressembler à ceci :
Select Where(
(:PC == "A_PROCESS" | :PC == "C_PROCESS" | :PC == "D_PROCESS") & :TC == "01"
& (:POS >= 25 & :POS <= 126)
)
et je voudrais transférer ceci dans une clause SQL Where-Clause comme:
where
PC in ("A_PROCESS", "C_PROCESS", "D_PROCESS")
and TC == "01"
and POS between 25 and 126
Comme je ne suis pas très familier avec le traitement de texte,
existe-t-il un moyen simple de le faire dans JMP,
en particulier comment désassembler la clause JMP-where (qui peut être plus complexe que les simples et concaténés),
et de le réassembler dans une clause SQL-where ?
Merci pour toute indication, meilleures salutations,
Georg
Re : Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLSalut Georg,
Je ne suis pas sûr de suivre cette déclaration: "Mais une sorte de filtre de tables (arrêt et enregistrement de la requête à l'étape de jonction) n'était pas possible."
Sur les filtres, AND est implicite.Je peux voir à quel point c'est déroutant.Mais si vous ajoutez simplement un tas de filtres sans cliquer sur ce bouton OU, vous obtenez ET.Dans cette requête, par exemple :
j'ai traîné Notation du Colonnes disponibles liste dans le Filtres liste, puis j'ai fait glisser DaysOut , puis j'ai fait glisser État .Je n'ai jamais cliqué sur OU bouton.Donc, ces trois filtres sont ET ensemble - ce filtre est (Classement = 'PG' AND DaysOut >= 5 AND State = 'FL') .Ainsi, vous pouvez avoir un seul groupe de filtres AND, ou vous pouvez avoir plusieurs filtres simples qui sont OR ensemble, ou vous pouvez avoir des groupes de filtres AND qui sont OR les uns avec les autres.La seule pensée que vous ne pouvez pas avoir est un groupe de filtres qui sont combinés par OU qui sont combinés par ET avec un autre groupe de filtres qui sont combinés par OU.
En fin de compte, si vous ne pouvez pas aller jusqu'au bout de ce dont vous avez besoin avec Query Builder, vous pouvez aller aussi loin que possible, puis utiliser le menu du triangle rouge en haut à gauche et sélectionner Convertir en requête SQL personnalisée .Cela générera le SQL pour la requête telle que vous l'avez construite de manière interactive et la placera dans un éditeur de texte afin que vous puissiez la modifier à la main pour obtenir ce dont vous avez besoin :

Une fois que vous avez apporté des modifications à SQL personnalisé mode, vous ne pouvez pas vraiment revenir au mode interactif.
HTH,
Éric
Re : Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLSalut Éric,
merci pour la réponse rapide, ça m'a aidé,
et Query Builder a de très belles fonctionnalités. Je vais donc chercher, où utiliser.
Je pourrais enregistrer la requête avec des jointures définies,
et l'utiliser à nouveau.
Mais une sorte de filtre de tables (arrêt et sauvegarde de la requête à l'étape de jonction) n'était pas possible,
et je n'ai pas trouvé la possibilité de connecter des filtres avec ET au lieu de OU.
Cordialement,
Georg
Re : Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLSalut Georg,
Excellente question.Voici ce que je fais :
- Lancez Query Builder et connectez-vous à la base de données.
- Utilisez le Sélectionner des tables pour la requête boîte de dialogue pour ajouter les tables et les relations de jointure que vous prévoyez d'utiliser fréquemment.
- Cliquez sur Créer une requête .
- Quand le Générateur de requêtes fenêtre apparaît, n'ajoutez pas de colonnes ou de filtres à la requête.Au lieu de cela, cliquez immédiatement sur Sauvegarder et donnez à la requête un nom comme complex_query_template.jmpquery.
- Lorsque vous souhaitez créer une requête en utilisant ce modèle comme point de départ, recherchez complexe_query_template.jmpquery dans le Maison fenêtre Fichiers récents liste, faites un clic droit dessus et sélectionnez Modifier une copie .Cela lancera Query Builder avec toutes les tables et jointures en place comme le modèle défini, puis vous pourrez procéder à la sélection des colonnes et ajouter des filtres.
Si votre modèle de requête ne figure pas dans la liste des fichiers récents de votre fenêtre d'accueil, vous pouvez utiliser Fichier ouvert pour l'ouvrir, mais vous devez juste vous rappeler de faire immédiatement un Enregistrer sous de sorte qu'après avoir ajouté des éléments à la requête et l'avoir enregistrée, vous n'écrasez pas votre modèle.
HTH,
Éric
Re : Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLSalut Éric,
votre commentaire m'amène à une autre question,
comme nous avons des bases de données très complexes avec de nombreux schémas et tables,
le générateur de requêtes JMP permet-il de le démarrer défini par l'utilisateur ?
C'est-à-dire puis-je démarrer le générateur de requête avec des schémas prédéfinis et des tables filtrées,
afin que je n'ai pas besoin de plusieurs minutes pour parcourir la base de données ?
Cordialement,
Georg
Re : Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLSalut Éric,
merci pour votre réponse, oui, j'ai jeté un œil à Query Builder.
J'utilise le générateur de requêtes dans plusieurs scripts, etc., mais je n'utilise toujours pas la boîte de dialogue, mais uniquement la méthode sql personnalisée.
C'est pour deux raisons:
- nos bases de données sont assez complexes (beaucoup de schémas, de tables, etc.), il faut donc beaucoup cliquer avant que quelqu'un puisse trouver la bonne table
- la documentation / les requêtes enregistrées dans la table de données ont l'air assez moche, lorsque vous avez cliqué sur la table ensemble au lieu d'utiliser SQL personnalisé,
donc impossible de l'utiliser à nouveau...
J'aime donc travailler avec "Nouvelle requête SQL" + SQL personnalisé, en particulier pour utiliser les tables générées de cette manière (par exemple, mettre à jour à partir de la base de données et refaire la même analyse ...).
Mon objectif est de construire une interface utilisateur pour interroger des données très complexes,
la première partie est effectuée au niveau de la base de données (le client avec jmp ne peut pas le faire en raison des performances),
et la deuxième partie est effectuée par jmp en commençant par obtenir les données de la base de données par une interface graphique personnalisée facile à utiliser.
Ici, JMP propose des outils parfaits, mais il reste parfois un petit problème à résoudre, comme pour la clause where.
Cordialement,
Georg
Re : Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLSalut Georg,
Avez-vous examiné Query Builder dans JMP ?Fichier > Base de données > Générateur de requêtes.Il vous permet de créer des requêtes de manière interactive sur des sources de données ODBC, y compris le filtrage, les filtres inclus qui invitent, puis vous pouvez exécuter les requêtes de manière interactive ou les utiliser dans JSL.Cela prend beaucoup moins de temps que d'écrire votre propre SQL à la main pour la plupart des gens (mais si vous voulez écrire votre propre SQL à utiliser avec Query Builder, c'est aussi une option).
Merci,
Éric
Re : Comment traduire la clause WHERE JMP du filtre de données en clause WHERE SQLChers tous,
entre temps j'ai résolu le problème. J'ai réalisé que mon script ne devait pas comprendre la clause JMP-where, mais simplement la traduire en une clause SQL-where fonctionnelle.
Voici donc un exemple JSL pour faire cela.
// Example for translating a JMP-where-clause from e.g. Data Filter to a SQL-where-clause
JMP_where_clause =
"Select Where(
(:PC == \!"A_PROCESS\!" | :PC == \!"C_PROCESS\!" | :PC == \!"D_PROCESS\!") & :TC == \!"01\!"
& (:POS >= 25 & :POS <= 126)
)";
jmp2sql_where = Function( {jmp_where},
// remove "Select Where()" from the string
df_list = Regex Match( jmp_where, "Select Where\((.*)\)" );
// replace JMP keywords by SQL keywords
sql_where = "AND " || Substitute( df_list[2], "\!"", "'", "==", "=", ":", "CZIM.", "&", "AND", "|", "OR" );
Return( sql_where );
);
sql_where = jmp2sql_where( JMP_where_clause);
show(sql_where);<BR /><BR />Et le résultat est :
sql_where = "AND
(CZIM.PC = 'A_PROCESS' OR CZIM.PC = 'C_PROCESS' OR CZIM.PC = 'D_PROCESS') AND CZIM.TC = '01'
AND (CZIM.POS >= 25 AND CZIM.POS <= 126)
";
Cordialement,
Georg