你好,我已經嘗試在 JSL 中編寫一段程式碼,其中根據某些變數的值,從圖形產生器獲得的圖形會發生變化。
我現在的特定範例非常簡單,我有一個複選框,根據用戶選擇(選中/未選中),我想使用本地過濾器在圖表中新增或刪除群組。 這是一個非常簡單的例子
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value<BR /><BR />// Check box to Remove group A from the graph
usw = New Window("Ignore A?", << Modal,
//Check Box defaulted to checked ignore
checkIgnore = check box({"Ignore A?"},
<< Set(1,1),
cb = checkIgnore << Get())
);
// Answer to Cancel or close buttons
If( usw["button"] == -1, throw("User cancelled") );
show(cb); // I can see how the value of cb changes between 0 and 1
nw = New Window( "Example Report",
// Box plot with dots
dot_box_plot = dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Title( 0 ),
Variables( X(:drug ), Y( :pain ), Color(:drug ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ) ),
/* This is the part that I'd like to make interactive
to keep or remove A-group from the plot depending on
user selection */
if(cb == 1,
Local Data Filter(
Close Outline( 1 ),
Add Filter( columns( :drug ),
Where( :Drug != "A" )
)
)
)
)
);正如您所看到的,我的 if 語句部分應該有問題,因為沒有任何變化,情節保留了所有組。 當然,當我只刪除 IF() 部分時,我的繪圖會忽略 A 組。
我將非常感謝任何建議。
嗨,吉姆,我需要幫助來完成我迄今為止最先進的腳本。簡而言之,腳本將要求使用者輸入 1-5 之間的暫存器編號
當我新增 while 語句或 if 語句時,腳本不執行任何動作。 if 只新增一個表達式而不使用 while 或 if 語句,它可以正常運作。
但我試圖對多個寄存器進行一半的工作,我通常會獲取各個寄存器的文件,並希望使用單個腳本來涵蓋所有 5 個品種。
提前致謝。
山姆
完整腳本如下
w = New Window( "輸入要分析的暫存器號碼", // 開啟一個有標題和內容的視窗...
Border Box( top( 20 ), Bottom( 20 ), Left( 160 ), Right( 160 ), // 櫥窗裝飾
V List Box( // V 和 H 清單嵌套來組織顯示框
H Center Box( Text Box( "在下面輸入暫存器編號" ) ), // 第二個標題,居中
Spacer Box( size( 1, 10 ) ), // 一點點垂直空間
// H 列錶框( 文字方塊( "value 1: " ), 數字編輯框( v1 ) ), // 資料輸入
H 列錶框( 文字方塊( "輸入暫存器編號:" ), Register_Num_teb = 文字編輯框( "", << 設定寬度( 200 ) ), ),
Spacer Box( size( 1, 10 ) ), // 一點點垂直空間
H Center Box( // 按鈕居中
Button Box( "Continue", // 按下按鈕時執行該腳本...
暫存器 = Register_Num_teb << get text();
// 使用值建立一個新表...
////////////////////////////////////////////////// ///////// //////////////////////////////////////////開始循環
而( 暫存器 == 1,
dothis = 表達式(
新列(“start_time”,數字,連續,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做這個;
dt << MoveSelectedColumns( {:start_time}, After( :Register1_active ) );
dothis = 表達式(
新列(“SoftStart_Accuracy%”,
數字,
連續的,
公式( ((:Register1_tsoftstart - :start_time) / :Register1_tsoftstart) * 100 )
)
);
做這個;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 暫存器 == 2,
dothis = 表達式(
新列(“start_time”,數字,連續,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做這個;
dt << MoveSelectedColumns( {:start_time}, After( :Register2_active ) );
dothis = 表達式(
新列(“SoftStart_Accuracy%”,
數字,
連續的,
公式( ((:Register2_tsoftstart - :start_time) / :Register2_tsoftstart) * 100 )
)
);
做這個;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 暫存器 == 3,
dothis = 表達式(
新列(“start_time”,數字,連續,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做這個;
dt << MoveSelectedColumns( {:start_time}, After( :Register3_active ) );
dothis = 表達式(
新列(“SoftStart_Accuracy%”,
數字,
連續的,
公式( ((:Register3_tsoftstart - :start_time) / :Register3_tsoftstart) * 100 )
)
);
做這個;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 暫存器 == 4,
dothis = 表達式(
新列(“start_time”,數字,連續,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做這個;
dt << MoveSelectedColumns( {:start_time}, After( :Register4_active ) );
dothis = 表達式(
新列(“SoftStart_Accuracy%”,
數字,
連續的,
公式( ((:Register4_tsoftstart - :start_time) / :Register4_tsoftstart) * 100 )
)
);
做這個;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 暫存器 == 5,
dothis = 表達式(
新列(“start_time”,數字,連續,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做這個;
dt << MoveSelectedColumns( {:start_time}, After( :Register5_active ) );
dothis = 表達式(
新列(“SoftStart_Accuracy%”,
數字,
連續的,
公式( ((:Register5_tsoftstart - :start_time) / :Register5_tsoftstart) * 100 )
)
);
做這個;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
////////////////////////////////////////////////// ///////// ////////////////////////////////////////// /////////////////////////////////
// (可選)關閉對話框。 或者,您可能想再次運行它......
w << 關閉視窗; // 只是對話框,不是報告
)
)
)
)
);
處理平台程式碼修改的首選方法是在平台初始處理後將訊息傳遞到平台。嘗試修改平台聲明變得太混亂且太不穩定。
下面是修改後的腳本,以在圖形生成器平台運行後添加過濾器。然後隱藏本地資料過濾器的實際顯示

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value// Check box to Remove group A from the graph
usw = New Window( "Ignore A?",
<<MODAL></MODAL>