スクリプト - OBBC クエリからのデータ テーブルの操作やあみんな -
Microsoft Access データベースに保存されている 2 つのデータセットを操作しています。これらのデータセットは、ODCB クエリを通じて取得します。 さらにデータ操作を行う前に、結果として得られる 2 つのデータ テーブルを結合する必要があります。
プロセス全体をスクリプト化しましたが、一度に完全に実行されるわけではありません。 常に、最初に 2 つの ODCB クエリのスクリプトを実行し、次にテーブルの結合やその他の操作のスクリプトを実行する必要があります。
そうしないと、次のエラー メッセージが表示されます。 'data table' のアクセスまたは評価でデータ テーブルが見つかりません。 Data Table/*###*/("qStreams") 」
(「qStreams」は、ODCB クエリから取得した 2 つのテーブルのうちの 1 つです)。
後で使用するために、ODCB クエリから取得したデータ テーブルを保存/宣言するためのスクリプトを追加する必要があるかもしれないと感じています。JSL スクリプトにあまり慣れていないため、ここで行き詰まっています (これが初めてです)実際にはスクリプトです)。
ご協力いただきありがとうございます。
データアクセスRe: スクリプト - OBBC クエリからのデータ テーブルの操作JMP サポート担当者は応答しましたが、ジャンクボックスに入っていました。
彼らはあなたが言ったように提案し、それはうまくいきました。
全員の利益のために詳細なフィードバックを貼り付けます。
================================================= =============================================
<

使用<<フォアグラウンドで実行とともにOnRunCompleteインポートされたテーブルに参照を割り当てるオプション。 これにより、スクリプトはクエリが完了するまで待機することになります。 さらに、クエリ ビルダーは、「queryResult」という OnRunComplete() スクリプトでのみ使用できるシンボルを作成します。 このシンボルは、結果のテーブルへの参照です。 。
<< Run Foreground( On Run Complete( dt = queryResult ) );
利用可能な関数とその引数について詳しくは、 SQL関数JSL 構文リファレンスのセクションを参照してください。
================================================= =============================================
したがって、アプリケーションでは次のようになります。
dtqProperties = (New SQL Query(
Version( 130 ),
Connection(
"ODBC:DBQ=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb;DefaultDir=C:\Users\E822710\Desktop\ROTF\Database For JMP;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DriverId=25;FIL=MS Access;FILEDSN=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
),
QueryName( "qProperties" ),
Select(
Column( "CaseID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamTag", "t1" ),
Column( "StreamDescription", "t1" ),
Column( "QualityID", "t1", Analysis Type( "Nominal" ) ),
Column( "QualityTag", "t1" ),
Column( "QualityDescription", "t1" ),
Column( "Value", "t1", Alias( "StreamQualityValue" ) ),
Column( "OriginDescription", "t1", Alias( "StreamOriginDescription" ) )
),
From( Table( "RW_StreamQualities", Alias( "t1" ) ) ),
Where(
In List(
Column( "QualityTag", "t1" ),
{"CRB"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
)
),
Order By(
Column( "CaseID", "t1", Order( "Ascending" ) ),
Column( "StreamReportOrder", "t1", Order( "Ascending" ) ),
Column( "QualityReportOrder", "t1", Order( "Ascending" ) )
)
) << Run Foreground( On Run Complete( dt = queryResult ) ));
Re: スクリプト - OBBC クエリからのデータ テーブルの操作@jthi良い考えですね!
これが問題である場合は、この投稿が役立つかもしれません。バックグラウンドでクエリを実行し、完了するまで待機し、残りの JSL スクリプトで参照します。
Re: スクリプト - OBBC クエリからのデータ テーブルの操作クエリをフォアグラウンドで実行していますか、それともバックグラウンドで実行していますか (これは設定に依存すると思いますが、強制することもできます)。 バックグラウンドで実行されている場合は、データテーブルを結合する前にクエリが完了しない可能性があります。
Re: スクリプト - OBBC クエリからのデータ テーブルの操作ご検討いただきありがとうございます。 残念ながらそれはうまくいきませんでした。
JMP サポートに問い合わせましたが、今のところ返答はありません。 この種の技術的な質問に対応しているかどうかはわかりません。
Re: スクリプト - OBBC クエリからのデータ テーブルの操作したがって、ここで私は New SQL Query をあまり頻繁に使用しないことを認めなければなりません。あなたのコード見た目正しい。ここに 2 つのアイデアがあります。そのうちの 1 つは、そうかもしれない(New SQL Query( ... ) << Run) かっこで囲む必要があります。もう 1 つは、先に進む前にクエリが実際に評価されることを確認するために wait ステートメントを含めることです。コードを一度に 1 行ずつ実行して、n row 関数が期待した数値を返すかどうかを確認してください。
//Get data
dtqStreams = (New SQL Query( ... ) << Run);
dtqProperties = (New SQL Query( ... ) << Run);
//Make sure everything evaluates
wait(1);
//check that table contains values
n row( dtqStreams );
// Join both Data Tables
dtJoined = dtqStreams << Join( With( dtqProperties ), ... );
// Set column properties
dtJoined:"StreamFeedFlag"n << Add Column Properties( ... );
// Add new columns
dtJoined << New Column( ... );
// Make graphs from your joined data table
dtJoined << Graph Builder( ... );
Re: スクリプト - OBBC クエリからのデータ テーブルの操作やあ -
両方のテーブルの結合に関してまだ問題がありますが、あなたの投稿に従って実装したスクリプトは次のとおりです。
// Join both Data Tables
dtJoined = dtqStreams << Join(
With( dtqProperties ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :CaseID = :CaseID, :StreamID = :StreamID ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "UnitBalance.HY%" )
);
しかし、それでもエラーが発生します:

Re: スクリプト - OBBC クエリからのデータ テーブルの操作新しい SQL クエリの値と等しい変数を設定します。スクリプトの最高レベルの関数を使用すると、次のようになります。
//Get data
dtqStreams = New SQL Query( ... ) << Run;
dtqProperties = New SQL Query( ... ) << Run;
// Join both Data Tables
dtJoined = dtqStreams << Join( With( dtqProperties ), ... );
// Set column properties
dtJoined:"StreamFeedFlag"n << Add Column Properties( ... );
// Add new columns
dtJoined << New Column( ... );
// Make graphs from your joined data table
dtJoined << Graph Builder( ... );
Re: スクリプト - OBBC クエリからのデータ テーブルの操作素早いご返信ありがとうございます。
概念は理解できましたが、それを自分の特定のケースに適用することができません。 現在のクエリ スクリプトは次のようになります。
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DBQ=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb;DefaultDir=C:\Users\E822710\Desktop\ROTF\Database For JMP;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DriverId=25;FIL=MS Access;FILEDSN=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
),
QueryName( "qProperties" ),
Select(
Column( "CaseID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamTag", "t1" ),
Column( "StreamDescription", "t1" ),
Column( "QualityID", "t1", Analysis Type( "Nominal" ) ),
Column( "QualityTag", "t1" ),
Column( "QualityDescription", "t1" ),
Column( "Value", "t1", Alias( "StreamQualityValue" ) ),
Column( "OriginDescription", "t1", Alias( "StreamOriginDescription" ) )
),
From( Table( "RW_StreamQualities", Alias( "t1" ) ) ),
Where(
In List(
Column( "QualityTag", "t1" ),
{"CRB"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
)
),
Order By(
Column( "CaseID", "t1", Order( "Ascending" ) ),
Column( "StreamReportOrder", "t1", Order( "Ascending" ) ),
Column( "QualityReportOrder", "t1", Order( "Ascending" ) )
)
) << Run;
すぐにスクリプトを共有すべきだったと気づきました。
今後ともご指導よろしくお願いいたします。
Re: スクリプト - OBBC クエリからのデータ テーブルの操作やあ@JRS 、
次のように、各 ODBC 接続で開くデータ テーブルへの参照を保持し、名前で呼び出す代わりにそれらを使用してみてください。
dt1 = Open Database( "DSN=My Data Source Name", "SELECT * FROM table1" );
dt2 = Open Database( "DSN=My Data Source Name", "SELECT * FROM table2" );
dt1 << Join(
With( dt2 ),
...
);