열에서 사양 제한을 추출하려고 합니다.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕,
사용자 정의 보고서에 사용할 수 있도록 열 사양 제한을 추출하려고 하는데 이상한 동작이 발생합니다. 아래는 내가 하고 있는 일의 일부입니다.
전역변수 지우기();
dt = 데이터 테이블( "blah" );
cols1 = dt << 열 이름 가져오기(숫자, 연속형);
For( jj = 1, jj <= N 항목( cols1 ), jj++,
spec_x = cols1[jj] << Get Property( "사양 제한" );
인쇄(
Char( jj ) || ": Col은 " || Char( cols1[jj] << 이름 가져오기 ) ||
", LSL은 " || Char( spec_x["lsl"] ) ||
", USL은 " || 문자(spec_x["usl"])
);
);
print 문은 실제 최종 용도는 아니지만 유용한 방식으로 한계를 추출했는지 보여주는 역할을 합니다!
이제 이 코드는 2개 열로 구성된 작은 테스트 테이블에 대해 잘 작동합니다.
"1: Col은 X, LSL은 1, USL은 2"
"2: Col은 Y, LSL은 3, USL은 7"
내 테이블에 있는 것과 일치합니다. 그러나 73개(숫자, 연속) 열로 구성된 더 큰 테이블의 경우 어떤 이유로 spec_x에 아무것도 넣지 못하여 다음과 같은 결과를 얻습니다.
"1: Col은 Rc_N+PO(N/.09/280), LSL은 ., USL은 ."
"2: Col은 Rc_V1(N/.1/1260), LSL은 ., USL은 ."
"3: Col은 Rc_V2(N/.1/1188), LSL은 ., USL은 ."
"4: Col은 Rc_V3(N/.1/1188), LSL은 ., USL은 ."
"5: Col은 Rc_V4(N/.1/1188), LSL은 ., USL은 ."
... 등
테이블에는 확실히 데이터 제한이 있습니다. 다시 확인했습니다! 그렇다면 작동하지 않을 이유가 있습니까? 테이블이 열려 있고 스크립트가 열 이름을 명확하게 가져오고 있지만 한계를 선택하도록 할 수는 없습니다.
스크립트를 단계별로 실행하고 spec_x = cols1[jj] << Get Property( "Spec Limits" ); 로그에는 다음이 표시됩니다.
사양 제한( LSL( 10 ), USL( 50 ), 목표( 30 ) )
하지만 print 문을 실행하면 다음과 같이 표시됩니다.
"1: Col은 Rc_N+PO(N/.09/280), LSL은 ., USL은 ."
도움을 주시면 감사하겠습니다!
감사해요,
매튜.
Re: 열에서 사양 제한을 추출하려고 합니다.이제 작동합니다. 도움을 주셔서 감사합니다 
Re: 열에서 사양 제한을 추출하려고 합니다.좋아, 사양 제한이 생성된 방법에 따라 <
dt = 새 테이블 ( "예" ) ;
dt << 새 열 ( "사양 제한 없음" , 숫자 , 마디 없는 ) ;
dt << 새 열 ( "Rc_N+PO(N/.09/280)" ,
숫자 ,
마디 없는 ,
속성 설정 ( "사양 한계" , 사양 한계 ( LSL ( 10 ) , USL ( 50 ) , 표적 ( 30 ) ) ) ,
값 설정 ( [ 18.306 , 18.937 , 17.979 ] )
) ;
dt << 새 열 ( "시험" ,
숫자 ,
마디 없는 ,
속성 설정 ( "사양 한계" , { LSL ( 1 ) , USL ( 5 ) , 표적 ( 삼 ) , 표시 제한 ( 0 )} ) ,
값 설정 ( [ 2 , 삼 , 4 ] )
) ;
열 1 = dt << 열 이름 가져오기 ( 숫자 , 마디 없는 ) ;
을 위한 ( 젭 = 1 , 젭 <= N개 품목 ( 열 1 ) , 젭 ++,
큐 = 열 1 [ 젭 ] << 재산을 얻으십시오 ( "사양 한계" ) ;
spec_x = 평가 목록 ( { 인수 ( 큐 , 1 ) , 인수 ( 큐 , 2 ) , 인수 ( 큐 , 삼 )} ) ;
만약에 ( N 행 ( 위치 ( spec_x , 비어 있는 () ) ) ,
인쇄 (
숯 ( 젭 ) || ":콜" || 숯 ( 열 1 [ 젭 ] << 이름을 얻다 ) ||
", 사양 제한이 없습니다"
) ,
인쇄 (
숯 ( 젭 ) || ": 콜은 " || 숯 ( 열 1 [ 젭 ] << 이름을 얻다 ) || ", LSL은 "
|| 숯 ( spec_x [ "LSL" ] ) || ", USL은 " || 숯 ( spec_x [ "USL" ] )
)
) ;
) ;
Re: 열에서 사양 제한을 추출하려고 합니다.답장을 보내주신 두 분 모두에게 감사드립니다. 하지만 아직 운이 좋지는 않습니다. 그런데 저는 Win7에서 JMP 11.2 64비트를 사용하고 있습니다.
MS: 새 테스트 테이블을 생성할 때는 귀하의 코드가 제대로 작동했지만 테이블을 사용할 때는 작동하지 않았습니다.
dkeshock: 귀하의 편집 내용은 도움이 되지 않았지만 열 이름을 쉽게 추출하는 방법에 대한 유용한 지침을 제공했습니다. 감사합니다 
이제 근본 원인을 찾았지만 해결 방법을 아직 잘 모르겠습니다. 내 열 중 하나를 새 테이블에 복사한 다음 수동으로 입력한 제한이 있는 새 테스트 열을 만들었습니다. 스크립트는 새 테스트 열에서 작동합니다.
"1: Col은 Rc_N+PO(N/.09/280), LSL은 ., USL은 ."
"2: Col은 테스트, LSL은 1, USL은 5"
그래서 나는 두 열(의도적으로 몇 개의 행으로 제한됨)에 대한 스크립트를 살펴보았습니다.
새 열("Rc_N+PO (N/.09/280)",
숫자, 연속, 형식( "최고", 10 ),
속성 설정( "사양 제한", 사양 제한( LSL( 10 ), USL( 50 ), 대상( 30 ) ) ),
값 설정( [18.306, 18.937, 17.979] )
)
새 열("테스트",
숫자, 연속, 형식( "최고", 12 ),
속성 설정( "사양 제한", {LSL( 1 ), USL( 5 ), 대상( 3 ), 제한 표시( 0 )} ),
값 설정( [2, 3, 4] )
)
사양 제한 속성의 코드가 다른 것 같습니다. 제가 생각할 수 있는 유일한 이유는 실제 데이터의 경우 기능 플랫폼을 사용하여 데이터 테이블에서 사양 제한을 가져온 반면, 테스트 열의 경우 수동으로 입력했기 때문입니다.
이것이 내 문제의 원인이 될 수 있습니까? 이 문제를 해결할 수 있는 방법이 있습니까, 아니면 사양 제한을 수동으로 입력해야 합니까(또는 MS와 같은 스크립트를 사용하여)?
감사합니다,
매튜.
Re: 열에서 사양 제한을 추출하려고 합니다.처음 테스트했을 때 기존 테이블에 있는 81개의 열 중 #58이 작동했습니다.열 이름이 동일한 지점에서 Cols1 변수의 규칙을 전환한 것을 발견했습니다(처음 58개는 ":ColumnName"이고 나머지는 ':'가 없음). 그래서 문자열 이름을 사용하도록 전환했는데 제대로 작동했습니다.
위의 예에서는 두 개의 "Cols1[jj]"를 "Column(cols1[jj])"로 변경할 때까지 실행되지 않습니다.그럴 이유가 있나요?
Re: 열에서 사양 제한을 추출하려고 합니다.작동해야 하며, 코드를 기반으로 한 아래 예에서는 작동합니다(JMP 11). 성능 문제인지 테스트하려면 Wait(0) 명령을 삽입해 보십시오.
//예제 테이블 만들기
dt = 새 테이블 ( "예" ) ;
을 위한 ( 나 = 1 , 나 <= 100 , 나 ++,
안부 = dt << 새 열 ( "시험" , 숫자 , 마디 없는 ) ;
평가 ( 평가판 ( 안부 << 속성 설정 ( "사양 한계" , { LSL ( 특급 ( 나 ) ) , USL ( 특급 ( 나 + 2 ) ) , 표적 ( 특급 ( 나 + 1 ) ) , 한도 표시 ( 0 )})))
) ;
//사양 제한 인쇄
열 1 = dt << 열 이름 가져오기 ( 숫자 , 마디 없는 ) ;
을 위한 ( 젭 = 1 , 젭 <= N개 품목 ( 열 1 ) , 젭 ++,
spec_x = 열 1 [ 젭 ] << 재산을 얻으십시오 ( "사양 한계" ) ;
인쇄 (
숯 ( 젭 ) || ": 콜은 " || 숯 ( 열 1 [ 젭 ] << 이름을 얻다 ) || ", LSL은 " || 숯 ( spec_x [ "lsl" ] ) || ", USL은 "
|| 숯 ( spec_x [ "usl" ] )
) ;
) ;
Re: 열에서 사양 제한을 추출하려고 합니다.이게 효과가 있나요?
전역 지우기 () ;
dt = 데이터 테이블 ( "어쩌구" ) ;
열 1 = dt << 열 이름 가져오기 ( 숫자 , 마디 없는 , "끈" ) ;
품목 = N개 품목 ( 열 1 ) ;
을 위한 ( 젭 = 1 , 젭 <= 품목 , 젭 ++,
spec_x = 열 ( 열 1 [ 젭 ]) << 재산을 얻으십시오 ( "사양 한계" ) ;
인쇄 (
숯 ( 젭 ) || ": 콜은 " || 숯 ( 열 1 [ 젭 ] ) ||
", LSL은 " || 숯 ( spec_x [ "lsl" ] ) ||
", USL은 " || 숯 ( spec_x [ "usl" ] )
) ;
) ;
Re: 열에서 사양 제한을 추출하려고 합니다.이 토론과 관련하여 - 사양 끌어오기를 처리하기 위해 제가 작성한 깔끔한 작은 함수가 있습니다. 표현식 처리와 연관 배열을 사용하여 나중에 사용할 수 있는 멋진 작은 사전을 만듭니다.
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
사용은 다음과 같습니다.
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);