동적으로 생성된 누적 차트로 디스패치안녕하세요 여러분,
중앙값 및 표준 편차에 대한 "매개변수"당 2개의 차트가 있는 보고서를 생성하려고 하는데 라인을 추가하는 데 어려움을 겪고 있습니다.
"Summary.jmp" 파일에는 "Lot"(X축으로 사용)가 있는 여러 열과 여러 매개변수가 포함되어 있습니다. 각 매개변수에는 접미사가 "_Q50"이고 접미사가 "_StdDev"인 중앙값 열이 있습니다. .
Target, LowerSpecsLimit 및 UpperSpecsLimits(TGT, LSL, USL)가 추가로 포함된 매개변수 목록이 있습니다. 내가 선택한 "Lot" 세트를 기반으로 변경될 수 있기 때문에 열에 직접 가지고 있지 않으며 실제로 스크립트가 실패할 경우 뒤죽박죽을 남기지 않도록 파일을 전혀 건드리지 않는 것을 선호합니다. 이유가 무엇이든지.
또한 제목과 축 레이블을 대체할 Dispatch가 있습니다.
그런 다음 서로의 상단에 중앙값 및 표준 편차 차트를 생성하는 함수가 있습니다. 차트는 괜찮습니다.
하지만 디스패치 섹션에 무엇을 입력해도 오류가 발생합니다.
"ScaleBox를 찾을 수 없습니다 ... {}에서"
모든 TextEditor 디스패치는 아무 것도 하지 않는 것 같습니다(오류도 아니지만 첫 번째 디스패치 오류에서 함수가 중지된다고 가정합니까?)
차트를 생성하고 결과 스크립트를 확인하기 위해 수동으로 수정했지만 도움이 되지 않았습니다. "Param1_Q50"을 직접 사용하고, 스크립트에 다시 넣어도 작동하지 않습니다!
코드는 다음과 같습니다.
NamesDefaultToHere(1);
Open("Summary.jmp");
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {
{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}
};
ParamGraph = Function (
{parameter, title, tgt=".", lsl=".", usl="."},
LOCAL(
{Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
gb = Graph Builder(
Size(GraphXSize,GraphYSize),
Show Control Panel(0),
Show Footer(0),
Show Legend(0),
Variables(
X(:Name("Lot")),
Y(Column(medianCol)),
Y(Column(stdevCol)),
Color(:Lot)
),
Elements(
Points(X, Y, Legend(6))
),
SendToReport(
Dispatch(
{},
medianCol,
ScaleBox,
{IF(tgt != ".", Add Ref Line(tgt, "Solid", "Black", "TARGET", 1)),
IF(lsl != ".", Add Ref Line(lsl, "Solid", "Purple", "LSL", 1)),
IF(usl != ".", Add Ref Line(usl, "Solid", "Red", "USL", 1))}
),
Dispatch({}, "graph title", TextEditor, {Set Text(title)}),
Dispatch({}, "Y title", TextEditor, {Set Text("Median")}),
Dispatch({}, "Y 1 title", TextEditor, {Set Text("Std Dev")})
),
);
);
);
New Window("Summary - Report",
For(i=1, i<=Length(ParamsList), i++,
ParamGraph(ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5])
)
) << Set Window Icon("Trellis")
Dispatch 섹션의 medianCol을 "Param1_Q50"으로 대체하여 이것이 대체 문제인지 확인하려고 시도했습니다. 첫 번째 차트가 다른 라인이 아닌 라인을 가져올 것으로 예상했지만... 작동하지 않았습니다!
나는 또한 보고서에 대한 참조를 얻으려고 시도했습니다.
rgb = gb << report;
rgb[TextEditBox(5)] << Set Text("Median");
하지만 다시 오류 메시지가 나타납니다.
Cannot subscript Display Box in access or evaluation of 'Subscript' , rgb[/*###*/"TextEditor"]
이 차트의 요소를 처리하는 방법을 아는 사람이 있습니까?
미리 감사합니다!!
Re: 동적으로 생성된 누적 차트로 디스패치
Re: 동적으로 생성된 누적 차트로 디스패치안녕하세요 짐,
실제로 효과가 있습니다!
변경 사항을 수동으로 복사했으며 두 가지 실수를 저질렀습니다.
1. "요소" 행이 필수 항목인지 몰랐습니다.
2. 제목 대신 "Parse(title)"를 쓴다
그리고 나는 당신의 솔루션을 훨씬 선호합니다(더 깔끔한 코드와 "잔여" 없음).
매우 감사합니다!
Re: 동적으로 생성된 누적 차트로 디스패치JMP 12.2에서 요약 테이블을 사용하여 스크립트를 실행했는데 오류 없이 실행되었습니다. 아래는 요약 테이블이 포함된 스크립트와 제가 수정한 스크립트입니다.
Names Default To Here( 1 );
//Open("Summary.jmp");
dtsumm = New Table( "Summary",
Add Rows( 6 ),
New Column( "Lot",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5, 6] )
),
New Column( "Param1_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [-3, 7, 8, -12, 5, 0] )
),
New Column( "Param1_StdDev",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0.2, 1, 0.6, 2, 0.2, 0.3] )
),
New Column( "Param2_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [23, 18, 54, 62, 78, 45] )
),
New Column( "Param2_StdDev",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0.9, 1.2, 7, 3.6, 4.2, 1] )
)
);
// Run the script
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}};
ParamGraph = Function( {parameter, title, tgt = ., lsl = ., usl = .},
Local( {Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
Eval(
Substitute(
Expr(
gb = dtSumm << Graph Builder(
Size( __GraphXSize__, __GraphYSize__ ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Footer( 0 ),
Variables( X( :lot ), Y( __Q50__ ), Y( __Std__ ), Color( :lot ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 6 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( __title__ )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Median" )} ),
Dispatch( {}, "Y 1 title", TextEditBox, {Set Text( "Std Dev" )} )
)
)
),
Expr( __GraphXSize__ ), GraphXSize,
Expr( __GraphYSize__ ), GraphYSize,
Expr( __Q50__ ), Parse( MedianCol ),
Expr( __Std__ ), Parse( stdevCol ),
Expr( __Title__ ), title
)
);
If( Is Missing( tgt ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( tgt, "Solid", Black, "TARGET", 1 )
);
If( Is Missing( lsl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( lsl, "Solid", Purple, "LSL", 1 )
);
If( Is Missing( usl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( usl, "Solid", Red, "USL", 1 )
);
)
);
New Window( "Summary - Report",
For( i = 1, i <= Length( ParamsList ), i++,
ParamGraph( ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5] )
)
) << Set Window Icon( "Trellis" );Re: 동적으로 생성된 누적 차트로 디스패치안녕하세요 짐,
내 ref summary.jmp 파일에서 시도했고...
Cannot find TextEditBox[ "graph title" ] at {}
Cannot find TextEditBox[ "Y title" ] at {}
Cannot find TextEditBox[ "Y 1 title" ] at {}
Cannot subscript Display Box in access or evaluation of 'Subscript' , Report( gb )[/*###*/AxisBox( 3 )]
따라서 이것이 버그라면 저는 JMP 12.1.0 64비트를 사용하고 있다고 언급해야 합니다.
그러나 어쨌든 그것은 내 (더러운) 코드와 함께 작동하므로 처리하겠습니다. 닫을 수 있는 트리 구조 창의 톤이 있을 것입니다...
Re: 동적으로 생성된 누적 차트로 디스패치이 예제가 원하는 것을 처리하는 보다 직접적인 방법을 찾을 수 있을 것이라고 생각합니다.
최종 형식이 정확히 정확한지 확실하지 않지만 필요에 맞게 쉽게 수정할 수 있다고 생각합니다.
Names Default To Here( 1 );
//Open("Summary.jmp");
// Create a Sample data table
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
dt:npn1 << delete property( "spec limits" );
dt:pnp1 << delete property( "spec limits" );
dt:npn1 << set name( "Param1" );
dt:pnp1 << set name( "Param2" );
dt:lot_id << set name( "lot" );
dtSumm = dt << Summary(
Group( :lot ),
Median( :Param1 ),
Std Dev( :Param1 ),
Median( :Param2 ),
Std Dev( :Param2 ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column stat" )
);
dtSumm:Param1 Median << set name( "Param1_Q50" );
dtSumm:Param2 Median << set name( "Param2_Q50" );
dtSumm:Param1 Std Dev << set name( "Param1_StdDev" );
dtSumm:Param2 Std Dev << set name( "Param2_StdDev" );
// Run the script
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}};
ParamGraph = Function( {parameter, title, tgt = ., lsl = ., usl = .},
Local( {Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
Eval(
Substitute(
Expr(
gb = dtSumm << Graph Builder(
Size( __GraphXSize__, __GraphYSize__ ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Footer( 0 ),
Variables( X( :lot ), Y( __Q50__ ), Y( __Std__ ), Color( :lot ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 6 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( __title__ )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Median" )} ),
Dispatch( {}, "Y 1 title", TextEditBox, {Set Text( "Std Dev" )} )
)
)
),
Expr( __GraphXSize__ ), GraphXSize,
Expr( __GraphYSize__ ), GraphYSize,
Expr( __Q50__ ), Parse( MedianCol ),
Expr( __Std__ ), Parse( stdevCol ),
Expr( __Title__ ), title
)
);
If( Is Missing( tgt ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( tgt, "Solid", Black, "TARGET", 1 )
);
If( Is Missing( lsl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( lsl, "Solid", Purple, "LSL", 1 )
);
If( Is Missing( usl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( usl, "Solid", Red, "USL", 1 )
);
)
);
New Window( "Summary - Report",
For( i = 1, i <= Length( ParamsList ), i++,
ParamGraph( ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5] )
)
) << Set Window Icon( "Trellis" );
Re: 동적으로 생성된 누적 차트로 디스패치많은 시도와 실패 후, 나는 그것을 할 수 있었습니다(별로 직관적이지 않습니다!)
그래서 SendToReport를 사용하지 않고 첨자를 사용했습니다.
함수 내부에 있으면 작동하지 않습니다. 나는 그것을 꺼내야했다 :
NamesDefaultToHere(1);
Open("Summary.jmp");
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {
{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}
};
ParamGraph = Function (
{parameter, title, tgt=., lsl=., usl=.},
LOCAL(
{Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
return = Graph Builder(
Size(GraphXSize,GraphYSize),
Show Control Panel(0),
Show Footer(0),
Show Legend(0),
Variables(
X(:Name("Lot")),
Y(Column(medianCol)),
Y(Column(stdevCol)),
Color(:Lot)
),
Elements(
Points(X, Y, Legend(6))
)
);
);
);
wind = New Window("Summary - Report",
For(i=1, i<=Length(ParamsList), i++,
gb= ParamGraph(ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5]);
rgb = gb << report;
rgb << showtreestructure;
IF(
IsMissing(ParamsList[i][3]) == 0,
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderAxisBox(2)] << Add Ref Line(ParamsList[i][3], "Solid", "Black", "TARGET", 1);
);
IF(
IsMissing(ParamsList[i][4]) == 0,
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderAxisBox(2)] << Add Ref Line(ParamsList[i][4], "Solid", "Purple", "LSL", 1);
);
IF(
IsMissing(ParamsList[i][5]) == 0,
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderAxisBox(2)] << Add Ref Line(ParamsList[i][5], "Solid", "Red", "USL", 1);
);
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderTitleBox(1)] << Set Text(ParamsList[i][2]);
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderTitleBox(3)] << Set Text ("Median");
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderTitleBox(4)] << Set Text ("Standard Deviation");
)
) << Set Window Icon("Trellis");
또한 다음 행에 유의하십시오.
rgb << showtreestructure;
내가 없으면 작동하지 않습니다!
그리고 나중에 자동으로 닫는 방법을 모르기 때문에 꽤 성가신 일이지만 적어도 지금은 작동합니다!
Re: 동적으로 생성된 누적 차트로 디스패치안녕하세요 짐,
감사! 수정을 했지만 문제가 해결되지 않았습니다.
{}에서 ScaleBox["medianCol"]를 찾을 수 없음
또는 하드 코딩하면":
{}에서 ScaleBox["Param1_Q50"]를 찾을 수 없습니다.
두 번째 Y축 차트를 제거하면 갑자기 참조선이 작동하지만 제목과 축의 이름이 바뀌지 않습니다.
Re: 동적으로 생성된 누적 차트로 디스패치감사합니다. Jim이 처리한 것 같습니다.
Re: 동적으로 생성된 누적 차트로 디스패치안녕 데이비드,
다음은 summary.jmp입니다.
Re: 동적으로 생성된 누적 차트로 디스패치제한에 대한 데이터 유형이 일치하지 않습니다. "참조 라인 추가"를 사용하려면 라인 값(첫 번째 값)이 숫자 값이어야 합니다. 함수에서 문자열로 설정하고 있습니다.
ParamGraph = Function( {parameter, title, tgt = ".", lsl = ".", usl = "."}
그리고 If 문에서
If( tgt != ".",
요소 목록을 숫자로 변경해야 합니다.
ParamGraph = Function( {parameter, title, tgt = ".", lsl = ., usl = .}
If 문은 다음과 같이 변경되어야 합니다.
If( IsMissing(tgt) == 0,
Re: 동적으로 생성된 누적 차트로 디스패치우리가 실행할 수 있는 코드를 제공할 수 있다면 훨씬 더 쉽게 도움이 될 것입니다. 이는 테이블 'summary.jmp'를 제공하거나 JMP와 함께 제공되는 샘플 데이터 테이블 중 하나와 함께 작동하도록 코드를 다시 작성하는 것을 의미합니다.