[]
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], [@]))
아래 이미지는 집계 윈도우 함수를 사용하여 각 제품의 이동 평균 매출 및 매출 추세를 구하는 방법을 보여줍니다.
FRAMEGROUPS 함수는 현재 그룹을 기준으로 "그룹" 수에 따라 시작 및 종료 경계를 지정합니다. 여기서 “그룹”은 window ORDERBY에서 도출된 동일한 값을 가진 행 집합을 의미합니다.
파티션 경계를 벗어난 그룹 수는 시작/종료 그룹으로 대체되며, 이전/이후가 모두 –1로 지정된 경우 해당됩니다. 하지만 둘 다 범위를 벗어나면 아무 것도 반환되지 않습니다.
매개변수 | 허용 값 | 설명 |
---|---|---|
첫 번째 매개변수 현재 그룹을 기준으로 시작 그룹 수를 나타냅니다. | -1, [@-n], [@+n], 또는 [@] | -1: 파티션의 무제한(시작 또는 종료)을 나타냅니다. [@-n] 또는 [@+n]: 현재 그룹 옆의 그룹 수를 나타내며, ‘n’은 음수가 아닌 정수를 허용합니다. [@]: 현재 그룹의 위치를 나타냅니다. |
두 번째 매개변수 현재 그룹을 기준으로 종료 그룹 수를 나타냅니다. | -1, [@-n], [@+n] 또는 [@] |
참고: FRAMEGROUPS 함수에서 두 번째 매개변수가 생략되면 기본값은 [@]입니다.
구문
FRAMEGROUPS(BeginningExpression, [EndingExpression], [ExcludeMode])
인수
이 함수는 다음과 같은 인수를 가집니다:
인수 | 설명 |
---|---|
Beginning_Expression | [필수] 현재 그룹 이전의 그룹 수입니다. |
[Ending_Expression] | [선택] 현재 그룹 이후의 그룹 수입니다. |
예제
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(DATEPART([@OrderDate], "Q")), FRAMEGROUPS([@-1], [@]))
FRAMEGROUPS는 [@]의 동일 행을 찾기 위해 현재 행의 값을 가져올 열을 제공하는 ORDERBY가 필요합니다.
ORDERBY가 제거되면, FRAMEGROUPS가 지정되더라도 기본 프레임 표현식은 FRAMEGROUPS(-1, -1)입니다.
ORDERBY에 여러 열이 있는 경우, 현재 동일 행은 결합된 열 값에 따라 정의됩니다. 예를 들어, 연도, 분기, 월로 정렬하는 경우 현재 동일 행은 동일한 세 열로 식별됩니다.
프레임의 exclude 모드는 FRAME 표현식의 마지막 매개변수입니다. 선택적 매개변수이며 네 가지 유형이 있습니다.
"제외되는 행이 없음"을 의미하며 0으로 표시됩니다.
예제
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(DATEPART([@OrderDate], "Q")), FRAMEGROUPS([@-1], [@], 1))
다음 이미지는 집계 윈도우 함수를 EXCLUDE 모드와 함께 사용하여 제품별 월별 평균 매출, 근사 평균 매출, 매출 추세를 얻는 방법을 보여줍니다.
현재 행은 제외되지만, 현재 행의 다른 동일 행은 FRAMEGROUPS 및 FRAMERANGE에 남습니다. 1로 표시됩니다.
예제
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(DATEPART([@OrderDate], "Q")), FRAMEGROUPS([@-1], [@], 1))
다음 이미지는 집계 윈도우 함수를 EXCLUDE 모드와 함께 사용하여 제품별 월별 평균 매출, 근사 평균 매출, 매출 추세를 얻는 방법을 보여줍니다.
현재 행과 동일 행이 모두 제외되며, FRAMEROWS에서도 동일하게 적용됩니다. 2로 표시됩니다.
예제
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(DATEPART([@OrderDate], "Q")), FRAMEGROUPS([@-1], [@], 2))
다음 이미지는 집계 윈도우 함수를 EXCLUDE 모드와 함께 사용하여 제품별 월별 평균 매출, 근사 평균 매출, 매출 추세를 얻는 방법을 보여줍니다.
현재 행은 유지되지만, 동일 행은 제외됩니다. 3으로 표시됩니다.
예제
WINDOW(SUM([Sales]), PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(DATEPART([@OrderDate], "Q")), FRAMEGROUPS([@-1], [@], 3))
다음 이미지는 집계 윈도우 함수를 EXCLUDE 모드와 함께 사용하여 제품별 월별 평균 매출, 근사 평균 매출, 매출 추세를 얻는 방법을 보여줍니다.
Window Chaining을 사용하면 하나의 윈도우를 먼저 정의하고, 새로운 윈도우에서 PARTITIONBY, ORDERBY 또는 Window Frame을 암묵적으로 지정하여 재사용할 수 있습니다.
사전 정의된 윈도우에서는 PARTITIONBY, ORDERBY, Window Frame이 새로운 윈도우의 표현식에 의해 재정의됩니다.
예제
WINDOWDEF(PARTITIONBY([Product], YEAR([@OrderDate])), ORDERBY(DATEPART([@OrderDate], "Q")), FRAMEROWS([@-2], [@], 3))
다음 이미지는 윈도우 함수를 사용하여 제품별 매출의 평균/품질 및 매출 추세를 얻는 방법을 보여줍니다.