Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?취할 수 있는 접근 방식은 로컬 데이터 필터에 변경 처리기(Make Filter Change Handler)를 추가하여 필터가 변경될 때 Where 절(Get where 절)을 캡처한 다음 해당 결과를 가져와서 필터에 적용하는 것입니다. 그래프의 제목(설정된 텍스트)의 제목.
출력을 조작하는 방법에 대한 문서는 디스플레이 트리의 스크립팅 가이드 섹션에서 찾을 수 있습니다.이 설명서는 도움말 풀다운 메뉴에서 사용할 수 있는 JMP 설명서 라이브러리에서 사용할 수 있습니다.
Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?@호기 감사해요. 이것은 작동하지만 하나 이상의 데이터 필터 패널이 있고 그 중 하나만 기반으로 제목을 변경하고 싶습니다(스크립트는 로컬 데이터 필터 패널의 모든 변경 사항을 캡처하는 것으로 나타남).
특정 로컬 데이터 필터 패널에서 변경 사항을 캡처하는 방법은 무엇입니까?
Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?동일한 보고서에 여러 데이터 필터가 있는 경우 올바른 필터를 얻으려면 각 GaphBuilder 개체에서 시작하여 한 단계 위로 이동하여 데이터 필터를 검색할 수 있습니다.
ldf = (gb << parent)["Local Data Filter"] << get scriptable object;
전체 코드:
더보기...
덜 강력한 대안:
ldf = (current report() << XPath("(//OutlineBox[text()='Local Data Filter'])"))[2] << get scriptable object;
ldf = current report()[OutlineBox(3)]<< get scriptable object;
Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?@호기 제안해 주셔서 감사합니다. 나는 두 번째 덜 강력한 옵션을 시도했지만 당신이 말한 것처럼 그다지 강력하지 않고 제대로 작동하지 않는다는 것을 알 수 있습니다.
다음 스크립트에서 차트 타일에 "연령" 선택 항목만 표시하려는 경우 스크립팅 방법은 무엇입니까?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?죄송합니다. 오해를 드려 죄송합니다.
보고서에 단일 데이터 필터만 있는 경우 참조를 더 정확하게 지정할 필요가 없습니다.
반면에:
제목을 특정 부분으로 제한하려면 Where 절 , 아래와 같은 다른 Regex 표현식이 필요합니다.
그것은 무엇이든 검색합니다 :나이 == 둥근 괄호 안에 있고 괄호 안에 있는 전체 문자열을 반환합니다.
따라서 다음과 같은 경우
"Select Where( (:age == 14 | :age == 15) & :weight >= 113.5 )";
"Select Where( :age == 14 | :age == 16 | :age == 17 )"
:age ... 부분만 반환합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?@호기 . 아래 스크립트는 JMP 16.2.0에서 차트 제목을 표시하거나 변경하지 않습니다.
ames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);
로컬 데이터 필터(다중 선택 포함)에서 "그래프 제목" 기반 항목 선택을 동적으로 업데이트할 수 있습니까?다음을 사용하여 내 차트 상단에 "내 텍스트"를 표시합니다.
Dispatch( {}, "graph title", TextEditBox, {Set Text( "my text" )} )그러나 로컬 데이터 필터에서 선택한 항목을 그래프 제목에 표시하고 싶습니다(쉼표로 구분된 여러 섹션).
JSL에서 이것을 달성하는 방법은 무엇입니까?
대량 맞춤화Re: 로컬 데이터 필터(다중 선택 포함)에서 "그래프 제목" 기반 항목 선택을 동적으로 업데이트할 수 있습니까?좋은 정규식!
괄호는 두 가지 영리한 방법으로 사용됩니다.
Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
패턴의 시작과 끝에서 백슬래시 문자는 괄호 \(...\)를 이스케이프하므로 where 절의 리터럴 괄호와 일치합니다. 뒤에 별표가 오는 공백은 0개 이상의 공백과 일치합니다.
내부 괄호 쌍 바라보다 where 절의 실제 괄호와 일치하는 것처럼 보이지만 아닙니다! 실제 괄호는 이미 일치했습니다. 이러한 내부 괄호는 그룹화 괄호이며 일치 항목에서 첫 번째 그룹을 형성합니다.
그룹화 괄호 내에서 리터럴 문자 :나이 == 일치하면 .*? 이스케이프된 리터럴 괄호가 일치될 때까지 한 번에 하나씩 문자와 일치합니다. . 모든 항목과 일치하며 *는 0 이상을 의미하고 ? 0 이상을 욕심쟁이(끝까지 경주)에서 주저함(한 번에 하나씩)으로 변경합니다. 주저하는 행동은 첫 번째 괄호가 사용되었는지 확인합니다.
마지막으로 "\1"은 결과의 형식을 지정하는 데 사용됩니다. 그룹화 괄호의 첫 번째 세트가 일치하는 모든 항목.
Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?@호기 아래 스크립트는 이제 JMP 16.2에서 작동하지만 다음과 같은 문제가 있습니다.
- 차트는 연령을 선택하지 않고 제목이 표시되지 않은 상태로 시작하지만 모든 연령 확인란을 선택 취소하면 차트 제목에 마지막 항목이 계속 표시됩니다.
- 실제 문제에서는 두 개 이상의 확인란을 선택한 경우에만 제목이 표시되기 시작합니다.
이 두 가지 문제를 해결하는 방법은 무엇입니까(제 JMP 버전과 관련된 경우 제외)?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?당신 말이 맞아요.
Regex가 연령 정보를 찾지 못하면 누락을 반환합니다.
그래서, 후에
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
추가해주세요
if(ismissing(ldfText),ldfText = "all ages");
문제를 해결합니다.
Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?선택만 하면 하나 한 번에 입력하면 다음을 사용할 수 있습니다. 페이지 플롯에 자동으로 레이블을 지정하는 dropzone:
[여러 항목을 선택한 경우 각 데이터가 여러 페이지로 분할됨]

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Variables( X( :height ), Y( :weight ), Page( :age ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Add Filter(
columns( :sex, :age, :weight ),
Where( :age == 14 )
)
)
);Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?아래 내 스크립트(실제 사례)는 두 번째 확인란을 선택한 후에만 트리거되는 것으로 보입니다. 이유에 대한 모든 리드가 유용할 것입니다.
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[4] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?아, 죄송합니다. 저는 항상 연령을 선택하여 시작했습니다. 그런 다음 한 연령 선택 + 다른 항목의 경우 제목이 업데이트되지 않는 것을 놓쳤습니다.
단일 연령 선택만 있는 경우 추가 괄호가 필요하지 않습니다.
그렇다면 첫 번째 대괄호를 건너뛰는 것은 어떻습니까?
NB: 이 버전에서는 반전을 사용하지 마세요 

changeTitle = Function( {this},
print(this);
print(ldf << get where clause());
ldfText = Regex(ldf << get where clause(),"(:age == .*?)\)","\1");
if(ismissing(ldfText),ldfText = "any text you want");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?@호기 . JMP 16.2.0에서는 작동하지 않습니다. 여기서 작동하지 않는 것에 대한 더 나은 예와 함께 이에 대한 새 스레드를 열었습니다( 링크 ).
Re: 로컬 데이터 필터(다중 선택 포함)에서 항목 선택을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?사실, 이 버전은 Jmp 16.2.0이어야 합니다.
Re: 로컬 데이터 필터(다중 선택 포함)에서 "그래프 제목" 기반 항목 선택을 동적으로 업데이트할 수 있습니까?네, 감사합니다. 제대로 작동합니다. 하지만 데이터베이스에서 찾은 이름과 성을 어떻게 입력할 수 있을까요?
귀하의 예에서는 이름 "KATIE"만 표시됩니다.
Re: 로컬 데이터 필터에서 항목 선택(다중 선택 포함)을 기반으로 "그래프 제목"을 동적으로 업데이트할 수 있습니까?이렇게 하면 정상적으로 작동합니다:
changeTitle = Function( {this},
Eval( Parse( "theRows = dt << get rows where" || Substr( ldf << get where clause(), 13 ) ) );
If( Length( theRows ) > 0,
theRow = theRows[1];
ldfText = :remarques[theRow],
ldfText = "All Names"
);
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);