テーブルがソートされている場合、Make Row State Handler が動作を停止する行状態ハンドラーをデータテーブルに適用し、データテーブルが変更された場合でもそのハンドラーが動作し続けるようにすることは可能ですか。たとえば、列がスクリプトによって並べ替えられるか、それともユーザーによって対話的に並べ替えられるか?
現在、データのテーブルが 2 つあります。1 つは概要統計を含むテーブル、もう 1 つは生データを含むテーブルです。 ユーザーが概要テーブルの行を選択すると、行状態ハンドラーがどの行が選択されたかを検出し、パラメータ名を抽出し、選択されたパラメータを使用して生データ テーブルからチャートを作成します。
これは正常に動作します(ただし、新しく選択された行を見つける前に、最初に選択解除されている行が選択されます)が、ユーザーが要約テーブルをソートすると(たとえば、最低の Cpk またはその他のメトリックを確認したい場合)、機能が停止します。 )。
スクリプトのヘルプに基づいた次の簡単な例でも同じ問題が発生します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << Select Rows( 1 );
dt << sort( by( :weight ), replace table, order( ascending ) );
dt << Select Rows( 9 );出力は次のとおりです。
Scriptable[]
[1]
これはおそらくこのウィッシュリストの項目に関連していると思います。 https://community.jmp.com/t5/JMP-Wish-List/ Improvement-JMP-s-state-handlers-hover-label-row-state-handler/idi-p/527992 。 回避策はありますか?
MacOSでJMP17.0を使用しています。
ありがとう!
自動化とスクリプト作成Re: テーブルがソートされている場合、Make Row State Handler が動作しなくなるちなみに、私が示したスクリプト例は、次のコードを追加することで簡単に解決できることに気づきました。
rs = dt << make row state handler( f );
Sort() コマンドの直後。 問題となるのは対話型の場合 (ユーザーが列ごとにテーブルを手動で並べ替えてから行を選択する場合) です。
行状態ハンドラーをリセットするスクリプトをテーブルに追加することで回避策を試しました。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << new script("Fix Row State Handler",
rs = dt << make row state handler( f );
); // errors when the script is run!
dt << Select Rows( 1 );
wait(0);
dt << sort( by( :weight ), replace table, order( ascending ) );
rs = dt << make row state handler( f ); // fixes issue when scripting
dt << Select Rows( 9 );しかし、緑色の三角形をクリックしてスクリプトを実行すると、エラーが発生します。
Send Expects Scriptable Object in access or evaluation of 'Send' , dt << /*###*/make row state handler( f ) /*###*/ at line 6 in ...
ただし、これが機能したとしても、ユーザーはテーブルを並べ替えた後にこれを行うことを忘れないようにする必要があるため、理想的ではありません。
ありがとう、
マシュー。
Re: テーブルがソートされている場合、Make Row State Handler が動作しなくなるこんにちは、
おそらく、レポートを使用してスクリプトを実行できるでしょう。 テーブル ボックスは行が選択されているときにスクリプトを実行できますが、集計テーブルが並べ替えられても中断されないようです。アイデアを得るために以下を試してみてください。
Names Default To Here(1);
dt = open ("$Sample_Data\Car Physical Data.jmp");
dtSum = dt << summary( group(:Country), mean(:weight) );
nw = new window("ex",
dtb = Data Table Box( dtSum,
<< Set Selectable rows,
<< Set Click Sort )
);
//do something when a row is selected. Here, we just print the country.
dtb << Set Row Change Function ( function( { this },
selCountry = this[1][this << get selected rows];
print(evalinsert("Selected country is: ^selCountry[1]^."))
) );
乾杯、
ブレイディ
Re: テーブルがソートされている場合、Make Row State Handler が動作しなくなるこんにちは、ブレイディ、素晴らしいですね、ありがとう! これにより、以前よりもはるかに堅牢で使いやすいソリューションが得られました。
1 つの質問: JSL からデータ テーブル ボックスにクエリを実行して、ユーザーがテーブルをソートした列 (存在する場合) を確認することは可能ですか?
よろしくお願いします。
マシュー。
Re: テーブルがソートされている場合、Make Row State Handler が動作しなくなるこんにちは、マシューさん
テーブルの並べ替えにどの列 (存在する場合) が使用されたかを確認するクエリの方法がわかりません。 列をチェックすることでこれを総当たりで実行することもできますが、テーブルのサイズによってはコストが高くなる可能性があります。
Re: テーブルがソートされている場合、Make Row State Handler が動作しなくなるこんにちは、ブレイディさん
ヒントをありがとう。
テーブルの並べ替えにどの列 (存在する場合) が使用されたかを確認するクエリの方法がわかりません。 列をチェックすることでこれを総当たりで実行することもできますが、テーブルのサイズによってはコストが高くなる可能性があります。
ブルートフォース法について教えていただけますか? DataTableColBox とウィンドウ自体のプロパティを調べてみましたが、並べ替えられているかどうかを確認するのに役立つものは見つかりませんでした。
ありがとう、
マシュー。