그래프 빌더에서 페이지 옵션을 사용하기 위해 필터 변경 처리기를 사용하는 방법은 무엇입니까?첨부된 데이터 표는 예시입니다. 아래 스크립트는 그래프 빌더의 새 "페이지"에서 로컬 데이터 필터를 통해 선택된 각 매개변수를 플롯하려고 시도합니다. 현재 상태에서는 로컬 데이터 필터를 통해 새 "매개변수"가 선택될 때마다 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: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?XPath 쿼리를 더 정확하게 만들 수 있습니다(XML 및 속성 트리 탐색). 이와 같은 것이 효과가 있을 수 있습니다.
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션을 사용하는 방법은 무엇입니까?@jthi 이는 부분적으로 작동하지만 선택한 모든 매개변수는 서로 아래에 그려진 모든 차트에서 Y축 제목으로 표시됩니다.
나는 변했다
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
에게
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);그리고 얻다

각 차트의 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축 제목으로 갖는 것을 제외하고 작동합니다. 이 문제를 해결할 수 있는 방법이 있나요?

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?필터 변경 핸들러를 생성하기 전에 함수를 한 번 트리거합니다.
update_title(local_filter);

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: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?문제는 매개변수로 다중 응답 열이 있을 가능성이 높습니다.


Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?@jthi 감사합니다. 매개변수 속성에서 다중 응답을 제거하면 스크립트가 예제 데이터(exampleSummaryTable2)에 대해 작동하게 됩니다. 하지만 다중 응답이 설정된 열이 없는 실제 데이터 세트에는 여전히 문제가 있습니다(안타깝게도 실제 데이터를 공유할 수 없음). 또 무엇이 있을까요?

Re: 필터 변경 처리기를 사용하여 그래프 빌더의 페이지 옵션과 작업하는 방법은 무엇입니까?이것은 예상된 결과를 반환하지 않습니다.
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
한 가지 이유는 로컬 데이터 필터에서 선택한 값이 없기 때문일 수 있습니다. 누락된 값에 대한 추가 검사를 추가할 수 있으며 param_where가 누락된 경우 아무 작업도 수행하지 않고 함수에서 일찍 반환할 수 있습니다(또는 모든 값을 매개변수로 갖고 다른 방법으로 매개변수 값을 가져와야 함).
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);
맞습니까? 아니면 다른 곳에 배치해야 합니까?