如何在新腳本開始時關閉現有表數據過濾器我有一個腳本可以將過濾器添加到已經打開的數據表中。 有時,在調用腳本之前,用戶已經(手動)在該表上打開了數據過濾器。
這樣一個現有的數據過濾器似乎會干擾我的新腳本過濾器生效——即使我在腳本開頭執行了 dt << Clear Row States。
所以我想在我的腳本開頭有一個語句來關閉任何/所有現有的表過濾器。 但我無法弄清楚如何引用其他人已經在我自己的腳本之外創建的任意開放數據過濾器。 建議?
回复:如何在新腳本開始時關閉現有表數據過濾器我在腳本索引中發現可以通過以下方式引用數據表
dt = data table(i);
dt = data table(name);
並通過獲取名稱
dt << get name();
是否還有獲取“i”的功能。
我的意思是直接,而不是通過
Loc(Get Data Table List(),data table(2))
哦,我剛剛注意到數據過濾器有自己的索引——獨立於各自的數據表……
所以數據過濾器[i]不能用於訪問特定的數據過濾器(通過數據表-> i --> 數據過濾器)?
回复:如何在新腳本開始時關閉現有表數據過濾器Data Filter[i]
涼爽的!
這在哪裡記錄?
回复:如何在新腳本開始時關閉現有表數據過濾器鬼混,我找到了一個簡單的解決方案:
For( i = N Items( Get Window List() ), i >= 1, i--,
Try(
Data Filter[i] << Close;<BR /> Data Table[i] << Clear Row States // optional, if you want to<BR /> )<BR />);我不知道 Data Filter[i] 語法。 使它變得簡單。
回复:如何在新腳本開始時關閉現有表數據過濾器非常感謝,zz。
xpath 功能很棒! 碰巧的是,我來自 XML 背景並且過去使用過 xpath。 但我完全不知道您可以在 JMP 中以這種方式使用它。直到現在,我發現導航顯示樹具有挑戰性。 所以這是一個真正的發現。 非常有幫助!
回复:如何在新腳本開始時關閉現有表數據過濾器@john_madden ,
如果您只想在某個時候按下重置選擇按鈕,這裡是腳本。
這個腳本
- 查找表數據過濾器。
- 如果找到,它會尋找標題為“重置選擇”的可見按鈕。
- 如果找到該按鈕,請單擊它。
Names Default to Here(1);
dt = current data table();
dtname = dt << get name;
winList = get window List();
found = 0; _xzz=empty();
For(i=nitems(winList), i>=1 & !found, i--,
nme = winList[i] << Get Window Title;
If(Starts With(nme,"Data Filter") & Contains(nme,dtname),
found =1;
_xzz = winList[i] <<XPATH> 0, _xzz[1] << Click);
);
);</XPATH>
如果您希望此操作比在腳本開始時執行得更多,您將需要一個處理程序或訂閱來定義它何時需要運行。
希望有所幫助。
XPath 語法可能看起來有點奇怪,但它非常強大,因為 JMP 報告樹結構具有關聯的 XML 描述。我附上了為第 6 章編寫的腳本,“可編寫腳本的對象和 XPath”部分JSL Companion,JMP 腳本語言的應用,第二版. 該腳本提供了有限的介紹、一些簡單的示例以及用於了解更多信息的鏈接。
回复:如何在新腳本開始時關閉現有表數據過濾器@john_madden ,
我不清楚你想要什麼行動。 例如:
- 例 1:假設 Big Class 已打開,關聯的數據過濾器位於年齡列,並且在過濾器中選擇了 13 歲和 14 歲的孩子。 然後另一個應用程序選擇了 15 歲的女性。 將出現“重置”按鈕。 如果單擊,它將返回表數據過濾器中定義的表選擇。 那是你要的嗎?
- Ex2:與 Ex1 相同的起始場景,但用戶從數據表中刪除了幾行。 重置按鈕不會出現,之前的選擇也不再出現在數據過濾器中。
對於數據過濾器和表格,有稱為“處理程序”的方法/功能
- 製作數據過濾器處理程序
- 製作行狀態處理程序
- 訂閱(對於數據表)
一旦定義/啟用,就可以在行狀態更改、行被刪除等情況下採取行動。
如果您只是對重置按鈕感興趣,我懷疑(尚未測試),可以修改我發送的先前腳本以找到數據過濾器,如果重置按鈕未折疊(可見),則可以單擊發送給它。 但是,在發送修改後的腳本之前,更好地描述預期的行動將很有用。
另一個考慮因素是,如果用戶在報表上添加本地數據過濾器,則該表(如果它具有數據過濾器)不會反映用戶從報表的本地數據過濾器中所做的選擇。
回复:如何在新腳本開始時關閉現有表數據過濾器這行得通,但我想我更詳細地意識到了正在發生的事情,這可能會提出另一種解決方案。
如果您創建了一個帶有過濾器的表,然後在其他地方更改了表行選擇(我就是這種情況),數據過濾器中會出現以下內容:


我想我需要的是相當於按下“重置選擇”按鈕的腳本。
這可能嗎?
回复:如何在新腳本開始時關閉現有表數據過濾器@john_madden ,
從 JMP 14 開始,我知道的唯一方法是通過蠻力。 見下文。 筆記重來清除表格選擇狀態
Names Default to Here(1);
dt = current data table();
dtname = dt << get name;
winList = get window List();
found = 0;
For(i=nitems(winList), i>=1 & !found, i--,
nme = winList[i] << Get Window Title;
If(Starts With(nme,"Data Filter") & Contains(nme,dtname),
found =1;
(winList[i] << child << get scriptable object) << Start Over;
window(nme) << close window();
);
show(i, nme, found);
);
如果您正在使用一個應用程序並且用戶添加了一個本地數據過濾器並且您的分析需要它被刪除,您可以使用 XPath 找到它,獲取腳本,刪除找到的過濾器,關閉您的分析並通過保存的腳本恢復。
下面附帶的 JSL 顯示瞭如何使用 XPath 獲取特定分析的數據過濾器句柄。
希望有所幫助。