목표: 빈 값이 있는 열의 행 수를 계산합니다.
방법 1(작동):
dt = CurrentDataTable();
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
방법 2(작동):
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE></CODE></PRE><P> </P><P><U>방법 3(작동하지 않음):</U></P><PRE><CODE class=" language-jsl">Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
방법 3에 대해 디버거에서 반환된 오류는 다음과 같습니다. "인수는 'Is Missing' , Is Missing/*###*/(Column( dt, "ColName" )) 액세스 또는 평가에서 숫자{1}여야 합니다."
따라서 dt:ColName으로 열을 참조하는 것이 dt:Name("ColName")과 동일하다는 것은 이해하기 쉽지만 Column(dt, "ColName")이 다르게 수행되는 이유에 대해서는 혼란스럽습니다.
또한 다음을 수행하는 경우:
ref1 = dt:ColName;
ref2 = dt:Name("ColName");
ref3 = Column(dt, "ColName");그런 다음 단일 숫자 값(열의 첫 번째 값에 해당)을 보유하는 ref1 및 ref2를 얻는 반면 ref3은 적절한 Column 개체에 대한 참조입니다(세 가지 선언이 모두 달성될 것으로 예상했으므로).
ref1 및 ref2 결과는 나에게 특히 이상해 보입니다. 위의 방법 #1 및 #2는 열에서 올바른 수의 빈 셀을 반환했기 때문에 이러한 참조 구현에서 분명히 첫 번째 값을 보는 것이 아닙니다. 열.dt:ColName이 변수로 설정될 때 dt:ColName 전체를 사용하는 것이 허용되지 않고 대신 변수를 dt:ColName[1]로 설정하도록 선택하는 것 같습니다.
왜 이런 행동을 합니까?내가 사용할 때 ref = dt:콜 이름 에 의해 생성된 동일한 열 참조를 반환할 것으로 예상합니다. ref = 열(dt, "콜명") 또는 표시되는 순서대로 열의 내용에 해당하는 값으로 가득 찬 행렬/목록일 수 있습니다.
본질적으로 내 질문은 (1) 왜 다르게 동작합니까, (2) dt:ColName을 사용해야 할 때와 Column(dt, "ColName")을 사용해야 할 때를 쉽게 식별할 수 있는 방법이 있습니까? 그리고 (3) 왜 ref1 = dt:CFU 열 자체에 대한 참조 또는 열의 모든 값에 해당하는 완전히 채워진 행렬/목록 대신 열의 첫 번째 값에 대한 참조를 반환합니까?
감사해요!
[]가 필요한 이유는 Get Rows Where가 현재 행에 의존하기 때문입니다. Column("X")[]을 사용하면 "X" 열의 현재 행을 참조하고 Column("X")[Row()]와 동일합니다.
처럼 @pmroz 즉, AsColumn("X")은 현재 행의 열에 대한 참조를 반환하기 때문에 작동합니다.
Get Rows Where 및 Select Where와 같은 메시지는 For Each Row 루프 및 열 수식 외에도 현재 행에 따라 달라집니다.
그것은 또한 함께 작동합니다 열로 :
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
업데이트: 다음을 사용하는 경우 방법 #3이 작동한다는 것을 방금 깨달았습니다.
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
여전히 나에게 이상한 행동처럼 느껴집니다. 만약에 ref = 열(dt, "콜명") 열 참조를 반환하는데 여기에 []가 필요한 이유는 무엇입니까?
나는 그 반대를 기대할 것입니다. ref = dt:콜 이름 열의 첫 번째 값만 반환하므로 []를 사용해야 합니다. GetRowsWhere(IsMissing(dt:ColName[])) Column(dt, "ColName")은 이미 전체 열을 반환하므로 []가 필요한 이유는 무엇입니까?