嵌套數據過濾器行選擇你好,
我正在開展一個項目,我將在數據表中對數據進行分類,用戶將通過我正在創建的界面向下選擇特定選項。
我想要下面的腳本做的是:
- 在左側的單選框 Choice 1 中,此人選擇年齡。
- 在數據表中,所有不是該年齡的行都被隱藏並排除在數據表中。
- 在右側的單選框中,選項 2 會動態更新以僅顯示未隱藏或排除的選項,並將包含可供選擇的名稱列表。
- 一旦選擇了這兩個選項,將只剩下 1 行,行號在 my_row 中返回。
我需要什麼幫助:
- 選擇選項 1 中的選項時,不會隱藏和自動排除行,即使篩選項中包含 show(1) 和 include(1)
- 單選框 2 不會因選擇 1 而動態更新
- 這兩者都不會“一起工作”,選擇 2 會覆蓋選擇 1 的行狀態,並且可以從任何行中進行選擇。 這可能是因為它沒有動態更新(?)
參考
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Row States;
New Window( "Example",
Data Filter Context Box(
H List Box(
Panel Box( "Choice 1",
dt << Data Filter(
Add Filter(
columns( :age ),
Display( :age, Size( 140, 185 ), "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
) ) ),
Panel Box( "Choice 2",
H List Box(
Data Filter Context Box(
V List Box(
dt << Data Filter(
Add Filter(
columns( :name ),
Display( :name, Size( 160, 150 ), Radio Box Display ),
Mode( Select( 1 ) )
) ) ) ) ) ) ) ) );
my_row = dt << Get selected rows;
show( my_row );
其他腳本視窗回复:嵌套數據過濾器行選擇這是我正在尋找的示例,但我不知道如何獲取代碼,因為它是一個應用程序。
當你有多個數據表時:
半導體工具包(下面的鏈接)> 實用程序(右上角)> 附加表限制
您首先單擊要查看其列的表,然後在您單擊的數據表中存在的列的右側生成第二個列表。 如果您選擇新的數據表,這將動態更新。
我在下面的線程中發現了類似的東西,但我發現很難將這段代碼翻譯成我需要的東西。
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
回到原帖:
- 選擇 1:如果我點擊“15”,dt 中的 7 行被選中,其餘的應該被排除和隱藏。
- 次要選項是使用 summarize( namelist = by( :name ) ),這將為我提供一個未排除或隱藏的唯一名稱列表,但在不使用單選框的情況下,此列表將提供給選擇 2。 我不確定如何使它動態化。
- 選擇 2 將根據選擇 1 中選擇的年齡動態更新名單。
- 在選擇 2 中進行選擇後,將只選擇一行。
假設我選擇:Choice 1 = 15 & Choice 2 = Amy,那麼第 29 行將被選中,我可以使用 << Get selected rows 將此行號保存到一個變量。
半導體工具包插件:
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
回复:嵌套數據過濾器行選擇使用完全定制的過濾器可能是相當簡單的解決方案。 另一方面,即使它有效(這一次)也可能不是
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Data Filter(
Location({2793, 233}),
Conditional,
Mode(Show(1), Include(1)),
Add Filter(
columns(:age, :name),
Display(:age, N Items(6)),
Display(:name, N Items(15), Find(Set Text("")))
)
);
(Window("Data Filter for Big Class")["Data Filter",LineUpBox(2)]) << NCol(2);
(Window("Data Filter for Big Class")["Data Filter",LineUpRulerBox(1)]) << Widths({300,300});
以下是使用過濾器更改處理程序對腳本進行的一些修改(JMP 中的狀態處理程序可能非常錯誤且挑剔,我們已警告您:))
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << clear row states;
Summarize(myage = By(:age));
//make a dialog window
nw = New Window("Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(Add Filter(columns(:age)), Display(:age, "Radio Box Display"), Mode(Select(1), Show(1), Include(1)))
),
lb2 = Border Box()
)
);
// Creates list of names that are not excluded or hidden
f = function({a},
Try(Summarize(myname = By(:name)));
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try((lb2 << child) << delete box());
//append a new col list box, with all columns of the data table selected in the listbox
lb2 << append(
Panel Box("Select Script", sel1 = Radio Box(myname, Show(my_names = sel1 << Get Selected)))
);
);
fch = obj1 << Make Filter Change Handler(f);回复:嵌套數據過濾器行選擇我有一種感覺,我已經很接近了,但我現在遇到了兩個問題。
我進一步修改了下麵線程中的解決方案代碼。
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear row states;
Summarize( myage = By( :age ) );
//make a dialog window
nw = New Window( "Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(
Add Filter( columns( :age ) ),
Display( :age, "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
);
Wait( 0 );
// Creates list of names that are not excluded or hidden
Try( namelist = Summarize( myname = By( :name ) ) );
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try( lb2 << delete );
//append a new col list box, with all columns of the data table selected in the listbox
vlb1 << append( lb2 = Border Box( Left( 10 ), Right( 10 ), bottom( 10 ), top( 10 ), sides( 15 ), // Col title
Panel Box( "Select Script",
sel1 = radio box( eval( namelist ), show( my_names = sel1 << Get Selected) ) )
), all ) );
)
);
如果您註釋掉所有 vlb1,您會得到一個小框,您可以從 Big Class 中的不同年齡中進行選擇。 其他行被排除並隱藏。
問題:
- 第二個摘要,名單,不會隨著不同年齡的選擇而動態更新。 如何更新腳本來做到這一點?
- 第二個 Try() 來自解決方案代碼並且是動態的,所以我不確定為什麼第一個不會。
- 當 vlb1 取消註釋時,JMP 會出錯,錯誤圖片如下。 我不確定已刪除的對象引用在這部分代碼中的位置。 任何人都可以看到嗎?

我想如果這兩個問題可以解決,那麼我應該能夠找到某種方法來返回單個行號。
回覆:嵌套資料過濾器行選擇@jthi ,再次感謝您提供的難以置信的幫助!答案很簡單,再一次哈哈。
我修改了你的第一個建議以滿足我的需要,因為我明白你的意思JMP 中的狀態處理程序有缺陷且挑剔。
回覆:嵌套資料過濾器行選擇我已經製作了有關 JMP 中不同狀態處理程序的願望清單項目改進 JMP 的狀態處理程序(懸停標籤、行狀態處理程序、過濾器狀態處理程序、調度程序等) 。