[]
WINDOW 함수는 테이블 시트에서 데이터 분석을 위한 다양한 기능을 제공합니다. 이 함수들은 현재 행과 관련된 테이블 행 집합(윈도우)을 기준으로 계산을 수행하며, 결과를 표시하는 열을 생성합니다. 함수가 평가되는 대상이 되는 행을 현재 행(current row)이라고 합니다.
윈도우 함수는 집계 함수, 순위 함수, 분석 함수를 특정 윈도우에 대해 실행하며, 각 행에 대한 결과를 생성합니다.
참고:
윈도우 함수의 결과는 테이블 시트의 행 순서에 영향을 줄 수 있습니다.
테이블 시트가 정렬 또는 그룹화된 상태라면, 결과는 고정됩니다.
테이블 시트의 계층적 데이터에 트리 구조가 포함되어 있는 경우, 윈도우 함수는 효과가 없습니다.
윈도우 함수는 필터보다 먼저 평가되며, 필터는 이후 특정 행에만 적용됩니다.
WINDOW
는 윈도우 함수 전용으로만 사용할 수 있으며, 기본적으로 전체 행을 윈도우로 간주합니다.
구문
WINDOW(window_function, [partitionby_function], [orderby_function], [frame_function])
인수 (Arguments)
함수의 인수는 아래와 같습니다:
인수명 | 설명 |
---|---|
window_function | [필수] 윈도우 함수입니다. |
[partitionby_function] | [선택] 행을 파티션으로 나눕니다. |
[orderby_function] | [선택] 각 파티션 내 행의 논리적 순서를 정의합니다. |
[frame_function] | [선택] 현재 행을 기준으로 윈도우 내에서 시작 및 종료 지점을 지정합니다. |
WINDOW
함수는 윈도우 함수가 적용되기 전에 파티셔닝, 정렬, 윈도우 범위를 결정합니다.
PARTITIONBY
및 ORDERBY
를 사용하면 전체 행 순서가 재정렬되며, 뷰(view) 내에 여러 WINDOW
함수가 있는 경우, 모든 WINDOW
함수는 동일한 PARTITIONBY
및 ORDERBY
를 가져야 합니다.
그렇지 않으면 마지막으로 적용된 WINDOW
함수의 순서가 전체 뷰에 적용됩니다.
예시
WINDOW(ROWNUMBER(), PARTITIONBY([country]))
사용 가능한 모든 윈도우 함수에 대한 자세한 내용은 윈도우 함수 목록 섹션을 참조하기기 바랍니다.
PARTITIONBY
함수는 행을 오름차순으로 나눈 뒤, 각 파티션에 대해 윈도우 함수를 별도로 적용합니다. 지정하지 않으면 전체 행이 하나의 윈도우로 간주됩니다.
하나 이상의 필드 이름 또는 수식을 인수로 사용할 수 있습니다.
구문
PARTITIONBY(field_function [, field_function [, ... ] ])
인수 (Arguments)
함수의 인수는 아래와 같습니다:
인수명 | 설명 |
---|---|
field_function | [필수] 파티셔닝할 필드 이름 또는 수식입니다. |
예시
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])))
ORDERBY
는 각 파티션 내 행의 논리적 순서를 정의합니다. 지정된 순서는 윈도우 정의 및 윈도우 함수의 계산 방식에 영향을 줍니다.
하나 이상의 필드 이름 또는 수식을 인수로 사용할 수 있습니다.
구문
ORDERBY(field_function [, field_function [, ... ] ])
인수 (Arguments)
함수의 인수는 아래와 같습니다:
인수명 | 설명 |
---|---|
field_function | [필수] 정렬할 필드 이름 또는 수식입니다. |
ORDERASC
또는 ORDERDESC
를 사용하여 오름차순 또는 내림차순 정렬을 지정할 수 있습니다. 기본 정렬 순서는 ORDERASC
이며, NULL
값은 가장 낮은 값으로 처리됩니다.
참고:
ORDERBY
가 지정되지 않으면, 윈도우 함수는 기본적으로FRAMERANGE(-1, -1)
을 사용합니다.
ORDERBY
만 지정하고FRAMEROWS
나FRAMERANGE
가 지정되지 않은 경우, 기본 윈도우 범위는FRAMERANGE(-1, [@])
가 됩니다.
구문
ORDERASC(field function)
ORDERDESC(field function)
예시
WINDOW(SUM([Sales]), ORDERBY([Product], ORDERDESC(QUARTER([@OrderDate]))))
FRAME
은 현재 행을 기준으로 파티션 내 윈도우 범위를 제한합니다. 시작 및 종료, 현재 행 등을 기반으로 윈도우를 구성하며, FRAMEROWS
또는 FRAMERANGE
로 정의할 수 있습니다.
FRAMEROWS
는 현재 행을 기준으로 앞뒤 고정된 행 수를 지정하여 윈도우 범위를 설정합니다. 범위를 벗어난 값은 파티션의 처음 또는 끝 행을 사용하며, 앞뒤 모두 범위를 벗어난 경우에는 빈 윈도우가 반환됩니다.
매개변수 | 허용 값 | 설명 |
---|---|---|
첫 번째 매개변수 현재 행 이전의 행 수. | -1, [@-n] or [@] | -1: 현재 파티션의 경계를 나타냅니다. n: 행 수를 나타내는 0 이상의 정수를 허용합니다. [@]: 현재 행의 위치를 나타냅니다. |
두 번째 매개변수 현재 행 이수의 행 수. | -1, [@+n] or [@ |
참고:
FRAMEROWS
함수에서 두 번째 매개변수가 생략되면 기본값은[@]
입니다.
구문
FRAMEROWS(preceding_function [, following_function ])
인수 (Arguments)
함수의 인수는 아래와 같습니다:
인수명 | 설명 |
---|---|
preceding_function | [필수] 현재 행 이전의 행 수입니다. |
[following_function] | [선택] 현재 행 이후의 행 수입니다. |
예시
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(QUARTER([@OrderDate])), FRAMEROWS([@-1], [@]))
FRAMERANGE
는 현재 행과 ORDERBY
열에서 동일한 값을 가진 피어(peer) 행들을 기준으로 거리(비교 범위)를 지정하여 윈도우 범위를 제한합니다.
FRAMERANGE
함수는 두 개의 주요 매개변수를 가지며, 각각 현재 행의 피어 행 이전과 이후 거리를 나타냅니다.
Parameter | Accepted Value | Description |
---|---|---|
첫 번째 매개변수 현재 행과 동일한 값을 가진 피어(peer) 행들 이전의 거리를 나타냄 |
| - - - |
두 번째 매개변수 현재 행과 동일한 값을 가진 피어(peer) 행들 이후의 거리를 나타냄 |
|
프레임 범위는 양쪽이 포함된 닫힌 구간입니다. ORDERBY
에는 첫 번째 열이 숫자형 데이터 타입이어야 합니다. 하지만 정렬 기준 열이 2개 이상일 경우, FRAMERANGE
에서는 -1
과 [@]
만 사용 가능합니다.
FRAMERANGE
는 현재 행의 값을 기준으로 피어 행을 찾기 위해, ORDERBY
에 숫자형 열 하나만 지정되어야 합니다.
ORDERBY
가 없으면, FRAMERANGE
가 지정되었더라도 기본 프레임 식은 FRAMERANGE(-1, -1)
입니다.
ORDERBY
에 2개 이상의 열이 포함된 경우, FRAMERANGE
에서는 -1
과 [@]
만 사용할 수 있으며 [@-n]
또는 [@+n]
은 자동으로 -1
로 처리됩니다. 이 경우 피어 행은 결합된 열 값으로 정의될 수 있습니다.
정렬된 열에 NULL
값이 포함된 경우, NULL
값을 가진 행들은 파티션 내 맨 위 또는 맨 아래에 나란히 배치됩니다.
현재 피어 행의 값이 NULL
인 경우, [@+/-n]
은 [@+/-0]
과 동일하게 처리되어 [@]
와 같습니다.
현재 피어 행의 값이 NULL
이 아닌 경우, [@+/-n]
검색은 NULL
값을 가진 행 이전까지로 제한됩니다.
구문
FRAMERANGE(preceding_function [, following_function ])
인수 (Arguments)
함수의 인수는 아래와 같습니다:
인수명 | 설명 |
---|---|
preceding_function | [필수] 현재 행 이전의 거리입니다. |
[following_function] | [선택] 현재 행 이후의 거리입니다. |
예시
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(QUARTER([@OrderDate])), FRAMERANGE([@-1], [@]))
아래 이미지는 집계 윈도우 함수를 사용하여 각 제품의 이동 평균 매출 및 매출 추세를 구하는 방법을 보여줍니다.