안녕하세요 여러분,
두 행 사이의 날짜 차이를 확인하는 열 수식을 작성하려고 하는데 특정 값(이 경우 4일)보다 큰 경우 열에서 단계 값을 줄여야 합니다. 날짜 차이가 <4이면 이전 단계 값을 유지해야 합니다. 공식에 두 개의 지역 변수인 Phase와 MinDaysbreak를 정의했는데, 이는 단계(4) 사이의 최소 일수입니다. :"Date/Time:"n 열은 For() 루프가 반복되는 날짜 열입니다.

내 수식은 다음과 같습니다.

수식의 JSL 코드는 다음과 같습니다.
For( i = N Rows(), i >= 1, i--,
If( i == N Rows(),
phase,
If( Abs( Date Difference( :"Date/Time:"n[i + 1], :"Date/Time:"n, "Day" ) ) >= MinDaysbreak,
phase--,
phase
)
)
)
수식에 대한 오류가 발생하지 않고 수식이 표시되지 않지만 열은 여전히 비어 있습니다. 첫 번째 If()에서 첫 번째 else 문을 제거하더라도 마지막 행에 대해서는 아무것도 얻지 못합니다. 열의 마지막 항목은 로컬 변수 단계이므로 9여야 합니다. 9단계로 구성되어 있는 것으로 알고 있습니다.
내가 무엇을 잘못하고 있는지 잘 모르겠지만, 내가 간과하고 있는 단순한 실수라면 놀라지 않을 것입니다.
도움을 주셔서 감사합니다!
DS
For() 함수가 값을 반환하지 않기 때문에 열이 비어 있습니다. 이 코드를 수식 편집기에 붙여넣어 보세요.
Local({i = N Rows(), phase = 9, MinDaysbreak = 4},
For(i, i >= Row(), i--,
If(i == N Rows(),
phase,
If(Abs(Date Difference(:"Date/Time:"n[i + 1], :"Date/Time:"n[i], "Day")) >= MinDaysbreak,
phase--,
phase
)
)
);
phase;
)뜻대로 될 것 같아요. 다음 변경 사항에 유의하세요.
– 현재 행의 값을 설정하는 추가 단계 (For 루프 내에서 계산된 후). 이것이 없으면 빈 열이 생성됩니다.
– 올바르게 작동하려면 모든 행을 반복해서는 안 되며 Row() 를 사용하여 현재 행까지만 반복해야 합니다. 그렇지 않으면 모든 행에 대해 동일한 값을 얻게 됩니다.
– 항상 다음 행과 비교하려면 두 날짜 모두에 대한 색인이 필요합니다. 그렇지 않으면 결과를 예측하기가 어렵습니다(데이터에 따라 다름).
또한 초기 i를 로컬 매개변수로 정의했지만 꼭 필요한 것은 아니라고 생각합니다.
그러나 열 수식에 for 루프를 사용하는 것은 매우 이례적입니다. 큰 데이터 세트가 있는 경우 모든 행에 대한 값을 설정하기 위해 테이블을 반복하는 것은 매우 비효율적일 수 있습니다. 열 수식이나 JSL을 사용하여 이 문제를 해결하는 다른 방법이 있습니다.
/ms