일부 연산의 경우 이벤트 시퀀스가 중요합니다.
애플리케이션을 통해 다음 레코드 시퀀스에 대한 작업을 할 수 있습니다.
- 시퀀스 및 시계열
- 시퀀스 함수
- 레코드 색인화
- 값 평균, 합계 및 비교
- 변화 모니터링-구별
@SINCE
- 오프셋 값
- 추가 시퀀스 기능
많은 애플리케이션의 경우, 스트림을 통과하는 각 레코드를 다른 모든 케이스와 독립된 개별 케이스로 간주할 수 있습니다. 이러한 상황에서는 일반적으로 레코드 순서가 중요하지 않습니다.
그러나 일부 문제점 클래스의 경우 레코드 시퀀스가 매우 중요합니다. 이는 일반적으로 레코드 시퀀스가 정렬된 이벤트 또는 발생 시퀀스를 나타내는 시계열 상황입니다. 각 레코드는 특정 순간의 스냅샷을 나타냅니다. 그러나 많은 양의 풍부한 정보가 순시값에 포함되지 않고 시간이 경과하면서 이러한 값이 변화하고 동작합니다.
물론 관련 모수가 시간이 아닌 다른 어떤 것일 수 있습니다. 예를 들어, 레코드가 선을 따라 거리를 두고 수행된 분석을 나타낼 수 있지만 동일한 원칙이 적용됩니다.
다음 특성을 통해 시퀀스 및 특수 함수를 즉시 인식할 수 있습니다.
- 모두
@
접두부가 붙습니다. - 해당 이름은 대문자로 제공됩니다.
시퀀스 함수는 노드가 현재 처리 중인 레코드, 노드를 이미 통과한 레코드, 한 케이스에선 아직 노드를 통과해야 하는 레코드를 참조할 수 있습니다. 일부는 인수로 사용할 수 있는 것에 대한 제한이 있지만 시퀀스 함수는 CLEM 표현식의 다른 구성요소와 자유롭게 혼합될 수 있습니다.
예
특정 이벤트가 발생했거나 조건이 참인 이후로 얼마나 경과했는지를 아는 것이 유용합니다. 이를 수행하려면 @SINCE
함수를 사용하십시오. 예를 들어, 다음과 같습니다.
@SINCE(Income > Outgoings)
이 함수는 이 조건이 참이었던 마지막 레코드의 오프셋을 리턴합니다. 즉, 조건이 참이었던 이 레코드 이전의 레코드 수를 리턴합니다. 조건이 참이었던 적이 없으면 @SINCE
가 @INDEX + 1
을 리턴합니다.
@SINCE
에서 사용하는 표현식에서 현재 레코드 값을 참조하려는 경우가 있습니다. 필드 이름이 항상 현재 레코드에 적용됨을 지정하는 @THIS
함수를 사용하여 이를 수행할 수 있습니다. 현재 레코드의 값보다 두 배가 넘는 Concentration
필드 값을 가진 마지막 레코드의 오프셋을 찾으려면 다음을 사용할 수 있습니다.
@SINCE(Concentration > 2 * @THIS(Concentration))
일부 경우 @SINCE
에 지정된 조건이 정의상 현재 레코드에도 적용됩니다. 예를 들어, 다음과 같습니다.
@SINCE(ID == @THIS(ID))
이러한 이유로 @SINCE
는 현재 레코드에 대한 조건을 평가하지 않습니다. 이전 레코드는 물론 현재 레코드에 대해서도 조건을 평가하려면 유사 함수인 @SINCE0
을 사용하십시오. 조건이 현재 레코드에서 참이면 @SINCE0
이 0
을 리턴합니다.
함수 | 결과 | 설명 |
---|---|---|
MEAN(FIELD) |
실수 | 지정된 FIELD 또는 FIELDS 값의 평균을 리턴합니다. |
@MEAN(FIELD, EXPR) |
실수 | 현재 레코드를 포함하여 현재 노드가 수신한 마지막 EXPR 레코드에 대한 FIELD 값의 평균을 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 평균이 리턴됩니다. |
@MEAN(FIELD, EXPR, INT) |
실수 | 현재 레코드를 포함하여 현재 노드가 수신한 마지막 EXPR 레코드에 대한 FIELD 값의 평균을 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 평균이 리턴됩니다. INT는 되돌아볼 값의 최대 수를 지정합니다. 이는 단지 두 개의 인수를 사용하는 것보다 훨씬 효율적입니다. |
@DIFF1(FIELD) |
실수 | FIELD의 첫 번째 미분을 리턴합니다. 따라서 단일 인수 양식은 필드의 현재 값과 이전 값 간의 차이만 리턴합니다. 관련된 이전 레코드가 없으면 $null$을 리턴합니다. |
@DIFF1(FIELD1, FIELD2) |
실수 | 이 2인수 양식은 FIELD2와 관련하여 FIELD1의 첫 번째 미분을 제공합니다. 관련된 이전 레코드가 없으면 $null$을 리턴합니다. @DIFF1(FIELD1)/@DIFF1(FIELD2) 로 계산됩니다. |
@DIFF2(FIELD) |
실수 | FIELD의 두 번째 미분을 리턴합니다. 따라서 단일 인수 양식은 필드의 현재 값과 이전 값 간의 차이만 리턴합니다. 관련된 이전 레코드가 없으면 $null$을 리턴합니다. @DIFF2 는 @DIFF(@DIFF(FIELD)) 로 계산됩니다. |
@DIFF2(FIELD1, FIELD2) |
실수 | 이 2인수 양식은 FIELD2와 관련하여 FIELD1의 두 번째 미분을 제공합니다. 관련된 이전 레코드가 없으면 $null$을 리턴합니다. 이는 복합적인 계산입니다. -- @DIFF1(FIELD1)/@DIFF1(FIELD2) -
@OFFSET(@DIFF1(FIELD1),1)/@OFFSET(@DIFF1(FIELD2))) / @DIFF1(FIELD2) . |
@INDEX |
정수 | 현재 레코드의 지수를 리턴합니다. 지수는 현재 노드에 도착하면 레코드에 할당됩니다. 첫 번째 레코드에는 지수 1이 부여되며 지수는 각각의 후속 레코드에 대해 1씩 증분됩니다. |
@LAST_NON_BLANK(FIELD) |
모두 | 업스트림 소스 또는 유형 노드에 정의된 대로 공백이 아닌 FIELD의 마지막 값을 리턴합니다. 지금까지 읽은 레코드에 공백이 아닌 FIELD 값이 없으면 $null$ 이 리턴됩니다. 사용자 결측값이라고도 하는 공백값을 각 필드에 대해 개별적으로 정의할 수 있습니다. |
@MAX(FIELD) |
숫자 | 지정된 FIELD의 최대값을 리턴합니다. |
@MAX(FIELD, EXPR) |
숫자 | 현재 레코드를 포함하여 지금까지 수신된 마지막 EXPR 레코드에 대한 FIELD 최대값을 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. |
@MAX(FIELD, EXPR, INT) |
숫자 | 현재 레코드를 포함하여 지금까지 수신된 마지막 EXPR 레코드에 대한 FIELD 최대값을 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 최댓값이 리턴됩니다. INT는 되돌아볼 값의 최대 수를 지정합니다. 이는 단지 두 개의 인수를 사용하는 것보다 훨씬 효율적입니다. |
@MIN(FIELD) |
숫자 | 지정된 FIELD의 최소값을 리턴합니다. |
@MIN(FIELD, EXPR) |
숫자 | 현재 레코드를 포함하여 지금까지 수신된 마지막 EXPR 레코드에 대한 FIELD 최소값을 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. |
@MIN(FIELD, EXPR, INT) |
숫자 | 현재 레코드를 포함하여 지금까지 수신된 마지막 EXPR 레코드에 대한 FIELD 최소값을 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 최솟값이 리턴됩니다. INT는 되돌아볼 값의 최대 수를 지정합니다. 이는 단지 두 개의 인수를 사용하는 것보다 훨씬 효율적입니다. |
@OFFSET(FIELD, EXPR) |
모두 | EXPR 값으로 현재 레코드의 레코드 오프셋에 있는 FIELD 값을 리턴합니다. 양수 오프셋은 이미 전달한("되돌아보기") 레코드를 참조하는 반면, 음수 오프셋은 도착해야 하는 레코드에 "미리보기"를 지정합니다. 예를 들어, @OFFSET(Status, 1) 은 이전 레코드의 Status 필드 값을 리턴하는 반면, @OFFSET(Status, –4) 는 값을 획득하기 위해 시퀀스에서 4개의 레코드(즉, 아직 이 노드를 통과하지 못한 레코드)를 "미리봅니다". 음수(미리보기) 오프셋을 상수로 지정해야 합니다. 양수 오프셋의 경우에만 EXPR은 오프셋을 제공하기 위해 현재 레코드에 대해 평가되는 임의의 CLEM 표현식이기도 합니다. 이 경우, 이 함수의 3인수 버전은 성능을 향상시켜야 합니다(다음 함수 참조). 표현식이 음수가 아닌 정수 이외의 것을 리턴하는 경우 이로 인해 오류가 발생합니다. 즉, 계산된 미리보기 오프셋을 갖는 것이 올바르지 않습니다. 자체 참조 @OFFSET 함수는 리터럴 미리보기를 사용할 수 없습니다. 예를 들어, 채움 노드에서 @OFFSET(field1,-2) 와 같은 표현식을 사용하여 field1 의 값을 대체할 수 없습니다. 채움 노드에서 필드를 채울 때 유효한 두 개의 다른 해당 필드 값 즉, 사전에 채워진 값과 사후 채워진 값이 있습니다. @OFFSET 이 자체를 참조할 때는 사후 채원진 값을 참조합니다. 사후 채워진 이 값은 과거 행에 대해서만 존재하므로 자기 참조 @OFFSET 은 과거 행만 참조할 수 있습니다. 자체 참조 @OFFSET 는 미래를 참조할 수 없으므로 오프셋의 다음 검사를 수행합니다.
|
@OFFSET(FIELD, EXPR, INT) |
모두 | 참조할 최대 값 수를 지정하는 세 번째 인수 INT를 추가하여 @OFFSET 함수와 동일한 조작을 수행합니다. 오프셋이 표현식에서 계산되는 경우 이 세 번째 인수는 성능을 향상시켜야 합니다. 예를 들어, @OFFSET(Foo, Month, 12) 와 같은 표현식에서 시스템은 Foo 의 마지막 12개 값만 유지하도록 알고 있습니다. 그렇지 않으면 만약을 위해 모든 값을 저장해야 합니다. 오프셋 값이 음수의 "미리보기" 오프셋(상수여야 함)을 포함하여 상수인 경우 세 번째 인수는 무의미하며 이 함수의 2인수 버전을 사용해야 합니다. 앞서 설명한 2인수 버전의 자기 참조 함수에 대한 참고도 참조하십시오. 한 노드 내에서 "미리보기" 및 "되돌아보기" 를 둘 다 사용하는 것은 지원되지 않습니다. |
@SDEV(FIELD) |
실수 | 지정된 FIELD 또는 FIELDS 값의 표준 편차를 리턴합니다. |
@SDEV(FIELD, EXPR) |
실수 | 현재 레코드를 포함하여 현재 노드가 수신한 마지막 EXPR 레코드에 대한 FIELD 값의 표준 편차를 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 표준 편차가 리턴됩니다. |
@SDEV(FIELD, EXPR, INT) |
실수 | 현재 레코드를 포함하여 현재 노드가 수신한 마지막 EXPR 레코드에 대한 FIELD 값의 표준 편차를 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 표준 편차가 리턴됩니다. INT는 되돌아볼 값의 최대 수를 지정합니다. 이는 단지 두 개의 인수를 사용하는 것보다 훨씬 효율적입니다. |
@SINCE(EXPR) |
모두 | 임의의 CLEM 표현식인 EXPR이 참인 이후로 전달한 레코드 수를 리턴합니다. |
@SINCE(EXPR, INT) |
모두 | 두 번째 인수인 INT를 추가하면 되돌아볼 레코드의 최대 수를 지정합니다. EXPR이 참이었던 적이 없으면 INT는 @INDEX+1 입니다. |
@SINCE0(EXPR) |
모두 | 현재 레코드를 고려하는 반면, @SINCE 는 그렇지 않습니다. @SINCE0 는 현재 레코드에 대해 EXPR 이 true인 경우 0을 리턴합니다. |
@SINCE0(EXPR, INT) |
모두 | 두 번째 인수인 INT를 추가하면 되돌아볼 레코드의 최대 수를 지정합니다. |
@SUM(FIELD) |
숫자 | 지정된 FIELD 또는 FIELDS 값의 합계를 리턴합니다. |
@SUM(FIELD, EXPR) |
숫자 | 현재 레코드를 포함하여 현재 노드가 수신한 마지막 EXPR 레코드에 대한 FIELD 값의 합계를 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 합계가 리턴됩니다. |
@SUM(FIELD, EXPR, INT) |
숫자 | 현재 레코드를 포함하여 현재 노드가 수신한 마지막 EXPR 레코드에 대한 FIELD 값의 합계를 리턴합니다. FIELD는 숫자 필드의 이름이어야 합니다. EXPR은 0보다 큰 정수로 평가되는 표현식입니다. EXPR이 생략되었거나 지금까지 수신된 레코드 수를 초과하는 경우 지금까지 수신된 모든 레코드에 대한 합계가 리턴됩니다. INT는 되돌아볼 값의 최대 수를 지정합니다. 이는 단지 두 개의 인수를 사용하는 것보다 훨씬 효율적입니다. |
@THIS(FIELD) |
모두 | 현재 레코드에서 FIELD 필드의 값을 리턴합니다. @SINCE 표현식에서만 사용합니다. |