Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?実行できるアプローチは、ローカル データ フィルターに変更ハンドラー (フィルター変更ハンドラーの作成) を追加することです。これにより、フィルターが変更されると、Where 句 (Get where 句) がキャプチャされ、その結果が取得されて、グラフのタイトル(設定テキスト)のタイトル。
出力の操作方法に関するドキュメントは、「スクリプト ガイド」の「表示ツリー」セクションにあります。このドキュメントは、[ヘルプ] プルダウン メニューからアクセスできる JMP ドキュメント ライブラリから入手できます。
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?@ほぎありがとう。 これは機能しますが、複数のデータ フィルター パネルがあり、そのうちの 1 つのみに基づいてタイトルを変更したいと考えています (スクリプトはローカル データ フィルター パネルのすべての変更をキャプチャしているようです)。
特定のローカル データ フィルター パネルの変更をキャプチャするにはどうすればよいですか?
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?同じレポート内に複数のデータ フィルターがある場合、正しいものを取得するには、それぞれの GaphBuilder オブジェクトから開始して、1 つ上のステップに進んでデータ フィルターを検索します。
ldf = (gb << parent)["Local Data Filter"] << get scriptable object;
完全なコード:
もっと見る...
堅牢性の低い代替案:
ldf = (current report() << XPath("(//OutlineBox[text()='Local Data Filter'])"))[2] << get scriptable object;
ldf = current report()[OutlineBox(3)]<< get scriptable object;
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?@ホギご提案いただきありがとうございます。 2 番目の堅牢性の低いオプションを試してみましたが、おっしゃるとおりあまり堅牢ではなく、適切に動作させることができませんでした。
次のスクリプトでは、グラフ タイルに「年齢」の選択のみを表示したい場合、どのようにスクリプトを作成すればよいでしょうか?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?ごめんなさい、誤解がありました。
レポート内にデータ フィルターが 1 つだけある場合は、参照をより正確に指定する必要はありません。
一方で:
タイトルを一部に限定したい場合は、 Where句の場合は、以下のような別の正規表現が必要です。
あらゆるものを検索します:年齢 ==丸括弧内で括弧内の文字列全体を返します。
したがって、次のような場合には、
"Select Where( (:age == 14 | :age == 15) & :weight >= 113.5 )";
"Select Where( :age == 14 | :age == 16 | :age == 17 )"
:age ... の部分を返すだけです。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?@ホギ。 以下のスクリプトでは、JMP 16.2.0 ではチャートのタイトルが表示されず、変更されません。
ames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);
ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数の選択を含む) を動的に更新することは可能ですか?以下を使用して、グラフの上部に「自分のテキスト」を表示します。
Dispatch( {}, "graph title", TextEditBox, {Set Text( "my text" )} )ただし、ローカル データ フィルターで選択した項目を、選択したときにグラフ タイトルに表示したいと考えています (おそらく複数のセクションをカンマ区切りで?)。
JSL でこれを実現するにはどうすればよいでしょうか?
マスカスタマイゼーションRe: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?素敵な正規表現ですね!
括弧は 2 つの賢い方法で使用されています。
Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
パターンの最初と最後でバックスラッシュ文字が括弧 \(...\) をエスケープしているため、where 句のリテラル括弧と一致します。 アスタリスクが続くスペースは、0 個以上のスペースと一致します。
内側のかっこのペア見てwhere 句内の実際の括弧と一致するように見えますが、そうではありません。 実際の括弧はすでに一致しています。 これらの内側の括弧はグループ化括弧であり、一致の最初のグループを形成します。
グループ化括弧内のリテラル文字:年齢 ==一致すると、 .*?最後のエスケープされたリテラル括弧が一致するまで、一度に 1 文字ずつ文字を一致させます。 。は何でも一致します。* は 0 以上を意味し、? は 0 以上を意味します。 0 個以上を貪欲 (最後まで競争) から消極 (一度に 1 つずつ) に変更します。 消極的な動作により、最初のかっこが使用されるようになります。
最後に、「\1」は結果をフォーマットするために使用されます。グループ化括弧の最初のセットが一致したものすべてです。
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?@ホギ以下のスクリプトは JMP 16.2 で動作するようになりましたが、次の問題があります。
- グラフは年齢が選択されておらず、タイトルも表示されていない状態で始まりますが、すべての年齢のチェックボックスがオフになっている場合、最後のグラフはグラフのタイトルに表示されたままになります。
- 実際の問題では、複数のチェック ボックスがオンになっている場合にのみタイトルが表示されます。
これら 2 つの問題を解決するにはどうすればよいですか (JMP バージョン固有でない限り)。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?あなたが正しいです。
正規表現で年齢情報が見つからない場合は、値が見つからないことを返します。
だから後
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
追加してください
if(ismissing(ldfText),ldfText = "all ages");
問題を解決するには。
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?ただ選択するだけなら一一度にエントリを入力するには、ページプロットに自動的にラベルを付けるには、dropzone を使用します。
[複数のエントリが選択されている場合、それぞれのデータは複数のページに分割されます]

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Variables( X( :height ), Y( :weight ), Page( :age ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Add Filter(
columns( :sex, :age, :weight ),
Where( :age == 14 )
)
)
);Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?以下の私のスクリプト (実際のケース) は、2 番目のチェック ボックスを選択した後にのみトリガーされているようです。 その理由に関する手がかりがあれば役立つでしょう。
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[4] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?ああ、申し訳ありませんが、私はいつも年齢を選択することから始めました。その後、1 つの年齢選択 + 他の選択の場合にタイトルが更新されないことを見逃していました。
年齢の選択が 1 つだけの場合、追加の括弧は必要ありません。
それでは、最初の括弧を飛ばしてみてはどうでしょうか?
注意: このバージョンでは inverse を使用しないでください:)

changeTitle = Function( {this},
print(this);
print(ldf << get where clause());
ldfText = Regex(ldf << get where clause(),"(:age == .*?)\)","\1");
if(ismissing(ldfText),ldfText = "any text you want");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?@ホギ。 JMP 16.2.0 では動作しません。 これに関して新しいスレッドを開き、ここで何が機能していないのかについてのより良い例を示しました(リンク)。
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?実際には、このバージョンには Jmp 16.2.0 が必要です。
Re: ローカル データ フィルターでの「グラフ タイトル」ベースの項目選択 (複数選択を含む) を動的に更新することは可能ですか?わかりました、ありがとうございます、正しく動作しますが、データベース内で見つかった姓名だけを入力するにはどうすればよいでしょうか?
あなたの例では、名前「KATIE」のみが表示されます。
Re: ローカル データ フィルターで項目選択 (複数選択を含む) に基づいて「グラフ タイトル」を動的に更新することは可能ですか?次のようにすれば正しく動作します:
changeTitle = Function( {this},
Eval( Parse( "theRows = dt << get rows where" || Substr( ldf << get where clause(), 13 ) ) );
If( Length( theRows ) > 0,
theRow = theRows[1];
ldfText = :remarques[theRow],
ldfText = "All Names"
);
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);