通用化 App Builder 參數化應用程式
當列的數量和類型不變時,參數化應用程式可以很好地工作。將 App Builder 與許多 JMP 平台一起使用要求用於初始建立報告的資料列的數量和類型與用於未來分析的欄位之間存在一一對應的關係。在許多情況下,這限制太多。
為了避免這個問題,可以概括應用程序,以便在適用的情況下可以使用任何數量或類型的列。最大的缺點是用於使用者輸入的內建對話方塊不再可用。幸運的是,App Builder 可以輕鬆建立和使用對話方塊來啟動報告視窗。
原料:
範例資料表 –汽車 1993、城市
難度——困難
影片長度– 8:04
腳步
- 開啟在建立參數化應用程式配方中建立的應用程式。 Cars 1993範例資料表將隨之打開,因為它用於建立配方。
- 由於我們不會使用參數化方法,因此我們必須為使用者輸入建立自己的對話框。首先新增一個新的Module 。
- 在「屬性」面板中,將Module重新命名為Dialog 。
- 將報告類型變更為Dialog 。這會隱藏對話框視窗頂部的選單。
- 在「來源」面板的「輸入輪廓」下,將「過濾器列選擇器」拖曳到工作區中。將變數名稱更改為clbAll 。
- 新增一個排隊框。
- 將兩個列列錶框和兩個按鈕框拖曳到佇列中,並將它們兩兩排列,每行都有一個按鈕,後面跟著一個列列錶框。陣容內的藍色輪廓顯示物件的位置。您也可以將物件放入放置區域(如果存在)。必須在目前應用程式中開啟資料表,過濾器列選擇器和列列錶框才可用。

- 將第一個按鈕變數名稱屬性變更為btnY並將標題變更為Add Y 。
- 將另一個按鈕的Name和Title屬性分別改為btnX和Add X。
- 將第一個列錶框的變數名稱設定為clbY 。
- 取消選取「建模類型」中除「連續」之外的所有項目,以便僅可以新增連續列。
- 將最小項目更改為1 。框中的提示從可選變為必需。
- 將Max Items設為1 ,限制可放入盒子內的物品數量。
- 最後,將N Lines改為2 。這將改變盒子的高度。
- 將第二個列清單的變數名稱設為clbX並將N Lines變更為8 。
- 在Lineup周圍新增一個V 列錶框。
- 將新的按鈕框拖曳到V 清單中,使其顯示在底部。將新按鈕的名稱變更為btnRemove ,並將標題變更為「刪除所選內容」 。
- 在按鈕周圍新增一個H 中心框。
- 選擇篩選器列選擇器和圍繞其他元素的V 列錶框。右鍵單擊並新增一個H 列錶框。右鍵單擊最外面的框並選擇“移動到角落” 。
- 增加兩個標題為Run和Cancel 的按鈕,分別將其變數重新命名為btnRun和btnCancel 。
- 將它們放置在H 列錶框中,然後放置在H 中心框中。
- 選擇包含其他物件的H 中心框和H 列錶框,並將它們新增至V 列錶框。

現在我們已經建立了對話框,讓我們為按鈕添加功能。
- 選擇取消按鈕。捲動到“屬性”面板的底部。最後一個屬性Press與按鈕腳本關聯。可以將腳本直接新增到右側的輸入框中,或者,如果需要更多空間,點擊三點按鈕將開啟一個具有更多空間的視窗。這是可以放置物件腳本的兩個位置之一。
- Use the following code for the button:
(thisModuleInstance << Get Box) << Close Window;
需要thisModuleInstance命名空間引用才能使「取消」按鈕正常運作。每個模組都會建立自己的同名命名空間引用。由於它們的作用域不會擴展到與其關聯的模組之外,因此它們可以具有相同的名稱。在使用多個模組時認識到這一點很重要。 Get Box訊息用於取得對話方塊視窗的引用,而Close Window 訊息則用於關閉它。
- 選擇新增 Y按鈕。右鍵單擊並選擇底部的“腳本”>“按” 。這將為腳本建立一個預設名稱,將其新增至「執行」按鈕的「Press」屬性中,並在「腳本」標籤中新增一個腳本外殼,這是腳本可以定位的第二個位置。 「屬性」面板中的腳本名稱必須與「腳本」標籤中的腳本名稱相同才能正常運作。
- 對“新增 X”和“刪除所選”按鈕重複此操作。
- 轉到腳本選項卡。刪除已新增至腳本中的預設註解和程式碼。參數thisBox是對與腳本關聯的物件的引用。所有 App Builder 腳本屬性都使用thisBox作為其第一個參數。它是可選的,如果不使用並且不需要其他參數,則可以將其刪除。
- For the Add Y button script, add the following line:
clbY << Append(clbAll << Get Selected)
這將導致在過濾列選擇器中選擇的內容被新增到 Y 列錶框中。
- 為「新增 X」按鈕新增相同的腳本,將clbY替換為clbX 。
- Use the following two lines for the Remove Selected button:
clbY << Remove Selected;
clbX << Remove Selected;
- Add a script for the Run button. Use the following code:
If(N Items(clbY << Get Items) > 0 & N Items(clbX << Get Items) > 0,
(thisModuleInstance << Get Box) << Close Window;
thisApplication:Report << Create Instance(clbY << Get Items,clbX << Get Items);
)
If語句檢查 X 列和 Y 列列錶框中是否至少有一項。如果滿足此條件,第 2 行將關閉對話方塊窗口,第 3 行將啟動報告模組。 thisApplication是應用程式使用的命名空間,其範圍包括在其中建立的所有物件和變數。在本例中,它用於引用報告模組並且它是可選的。建立實例是用於啟動模組的訊息。它的參數被傳遞給已啟動模組的OnModuleLoad函數。我們將傳遞使用者在其中選擇分析列的列錶框的內容。
- 選擇模組並將其重新命名為Report 。取消選取右下角的自動啟動,以防止其在應用程式啟動時啟動。
- 刪除報告中目前的三個報告。在使用者選擇分析列後,我們將使用 JSL 在執行時間建置它們。
- 將選項卡頁框重新命名為tpbDistribution 、 tpbFitYbyX和tpbScatter 。
- To finish building the application, navigate to the Report section of the Scripts tab. It can be found by selecting the Scripts tab and choosing Report using the combo box at the top. We used Create Instance in the Dialog module script to launch the report and pass it the analysis columns. A module receives any arguments in its OnModuleLoad function. This happens before any of the report visuals are rendered. The following code will receive the passed variables and assign them variables local to the module (i.e., in the thisModuleInstance namespace for report).
OnModuleLoad({yCols,xCols},
allCols = Insert(yCols,xCols);
yVars = yCols;
xVars = xCols;
);
變數allCols組合了散點圖平台的 X 和 Y 變數。
- The 附加 function will be used to add the platforms to the appropriate Tab Page Boxes.
tpbDistribution << Append();
tpbFitYbyX << Append( );
tpbScatter << Append()
- Working from the saved scripts from the Parameterized Application recipe, copy and paste the Scatterplot Matrix code into the 附加 function for tpbScatter. Delete the list of hard coded column names and replace them with 評估(所有列).
tpbScatter << Append(
Scatterplot Matrix(
Y( Eval(allCols) ),
)
)
- We will use an alternative form for the 分配 platform:
tpbDistribution << Append(
Distribution(
Y(Eval(allCols))
)
);
這種方法的優點是不需要指定輸入列的建模類型,這使得程式碼更加簡單。
- We will also use an alternative for 用 X 擬合 Y
tpbFitYbyX << Append(
Fit Y by X(
Y( Eval(yVars)),
X( Eval(xVars) )
) << Fit Line << ANOVA;
);
除了不必更改不同建模類型的平台呼叫之外,還可以使用擬合線和方差分析訊息,使程式碼更加緊湊。
您可以使用Cities範例資料表測試應用程式。雖然您僅限於單一回應列,但 X 列的數量和建模類型不受限制。
自動化和腳本編寫甜點