在不同數據表的圖形生成器窗口之間連接本地數據過濾器假設我有兩個來自不同數據表的圖形生成器窗口,每個窗口都有一個本地數據過濾器,用於過濾“運行次數”和“時間”。
是否可以連接兩個本地數據過濾器以使它們保持同步?
或者也許使用 JSL 從本地數據過濾器#1 中提取當前設置並將其應用到本地數據過濾器#2?
(我猜第 1 步是獲取對本地數據過濾器的引用,我什至還沒有弄清楚如何做到這一點 - 這是我到目前為止所擁有的:
// get the last Graph Builder
win = Get Window List();
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
localDataFilter = last_gb << XPath("//OutlineBox[text()='Local Data Filter']");)
自動化和腳本編寫回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器您能否將表格連接在一起,然後使用某種分組列將它們分成不同的圖表? 這可能比搞亂過濾器更改處理程序更容易。
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器事實並非如此——一張表是運行結果的高級摘要,我們從該摘要中識別問題,然後切換到詳細運行圖並在數據過濾器中選擇特定運行。對我來說,合併這兩個表如何實現這種類型的行為並不明顯。
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器虛擬連接怎麼樣?
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器類似的帖子:
https://community.jmp.com/t5/Discussions/Virtual-linking-two-tables-via-JSL-scripting/mp/657682/highlight/true#M84705
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器我想需要非本地數據過濾器,以便虛擬鏈接的調度/接收功能將廣播過濾器設置。
對於我來說,這太慢了。
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器如果你想複製整個過濾器,你可以使用複制/粘貼:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :sex ), X( :age, Position( 1 ) ), Y( :weight ), Overlay( :sex ) ),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 3 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :age ),
Where( :age == 15 ),
Display( :age, N Items( 6 ) )
)
);
df1 << copy local data filter();
gb2 << paste local data filter();
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器我喜歡這個想法,但顯然你的解決方案中有一些我不明白的地方,因為當我嘗試運行它時它崩潰了。
這是我到目前為止所擁有的:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
gb2 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "M" ),
Display( :sex, N Items( 2 ) )
)
);
df2 = gb2 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "F" ),
Display( :sex, N Items( 2 ) )
)
);
broadcastFilter = Function( {},
//get the script
filterScript = df1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval(
Substitute(
Expr(
df2 << Start Over << _filter_
),
Expr( _filter_ ), Name Expr( filterExpression )
)
);
);
// activate the Filter Change Handler
rs = df1 << Make Filter Change Handler( broadcastFilter );這是錯誤:“broadcastFilter 有 0 個參數 (),但提供了 1 個參數 (18)”。知道它在說什麼嗎?我認為我沒有在最後一行中提供任何論點......
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器哦。對不起。
broadcastFilter = Function( {x}, 回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器最後,我切換回本地數據過濾器,並向第一個數據過濾器添加過濾器更改處理程序。
它工作得很好 - 如果你沒有忘記
rs=
過濾器更換處理程序
broadcastFilter=Function({x}, // Make Filter Change Handler need a function with 1 Argument
//get the script
filterScript = DataFilter1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval( Substitute( Expr( Datafilter2 << Start Over << _filter_ ), Expr( _filter_ ),
Name Expr( filterExpression ) ) );
// activate the Filter Change Handler
rs = DataFilter1 << Make Filter Change Handler( broadcastFilter); // will call broadcastFilter() with 1 Argument: # of selected rows
編輯:參數 x 添加並評論。 一個函數
broadcastFilter=Function({},- 沒有參數 - 不起作用。
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器哇,它有效!我希望我明白該代碼在做什麼......
最後一個問題 - 假設我已經打開了一個帶有本地數據過濾器的圖形生成器窗口,我知道如何獲取 gb .jsl 對像變量:
win = Get Window List();
graphs = Filter Each({w}, win, If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0) );
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;...但是如何從 gb 對像變量中獲取 df1 對像變量?(感覺就像我嘗試了100種不同的東西......)
回复:在不同數據表的圖形生成器窗口之間連接本地數據過濾器一種選擇是使用與圖形生成器類似的想法
df = (gb << top parent)[Outline Box("Local Data Filter")] << Get Scriptable Object;
本地數據過濾器不在圖形生成器內部,因此您必須首先進入更高級別(在本例中我使用 << 頂級父級)。 使用帶有屬性 helpKey 和值數據過濾器的 XPath 可能是更強大的解決方案,它會是這樣的
(gb << top parent) << XPath("//OutlineBox[@helpKey='Data Filter']")
編輯:如果您可以在同一窗口中使用多個數據過濾器,則可能必須使起點的定義比僅使用 << top Parent 更具體一些。