回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?你可以採取的方法是在本地數據過濾器中添加一個更改處理程序(Make Filter Change Handler),當過濾器發生更改時,它會捕獲 Where 子句(Get where clause),然後獲取該結果並將其應用於圖表標題中的標題(設置文本)。
有關如何操作輸出的文檔可以在顯示樹的腳本指南部分找到。該文檔可在 JMP 文檔庫中找到,位於“幫助”下拉菜單下。
回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?@hogi謝謝。 這會起作用,但我有多個數據過濾器面板,我只想根據其中一個更改標題(您的腳本似乎捕獲了任何本地數據過濾器面板中的所有更改)。
如何捕獲特定本地數據過濾器面板的變化?
回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?如果同一份報告中有多個數據過濾器,要獲得正確的數據過濾器,您可以從各自的 GaphBuilder 對像開始,向上一步並蒐索數據過濾器:
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;
回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?@hogi感謝您的建議。 我嘗試了你的第二個不太健壯的選項,但我可以看到它不像你說的那樣非常健壯,我無法讓它正常工作。
在下面的腳本中,如果我只想在圖表圖塊上顯示“年齡”選項,該如何編寫腳本?
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( "" )} ) )
);
回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?很抱歉對於這個誤會。
如果報表中只有一個數據過濾器,則無需更精確地指定引用。
另一方面:
如果你想限制標題的某些部分Where 子句,您需要另一個 Regex 表達式,如下所示。
它搜索任何:年齡==在圓括號內並返回括號內的整個字符串。
所以,對於像這樣的情況
"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();
);回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?@hogi . 您下面的腳本不會在 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 中實現這一點?
大規模定制回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?不錯的正則表達式!
括號以兩種巧妙的方式使用:
Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
在模式的開頭和結尾,反斜杠字符正在轉義括號 \(...\) 因此它與 where 子句中的文字括號相匹配。 星號後面的空格匹配零個或多個空格。
內括號看就像他們會匹配 where 子句中的實際括號一樣,但不是! 實際的括號已經匹配。 這些內括號是分組括號,它們構成匹配中的第一組。
在分組括號內,文字字符:年齡==是匹配的,那麼.*?一次匹配一個字符,直到可以匹配最後的轉義文字括號。 這 。匹配任何東西,* 表示 0 或更多,而 ?將 0 或更多從貪婪(跑到最後)變為不情願(一次一個)。 不情願的行為確保使用第一個括號。
最後,“\1”用於格式化結果:第一組分組括號匹配的所有內容。
回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?@hogi下面的腳本現在可以在 JMP 16.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();
);回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?你是對的。
如果 Regex 沒有找到年齡信息,它會返回 missing。
所以,之後
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
請加
if(ismissing(ldfText),ldfText = "all ages");
解決問題。
回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?如果你只是選擇一一次輸入,你可以使用頁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 )
)
)
);回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?我下面的腳本(針對實際情況)似乎僅在第二個複選框選擇後觸發。 任何關於為什麼的線索都是有用的。
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();
);回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?哦,抱歉,我總是從選擇年齡開始——然後我錯過了標題沒有針對一個年齡選擇 + 其他選擇的情況進行更新。
如果只有一個年齡選擇,則不需要額外的括號。
那麼,跳過第一個括號怎麼樣?
注意:請不要在此版本中使用 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 );
);回复:是否可以在本地數據過濾器(包括多項選擇)中動態更新基於“圖表標題”的項目選擇?@hogi . 在 JMP 16.2.0 中對我不起作用。 我已經就此打開了一個新線程,並提供了一個更好的示例來說明此處不起作用的內容(關聯).
回复:是否可以動態更新本地數據過濾器中基於“圖形標題”的項目選擇(包括多個選擇)?實際上,這個版本應該是Jmp 16.2.0:
回覆:是否可以動態更新本機資料篩選器中基於「圖形標題」的項目選擇(包括多個選擇)?好的,謝謝,它工作正常,但如果有的話,我們如何才能只輸入資料庫中找到的名字姓氏?
在您的範例中,這將僅顯示名字“KATIE”
回覆:是否可以動態更新本機資料篩選器中基於「圖形標題」的項目選擇(包括多項選擇)?像這樣它可以正常工作:
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 );
);