데이터를 필터링하고 동적 열 이름을 사용하는 적절하고 효율적인 방법은 무엇입니까?현재 Get Rows를 사용하여 데이터 테이블을 필터링하는 스크립트를 작성 중입니다.
그런 다음 행을 사용하여 목록의 값을 가져옵니다.
아래는 내 스크립트의 일부입니다.
rows = main_dt << Get Rows Where(
As Column(G_TEMP_COL_STR) == M_TEMP &
As Column(G_WAFER_COL_STR) == M_WAFER
);<BR /><BR />values_list = As Column(main_dt,G_TEMP_COL_STR)[rows];알고 싶습니다 :
- 더 좋은 방법이 있습니까?
- : <열 이름>을 직접 사용하는 것과 비교하여 As 열 (<문자열>)이 느린 이유는 무엇입니까?
- GUI에서 특정 열을 할당 할 수 있도록 열로 사용했기 때문에 As Column을 사용하고 있습니다.
Re : 데이터를 필터링하고 동적 열 이름을 사용하는 적절하고 효율적인 방법은 무엇입니까?더 좋은 방법이 있는지 알려줄 충분한 정보를 제공하지 않습니다. "Get Rows Where"는 많이 사용하지 않는 한 매우 효율적입니다. 결과를 얻기 위해 데이터를 완전히 통과시킵니다. 이 작업을 많이 수행하는 경우 전체 데이터 스캔 수를 줄이는 다른 방법을 사용하는 것이 좋습니다.
As Column ()을 사용하는 것이 열 이름에 대한 직접 참조를 사용하는 것보다 느리다고 언급했습니다. 그것이 당신이 결정한 것이라면, 코드를 다음과 같이 바꿀 수 있습니다. Get Rows Where ()의 하드 코드 된 버전을 JSL에 전달합니다.
G_TEMP_COL_STR="Height";
M_TEMP =72;
G_WAFER_COL_STR = "WAFER_NUM";
M_WAFER =12;
G_VALUE_COL_STR = "Values";
Eval(Parse("rows = main_dt << Get Rows Where( :" ||
G_TEMP_COL_STR || " == \!"" || Char(M_TEMP) || "\!" & :" ||
G_WAFER_COL_STR || " == " || Char(M_WAFER) || " );
values_list = main_dt:" || G_VALUE_COL_STR || "[rows];" ));
Re : 데이터를 필터링하고 동적 열 이름을 사용하는 적절하고 효율적인 방법은 무엇입니까?감사 tx ! 예, 50 회 이상 호출되며 웨이퍼, 온도 및 vcc 조합 수 (추가)에 따라 다릅니다. 위의 코드를 사용하여 동일한 성능을 얻었습니다. 사실 나는 또한 시도했다
main_dt:Eval(G_TEMP_COL_STR) == M_TEMP
그러나 여전히 눈에 띄게 느립니다.
:temperature = M_TEMP
속도를 늦추는 평가 문자열이어야한다고 생각합니다.
"게으른 / 느슨한"해결 방법을 수행했습니다.
Get Rows Where( :temperature == M_TEMP ...)
그리고 GUI에서 선택한 열의 이름을 온도에 맞게 변경했습니다.
As Column(dlg_ret[2]) << Set Name( "temperature" );
예상대로 빨리 작동하지만 열 이름의 이름이 바뀝니다.
Re : 데이터를 필터링하고 동적 열 이름을 사용하는 적절하고 효율적인 방법은 무엇입니까?에 의해 주어진 예 tx 또한 사용하여 단순화 할 수 있습니다 (IMO) EvalInsert 함수 : 캐럿 (^) 기호를 기반으로 변수를 대체 할 수 있습니다. 또한 표기법 \ [...] \ 이스케이프 시퀀스를 사용하지 않고도 따옴표를 사용할 수 있도록 따라서 궁극적으로 다음과 같이 쓸 수 있습니다.
Eval(Parse(EvalInsert("\[
rows = main_dt << Get Rows Where(
:^G_TEMP_COL_STR^ == "^M_TEMP^" &
:^G_WAFER_COL_STR^ == "^M_WAFER^"
);
]\")));
이 스타일의 코드는 열 대신
values_list = main_dt:Eval(G_VALUE_COL_STR)[rows]
그러나 왜 당신이 글을 쓸 수 없는지 모르겠습니다.
values_list = column(main_dt,G_VALUE_COL_STR)[rows];