圖形循環中的Where子句我有一些代碼旨在根據某些過濾構建報告。它將被提供兩個列表,第一個列表將確定提取哪些材質(在本例中為 Gender_List),第二個列表確定繪製哪些屬性(在本例中為 Property_List)。這個想法是,每個性別都會有一個循環,為所有選定的屬性創建一個圖形矩陣。報告頂部還有一個未經過濾的總體圖表
有兩種方法可以做到這一點。
第一個在圖表中帶有內在的 where 子句。我基本上已經讓它工作了,除了Where 子句最終佔據了排隊框中的一個位置。 另外,出於某種原因,在我下面的模型中,我有一個我不完全理解的錯誤(我的完整版本沒有該錯誤,但如果有人知道如何修復它,我仍然會感到好奇)。這是模型代碼
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M","F"};
age_list = {12,13,14,15};
Property_List = {"Age", "Height", "Weight"};
w= new window("test",
VLB = V List Box ("A",
dt<<DISTRIBUTION></DISTRIBUTION>
第二個是數據過濾器上下文框,它包裝了圖形循環的每次迭代。那個我還沒能去上班。如果我能讓上面的 where 版本正常工作,我認為我不需要太擔心數據過濾器上下文框/包裝。
無論如何,關於如何清理上面的代碼以從行框中刪除那些Where子句有什麼想法嗎?
消費者和市場研究內容組織數據探索和可視化實驗設計大規模定制回复:圖形循環中的Where子句如果將來有人遇到這個問題,我可以使用數據過濾器版本來解決問題。問題是數據過濾器上下文框需要有一個它所包裝的對象。就像我在上面展示的那樣,盒子包裹了陣容盒子和數據過濾器。這導致了奇怪的行為。通過將 LineupBox 和 Data 過濾器包裝到同一個對象(HListBox)中,似乎可以解決問題:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ),
dt << Graph Builder(Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ) ),
Elements( Histogram( X, Legend( 6 ) ) )
)
)
);
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
data filter context box(
HLB = HlistBox(
LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Graph Builder(
Size( 534, 450 ),
Show Control Panel(0 ),
Show Legend(0),
Variables( X(Column( Property_List[i] ) )),
Elements( Histogram( X, Legend( 6 ) ) ),
/*Where( :Sex == Gender_List[j] ) ),*/
SendToReport(
Dispatch(
{},
"Graph Builder",
OutlineBox,
{Set Title( Property_List[i] ), Image Export Display( Normal )}
)
)
),
)
),
dt<<DATA filter=""></DATA>回复:圖形循環中的Where子句很好,謝謝。我嘗試將其放入腳本中,但沒有使其正常工作,但看起來它位於錯誤的位置。我還注意到本地數據過濾器包裝存在一些重大性能問題,因此我認為這將是我們想要走的路線。
感謝大家對這一問題的幫助。
回复:圖形循環中的Where子句如果你添加@jthi代碼到我提供的代碼,它會給你你想要的

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;回复:圖形循環中的Where子句似乎仍然無法弄清楚如何擺脫陣容框中的“where”子句。我將其切換到圖形生成器對象,以查看頁眉/頁腳首選項是否會刪除它,但似乎沒有這樣做。
我嘗試將其重寫為包裝 LB 的數據過濾器。無論如何,這有一些優點,因為它允許用戶進行一些定制。這似乎然而,正如您所看到的,它看起來有點奇怪,因為數據過濾器難以置信地折疊了。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ),
dt << Graph Builder(Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ) ),
Elements( Histogram( X, Legend( 6 ) ) )
)
)
);
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
data filter context box(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Graph Builder(
Size( 534, 450 ),
Show Control Panel(0 ),
Variables( X(Column( Property_List[i] ) )),
Elements( Histogram( X, Legend( 6 ) ) ),
/*Where( :Sex == Gender_List[j] ) ),*/
),
)
),
dt<<DATA filter=""></DATA>
我嘗試在 LB 頂部加載數據過濾器,但這似乎不起作用。
關於如何清理這個有什麼想法嗎?這在技術上可行,但看起來有點垃圾。
回复:圖形循環中的Where子句這個怎麼樣:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
eval(substitute(
expr(dt << Distribution( Continuous Distribution( Column( _col_ ) ), where( :Sex == _select_) )),
expr(_col_),Property_List[i],
expr(_select_), Gender_List[j]
))
);
);
);
);回复:圖形循環中的Where子句您可以在腳本末尾使用以下命令刪除它們:
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;但在這種情況下,我猜它不會有幫助,因為 Lineup 似乎那些文本框作為元素,並且在刪除它們之前窗口會變得混亂。
回复:圖形循環中的Where子句這絕對是一個重大改進,但看起來我仍然在陣容框中顯示懸掛的“where(:Sex == Gender_List[j]”子句。 知道如何殺死它嗎?回复:圖形循環中的Where子句我稍微修改了一下你的腳本。您的代碼中的一些遞歸追加不起作用。看看這是否能滿足您的需求
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);