그래프 빌더에서 페이지 옵션을 사용하기 위해 필터 변경 처리기를 사용하는 방법은 무엇입니까?첨부된 데이터 표는 예시입니다. 아래 스크립트는 그래프 빌더의 새 "페이지"에서 로컬 데이터 필터를 통해 선택된 각 매개변수를 플롯하려고 합니다. 현재 상태로는 로컬 데이터 필터를 통해 새 "매개변수"가 선택될 때마다 y축 제목이 "중앙값"으로 표시됩니다.
새 매개변수가 선택되어 새 "페이지"에 표시될 때 매개변수 이름을 y축 제목으로 사용하고 싶습니다.
이를 위해 필터 변경 핸들러를 사용해 보았으나 스크립트가 제대로 작동하지 않습니다. 새 매개변수가 선택될 때마다 업데이트되거나 다른 방법이 있을 수 있도록 아래 색인 i가 필요하다고 생각합니다. 어떤 방향이든 유용할 것입니다.
XPath( "//TextEditBox" ))[i]
여기 내 스크립트가 있습니다
Names Default To Here (1);
Clear Log ();
gb = Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(changeTitle());자동화 및 스크립팅윈도우Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 처음 확인하면 첫 번째 스크립트가 예상대로 작동합니다(모두 선택하지 않은 경우에도). 모든 경우에 예상되는 y축 제목을 제공합니다. 두 번째 스크립트는 어떤 경우에도 올바른 y축 제목을 표시하지 않습니다(항상 중앙값을 y축 제목으로 표시함).
두 스크립트에 대해 좀 더 시간을 보내고 질문이 있으면 다시 찾아오겠습니다.
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?내 경험으로는 반환되는 내용이 약간 까다로울 수 있습니다(특히 아무것도 선택하지 않거나 모두 선택하는 경우). 다음으로 이러한 상황에서 무엇을 해야 할지 파악해야 하며 이전 스크립트를 수정할 수 있어야 합니다.
다음은 나에게 도움이 되는 이 모든 것에 대한 몇 가지 솔루션입니다. "더 간단한" 솔루션이 JMP16에서 작동하는지 확실하지 않습니다. "빈" 상황에서 무엇을 할 수 있는지 파악하여 어떤 유형의 문제가 발생할 수 있는지 이해할 때까지는 이러한 문제를 조사하지 않는 것이 좋습니다.
더보기...Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
, // else, this wasn't solved
visible_parameters = all_params;
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(visible_parameters),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, visible_parameters, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
gb << inval;
page_texts = Report(gb) << XPath("//GraphBuilderGroupBox/text()"); // Not sure if this can be used in JMP16
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
For Each({page_text, idx}, page_texts,
y_tebs[idx] << Set Text(Word(-1, page_text, "="));
);
gb << update window;
wait(0);
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 모두 선택을 취소하여 확인한 줄 알았는데 그렇지 않은 것 같습니다. 나는 당신과 같은 것을 얻습니다.
(방금 확인해 보니 이 문제가 이전 스크립트 에도 있는 것 같습니다. 즉, 모두 선택을 취소해도 예상한 결과가 나오지 않습니다.)

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?내 스크립트를 수정하지 않은 경우에도 해결되지 않은 상황이 하나 있습니다.

단일 선택에서 없음/선택 취소로 이동하는 경우. 그게 먼저 해결되어야 해
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 내 생각에도 마찬가지다. 아래를 봐주세요.
다음 작업은 새 페이지마다 y축 제목을 변경하는 기능을 도입하는 것인가요?
(이전의 방식이 이제 바뀌어야 할 것 같습니다)


Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?JMP 샘플 데이터와 함께 작동한다면 자신의 데이터를 사용하여 가능한 가장 간단한 예로 이동하세요.
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_parameters = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(visible_parameters));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_parameters(1);
f = filter_ref << Make Filter Change Handler(get_selected_parameters);
이 개수는 항상 일치해야 합니다.

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 마지막 스크립트를 실행하면 작동하고 결과는 JMP 샘플 데이터에서 예상한 대로입니다(지금까지의 모든 스크립트에 해당). 제가 데이터 테이블을 사용한 이유는 제가 가지고 있는 데이터 양식이 문제를 일으킬 수 있다고 생각했기 때문입니다.
유감스럽게도 테이블 위에 있는 다양한 스크립트로 인해 이제 약간 길을 잃었습니다.
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?간단한 JMP 샘플 데이터를 유지하면서 문제를 하나씩 해결해 보세요. 먼저 문제를 정의해야 합니다. 이 작업을 수행하기 위해 해결해야 하는(또는 이미 해결한) 몇 가지 문제를 건너뛰고 현재 문제에 집중하려고 합니다.
- 최상위 수준에서는 페이지 이름을 기반으로 Y축 제목을 업데이트하는 방법을 알아낼 수 있기를 원합니다.
- 표시되는 페이지에 영향을 미치는 필터가 있습니다.
- 필터를 모두, 하나, 다수, 없음으로 설정할 수 있습니다.
- 모두와 없음은 기본적으로 동일하지만(모든 페이지가 표시됨) 별도의 방식으로 관리해야 합니다.
- 이러한 다양한 상황을 어떻게 처리할 수 있습니까? 모두, 없음, 하나 그리고 다수?
- 필터 변경 처리기에 사용되는 함수 내에서 이러한 상황을 어떻게 처리할 수 있습니까?
이 문제가 해결될 때까지는 보유하고 있는 전체 애플리케이션으로 이동할 필요가 없습니다. 막히면 먼저 별도의 문제를 해결할 수 있습니다. 아래는 예제 스크립트입니다. else 문이 항상 41(또는 N Items()을 제거한 경우 전체 상태 목록)을 반환하도록 할 수 있어야 합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
gb = dt << Graph Builder(
Size(630, 590),
Show Control Panel(0),
Include Missing Categories(1),
Variables(X(:State)),
Elements(Treemap(X, Legend(4))),
Local Data Filter(
Conditional,
Add Filter(columns(:Region, :POP), Display(:Region, N Items(6)))
)
);
Summarize(dt, all_states = By(:State));
show(N Items(all_states));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_states = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(visible_states));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_states(1);
f = filter_ref << Make Filter Change Handler(get_selected_states);Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 내 데이터 테이블 exampleSummaryTableNoLimsNew.jmp를 사용하면 다음이 예상대로 작동하는 것으로 보입니다(데이터 테이블과 출력을 수동으로 확인했습니다). 데이터 필터가 그래프 빌더 내에 있는 실제 문제로 어떻게 진행합니까? 연관 배열이 매우 혼란스럽기 때문에 여기에 도움을 요청합니다.
Names Default To Here(1);
clear log ();
dt = Current Data Table();
obj = dt << Data Filter(Conditional,
Add Filter(columns(:TestDate, :Has Limits?, :TestStage, :Parameter) ),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_Parameters = By(:Parameter));
show(all_Parameters);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_Parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(all_Parameters), N Items(visible_Parameters));
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?데이터 테이블 첨자를 사용하는 것은 하나의 옵션입니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP)),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_states = By(:State));
show(all_states);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(all_states), N Items(visible_states));Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 어느 행이 필터링되는지 확인하려고 했고 스크립트가 exampleSummaryTableNoLimsNew.jmp 데이터 테이블과 부분적으로 작동하지만 모든 필터링 사례에서는 작동하지 않습니다.
데이터 테이블에서 필터링된 행을 선택하고 해당 행이 올바른지 수동으로 확인하려고 합니다. 현재 나는 붙어 있습니다.
분명히 코드 흐름에 대한 이해가 부족하여 추가 디버깅을 방해하므로 추가 도움을 요청하겠습니다.
아래 스크립트를 수정했습니다(28번째 줄은 get filtered 행 으로 확인하는 곳입니다).
Names Default To Here(1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
ldf = gb<<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?데이터 필터로 보낼 때 수행되는 작업을 시도해 볼 수 있습니다.
다음은 JMP17 스크립팅 인덱스의 예입니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP), where(:Region == {"C", "N"})),
Mode(Select(0), Show(0), Include(1))
);
obj << Get Filtered Rows; // [1, 4, 5, 6, 7, 19, 20, 26, 36, 40, 42, 46]Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 하지만 제 스크립팅 인덱스(JMP 16.2)에는 << 필터링된 행 가져오기를 사용하는 방법에 대한 예가 나와 있습니다.
제 경우에 어떻게 사용하는지 도움을 받을 수 있나요?

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?이 검사로 인해 문제가 발생합니다.

모든 매개변수가 표시되지 않는 상황을 일으킬 수 있는 필터가 더 있습니다. 한 가지 옵션은 << 필터링된 행 가져오기를 사용하고 모든 매개변수가 있다고 가정하는 대신 표시되는 매개변수를 계산하는 것입니다.
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션을 사용하는 방법은 무엇입니까?@jthi 지금까지의 예제에서는 모든 것이 예상대로 작동하고 보이는 것과 일치합니다.
그러나 실제 데이터와 더 밀접하게 일치하는 또 다른 데이터 테이블을 만들어 실제 데이터에서 직면하고 있는 문제의 일부를 재현할 수 있었습니다. 데이터 테이블이 첨부되어 있으며 아래 스크립트를 사용합니다.
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter ),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());매개변수를 선택하지 않으면 다음과 같은 결과가 나타납니다.

이는 모든 매개변수를 선택하고 다시 선택을 취소한 후의 것입니다. 여기서 상단 차트는 올바른 y축 레이블만 가져옵니다.

이 문제가 해결되면 실제 데이터 케이스도 예상대로 작동하기 시작할 것입니다. 어떤 방향이든 매우 유용할 것입니다.
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?내가 제공한 exampleSummarTable.jmp 및 최신 스크립트를 사용합니다.
하나의 값이 필터링된 후

해당 단일 값을 선택 취소합니다. 따라서 아무것도 필터링되지 않습니다.

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi "하나의 값을 선택한 다음 필터에서 모든 선택 항목을 제거하면 작동합니까?"라는 말의 의미를 이해하지 못합니다. 다시 말해주시겠어요? 또한 저는 JMP 16.2를 사용하고 있습니다.
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?JMP17.2를 사용하여 다중 응답을 제거한 후 원래 데이터와 data2에서 작동하는 것처럼 보이기 때문에 무엇이 잘못될 수 있는지 잘 모르겠습니다. 하나의 값을 선택한 다음 필터에서 모든 선택 항목을 제거하면 작동합니까?
더보기...
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestStage, :Parameter),
Where(:TestStage == {"A", "B"})
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 실제 데이터 세트의 경우 오류 없이 실행되지만 초기 플롯에는 여전히 y축에 올바른 매개변수 이름이 없습니다. 올바른 y축 제목은 두 번째 TestStage를 선택할 때만 트리거됩니다(처음에는 스크립트를 통해 하나만 선택됨).
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션을 사용하는 방법은 무엇입니까?내가 말했듯이 매개변수가 필터링되었기 때문일 가능성이 높습니다.
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
If(Is Missing(param_where),
param_list = uniq_params;
,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list,
y_tebs[idx] << Set Text(param_val);
);
gb << update window;
return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 실제 데이터 사례에서 주석을 달면
update_title(local_filter);
에서와 같이
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
//update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
초기 차트에 올바른 Y축 제목이 없다는 점을 제외하면 모든 것이 예상대로 작동합니다. Y축 제목은 다른 TestStage를 선택한 후에만 정확해집니다. 내 배치는?
update_title(local_filter);
맞습니까? 아니면 다른 곳에 배치해야 합니까?
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?이것은 예상된 결과를 반환하지 않습니다.
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
한 가지 이유는 로컬 데이터 필터에서 선택한 값이 없기 때문일 수 있습니다. 누락된 값에 대한 추가 검사를 추가할 수 있으며 param_where가 누락된 경우 아무 작업도 수행하지 않고 함수에서 일찍 반환할 수 있습니다(또는 모든 값을 매개변수로 갖고 다른 방법으로 매개변수 값을 가져와야 함).
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 매개변수 속성에서 다중 응답을 제거하면 스크립트가 예제 데이터(exampleSummaryTable2)에 대해 작동하게 됩니다. 그러나 다중 응답 세트가 있는 열이 없는 실제 데이터 세트에는 여전히 문제가 있습니다(안타깝게도 실제 데이터를 공유할 수 없음). 또 무엇이 있을까요?

스크립트에서 주석 처리를 사용하면 동일한 오류를 재현할 수도 있습니다.
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"}에서와 같이
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; //show (y_tebs);
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());실제 데이터의 경우 로컬 데이터 필터를 통해 하나 이상의 매개변수를 미리 선택할 여유가 없습니다. 아마도 이것이 실제 데이터 사례에서 문제를 일으키는 원인일 것입니다. 이 문제를 해결할 수 있는 방법이 있나요?
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?문제는 매개변수로 다중 응답 열이 있을 가능성이 높습니다.


Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 알았어. 방아쇠를 지적했습니다. 매개변수 이름에 밑줄이 있으면 스크립트가 작동하지 않습니다(실제 데이터의 매개변수 이름에 밑줄이 거의 없습니다). 매개변수 이름에 밑줄이 첨부된 예제 데이터 테이블입니다. 아래 스크립트는 첨부된 데이터 테이블이 있는 Words 함수에 오류를 발생시킵니다.
또한 초기 차트가 이상해 보이는 Size() 에 주석을 달아야 했습니다.
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
//Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?필터 변경 핸들러를 생성하기 전에 함수를 한 번 트리거합니다.
update_title(local_filter);

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 이는 초기 차트(필터 변경 핸들러 어린이가 포함되기 전)가 여전히 중앙값을 y축 제목으로 갖는 것을 제외하고 작동합니다. 이 문제를 해결할 수 있는 방법이 있나요?

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?한 가지 옵션은 get where 절을 구문 분석하는 것입니다.
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
별도의 항목으로 나누어 해당 항목을 반복하고 루프에 제목을 설정합니다.
편집하다:
Y축의 텍스트 편집 상자에 대한 참조를 얻는 부분에도 약간의 수정이 필요합니다. 다음은 작동할 수 있는 옵션 중 하나입니다.
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return(); // some problem
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 이는 부분적으로 작동하지만 선택한 모든 매개변수는 서로 아래에 그려진 모든 차트에서 Y축 제목으로 표시됩니다.
나는 변했다
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
에게
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);그리고 얻다

각 차트의 Y축 제목으로 플롯된 매개변수 이름만 필요합니다.
Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?XPath 쿼리를 더 정확하게 만들 수 있습니다(XML 및 속성 트리 탐색). 이와 같은 것이 효과가 있을 수 있습니다.
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")