JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法親愛なるコミュニティの皆様
データ フィルター オブジェクトを使用して、SQL 経由で Oracle データベースからクエリするデータをユーザーがフィルターできるようにしたいと考えています。
そこで、データの一部を抽出して JMP テーブルに保存しました。
そしてその上にデータフィルターを置きます。
データフィルターから where 句を抽出できます。
次のようになります。
Select Where(
(:PC == "A_PROCESS" | :PC == "C_PROCESS" | :PC == "D_PROCESS") & :TC == "01"
& (:POS >= 25 & :POS <= 126)
)
これを次のような SQL Where-Clause に転送したいと思います。
where
PC in ("A_PROCESS", "C_PROCESS", "D_PROCESS")
and TC == "01"
and POS between 25 and 126
テキスト処理にはあまり詳しくないので、
JMPでこれを行う簡単な方法はありますか?
特に JMP-where-clause を逆アセンブルする方法 (And を連結するだけよりも複雑になる可能性があります)、
それを SQL-where-clause で再組み立てするには?
ヒントをありがとう、よろしくお願いします、
ゲオルグ
Re: JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法おい、ゲオルグ、
「しかし、テーブルの一種のフィルター (結合ステップでのクエリの停止と保存) は不可能でした。」 このステートメントに従っているかどうかはわかりません。
フィルターでは、AND は暗黙的です。それがいかに混乱しているかがわかります。ただし、OR ボタンをクリックせずにフィルターを多数追加すると、AND が得られます。このクエリでは、たとえば次のようになります。
引きずりました評価から利用可能な列にリストを追加しますフィルターリストをドラッグしましたデイズアウト、そしてドラッグしました州。クリックしたことはありませんまたボタン。したがって、これら 3 つのフィルターは AND 演算されます。そのフィルターは次のようになります。 (評価 = 'PG' AND DaysOut >= 5 AND 状態 = 'FL') 。したがって、AND フィルタの単一グループを使用することも、複数の単一フィルタを OR 演算することも、AND フィルタのグループを相互に OR 演算することもできます。唯一使用できないと考えられるのは、OR 演算されたフィルターのグループと、OR 演算された別のフィルターのグループと AND 演算されたフィルターです。
最終的に、クエリ ビルダーで必要なところまで到達できない場合は、必要なところまで到達し、左上の赤い三角メニューを使用して、カスタム SQL クエリへの変換。これにより、対話的に作成したクエリの SQL が生成され、テキスト エディターに入力されるため、手動で編集して必要なものを取得できます。

変更を加えたら、カスタムSQLインタラクティブ モードに戻ることはできません。
HTH、
エリック
Re: JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法やあ、エリック、
素早い対応ありがとうございます、助かりました、
クエリ ビルダーには非常に優れた機能がいくつかあります。 それで、どこで使用するかを見ていきます。
結合を定義してクエリを保存できましたが、
そしてまた使います。
ただし、テーブルの一種のフィルター(結合ステップでクエリを停止して保存する)は不可能でした。
そして、フィルタをORではなくANDで接続する可能性が見つかりませんでした。
よろしくお願いします、
ゲオルグ
Re: JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法おい、ゲオルグ、
素晴らしい質問です。私がやることは次のとおりです。
- クエリ ビルダーを起動し、データベースに接続します。
- 使用クエリのテーブルの選択ダイアログを使用して、頻繁に使用するテーブルと結合関係を追加します。
- クリッククエリの構築。
- ときクエリビルダーウィンドウが表示される場合は、クエリに列やフィルターを追加しないでください。代わりに、すぐにクリックしてください保存そしてクエリに次のような名前を付けますcomplex_query_template.jmpquery。
- そのテンプレートを開始点として使用してクエリを作成する場合は、次の場所を見つけます。 complex_query_template.jmpqueryの中に家窓最近使用したファイルリストを右クリックして選択しますコピーを編集する。これにより、すべてのテーブルと結合がテンプレートとして定義された状態でクエリ ビルダーが起動し、列の選択とフィルターの追加に進むことができます。
テンプレート クエリがホーム ウィンドウの [最近使用したファイル] リストにない場合は、次のコマンドを使用できます。ファイルを開く開く必要がありますが、すぐに実行することを忘れないでください。名前を付けて保存これにより、クエリに内容を追加して保存した後、テンプレートが上書きされなくなります。
HTH、
エリック
Re: JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法やあ、エリック、
あなたのコメントで別の質問が生じますが、
多くのスキームとテーブルを含む非常に複雑なデータベースがあるため、
JMP Query Builder ではユーザー定義で起動できますか?
つまり、事前定義されたスキームとフィルターされたテーブルを使用してクエリ ビルダーを起動できますか?
データベースをクリックするのに数分もかからないようにするには?
よろしくお願いします、
ゲオルグ
Re: JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法やあ、エリック、
ご回答ありがとうございます。はい、クエリ ビルダーを調べました。
いくつかのスクリプトなどでクエリ ビルダーを使用しますが、常にダイアログは使用せず、カスタム SQL メソッドのみを使用します。
これには次の 2 つの理由があります。
- 私たちのデータベースはかなり複雑です (多数のスキーム、テーブルなど)。適切なテーブルを見つけるまでに何度もクリックする必要があります。
- カスタム SQL を使用する代わりにテーブルをクリックすると、データ テーブルに保存されたドキュメントやクエリが非常に見苦しくなります。
なので再度使用することはできません...
そのため、私は「新しい SQL クエリ」 + カスタム SQL を使用するのが好きで、特にその方法で生成されたテーブルを使用するのが好きです (データベースから更新して同じ分析を再度実行するなど)。
私の目標は、非常に複雑なデータをクエリするためのユーザー インターフェイスを構築することです。
最初の部分はデータベースで実行されます (jmp を使用するクライアントはパフォーマンス上の理由から実行できません)。
2 番目の部分は jmp によって実行され、使いやすいカスタマイズされた GUI によってデータベースからデータを取得することから始まります。
ここで、JMP は完璧なツールを提供しますが、where 句など、解決すべき小さな問題が残る場合があります。
よろしくお願いします、
ゲオルグ
Re: JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法おい、ゲオルグ、
JMP のクエリ ビルダーを少しでも見たことがありますか?[ファイル] > [データベース] > [クエリ ビルダー]。これにより、フィルタリングやプロンプトを表示するフィルタを含めて、ODBC データ ソースに対して対話的にクエリを構築できるようになり、クエリを対話的に実行することも、JSL で使用することもできます。ほとんどの人にとって、独自の SQL を手動で記述するよりもはるかに時間がかかりません (ただし、クエリ ビルダーで使用する独自の SQL を記述したい場合は、それもオプションです)。
ありがとう、
エリック
Re: JMP-where-clause をデータフィルターから SQL-where-clause に変換する方法親愛なるみんな、
その間、私は問題を解決しました。 私のスクリプトは JMP-where 句を理解する必要はなく、単にそれを機能する SQL-where 句に変換する必要があることに気付きました。
これを行うための JSL の例を次に示します。
// 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 />結果は次のようになります。
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)
";
よろしくお願いします、
ゲオルグ