지정된 행의 열 업데이트<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요,
"각 행에 대해" 및 "데이터 업데이트 시작" 스크립트 명령을 사용하여 열과 관련된 특정 행의 계산을 업데이트하려고 합니다.
아래 표에 따르면 불량률(%)과 수율이라는 두 개의 추가 열을 사용하려고 하며 둘 다 동일한 셀 수량/일 합계 방정식을 사용합니다.
그러나 불량률(%) 열은 Category = Reject & MRB인 행만 계산하고, Yield 열은 Category=Binned인 행만 계산합니다.
다음과 같은 IF 명령을 사용하여 이 작업을 수행할 수 있습니다.
dt=현재 데이터 테이블();
dt<< New Column("불량률(%)", 숫자, "연속", Formula(Name Expr(If(:Category == "Reject", "MRB" ,:Cell Qty/:Daily Total)))) ;
그러나 동일한 결과를 얻기 위해 Begin Data Update와 결합된 For Each 행을 사용하는 방법을 배우려고 노력합니다.
dt<< New Column("수익률", 숫자, "연속");
<< 데이터 업데이트 시작;
각 행에 대해( :Yield_ = Selected(Row State())=Contains(:Category,"Binned"), :Cell Qty/:Daily Total)
누구든지 도와줄 수 있나요?
감사해요,
범주 | 일주 노동 시간 | 날짜_PROD. | 셀 수량 | 일일 합계 | 불량률(%) | 생산하다 |
| 거부하다 | 25 | 2016-06-20 | 751 | 15553 | | |
| MRB | 25 | 2016-06-20 | 21 | 15553 | 0.00135022 | |
| 비닝됨 | 25 | 2016-06-20 | 14781 | 15553 | 0.95036327 | 0.95036327 |
| 거부하다 | 25 | 2016-06-21 | 1251 | 31586 | | |
| MRB | 25 | 2016-06-21 | 83 | 31586 | 0.00262775 | |
| 비닝됨 | 25 | 2016-06-21 | 30252 | 31586 | 0.9577661 | 0.9577661 |
| 거부하다 | 25 | 2016-06-22 | 1276 | 27964 | | |
| MRB | 25 | 2016-06-22 | 42 | 27964 | 0.00150193 | |
| 비닝됨 | 25 | 2016-06-22 | 26646 | 27964 | 0.95286797 | 0.95286797 |
| 거부하다 | 25 | 2016-06-23 | 126 | 1786년 | | |
| MRB | 25 | 2016-06-23 | 5 | 1786년 | 0.00279955 | |
| 비닝됨 | 25 | 2016-06-23 | 1655년 | 1786년 | 0.92665174 | 0.92665174 |
Re: 지정된 행의 열 업데이트안녕하세요 bernie426님,
내 개인적인 경험에 따르면 IF 명령은 작업을 매우 빠르게 완료하고 예 또는 아니요 상황만 처리하기 때문에 즉각적인 결과를 반환합니다. 반면, 루핑 명령은 반복을 처리해야 하고 프로그래머가 정의한 마지막 반복에 도달할 때까지 계속 작동하기 때문에 루핑을 통해 결과가 완전히 생성되기 전에 약간의 지연이 눈에 띄게 나타납니다.
이러한 설명은 상당히 많은 양의 행과 열이 포함된 초대형 데이터 세트를 처리하는 경우에만 적용됩니다. 따라서 IF 명령은 시간 소모 측면에서 루프 명령보다 더 우수한 옵션이 됩니다. 그러나 더 작은 데이터 세트의 경우 결과가 채워지는 데 걸리는 시간 지연이 미미하므로 명령 중 하나를 사용하는 것이 안전합니다.
친애하는,
발
Re: 지정된 행의 열 업데이트안녕 발,
제안된 솔루션에 감사드립니다. 둘 다 잘 작동합니다.
실제로 저는 다음과 같은 IF 명령을 사용하여 또 다른 수식 접근 방식을 생각해 냈습니다.
dt=현재 데이터 테이블();
dt<< New Column("불량률(%)", 숫자, "연속", Formula(Name Expr(If((contains(:Category, "MRB")| contain(:Category, "Reject")),: 셀 수량/:일일 합계))));
dt<< New Column("수율", 숫자, "연속", Formula(Name Expr(If(:Category == "Binned",:Cell Qty/:Daily Total))));
IF 명령과 루핑 명령을 사용할 때의 속도 차이가 무엇인지 아십니까?
많은 감사드립니다,
Re: 지정된 행의 열 업데이트안녕,
귀하의 질문에서 예상되는 결과를 토대로 볼 때 '에 대한 공식에 약간의 실수가 있는 것 같습니다. 불량률(%) "카테고리" 열의 "거부된" 행만 무시하려는 경우 " 열입니다.
나는 For Each row 또는 이전에 데이터 업데이트를 시작하므로 해당 명령을 사용하여 현재 코드를 수정하는 방법을 잘 모르겠습니다. 하지만 동일한 결과를 얻을 수 있는 방법에 대한 두 가지 대체 접근 방식이 있습니다.
1) IF 명령 사용(더 빠른 접근 방식):
dt=현재 데이터 테이블();
a = (dt<< New Column("DR", "Continuous", Formula(If(:Category == "Reject", "", Char(:Cell Qty / :Daily Total)))))<< 값 가져오기 ;
dt << New Column("불량률(%)", "연속", 설정값(a));
b = (dt<< New Column("Y", "Continuous", Formula(If(:Category == "Binned", Char(:Cell Qty / :Daily Total), ""))))<< 값 가져오기 ;
dt << New Column("수익률", "연속", 값 설정(b));
dt<
일부 열은 빈 열("")로 반환되기 때문에 열을 생성할 때 이미 숫자로 정의했더라도 생성된 열은 자동으로 문자 열로 설정됩니다. 따라서 계산 목적을 제공하기 위해 추가 더미 열을 만들고 이러한 값을 새 열(" 불량률(%) " 및 " Yield")를 생성하려고 합니다. 이런 식으로 숫자 열을 얻게 됩니다.
2) 행 가져오기 where() 및 FOR 루프 사용:
dt=현재 데이터 테이블();
dt << New Column("불량률(%)", "연속", 숫자);
r1 = dt << 행 가져오기 where(:Category!="Reject");
(i=1, i<=nrows(r1), i++,
Column(dt, "불량률(%)")[r1 ] = :셀 수량[r1 ] / :일일 합계[r1 ]
);
dt << New Column("수익률", "연속", 숫자);
r2 = dt << 행 가져오기 where(:Category=="Binned");
(i=1, i<=nrows(r2), i++,
열(dt, "수율")[r2 ] = :셀 수량[r2 ] / :일일 합계[r2 ]
);
루핑에는 처리 시간이 더 오래 걸리기 때문에 데이터 세트가 클 경우 이 접근 방식이 더 느려질 것이라고 생각합니다.
최종 출력:

도움이 되었기를 바랍니다!
친애하는,
발