brunch

You can make anything
by writing

C.S.Lewis

by Cheon Jan 25. 2017

[테이블 계산] WINDOW( ) 함수

Primary 함수는 Primary 함수 내에 다른 함수가 포함된다.


예: WINDOW_AVG(SUM([Sales]))



Primary 함수

TOTAL( )

PREVIOUS_VALUE( )

LOOKUP( )

RUNNING( )

WINDOW( )





1. WINDOW( )는 무엇인가?




'WINDOW( ) 함수'는 WINDOW_AVG, WINDOW_SUM 등 여러개가 있지만 WINDOW_AVG에 대해 설명할 것이다.


'WINDOW_AVG(식, [시작, 끝])’는 창(WINDOW) 내 식의 평균을 반환한다. 창은 현재 행의 오프셋으로 정의되는데, [시작, 끝]을 '-1, 1’ 이런식으로 쓰거나, 파티션의 첫 번째 또는 마지막 행의 오프셋에 대해 

FIRST( )+n, 또는 LAST( )-n을 사용한다. 만약, [시작, 끝]을 생략하면 전체 파티션이 사용된다.



예를 들어보자.



WINDOW_AVG(SUM([Sales]), 0,0)


◆ 계산된 필드에서, 아래와 같이 수식을 작성하자.




위 수식(‘window_avg[0,0]’)을 위와 같은 테이블로 만들어보자. 각 State의 Sales의 값과 위 수식을 사용한 값이 같다. 즉, 위 수식의 뜻은 0에서부터 0까지의 각 SUM(Sales)의 평균을 구하라는 것인데, 여기서 ‘0’은 현재 행이라는 뜻이어서, 범위가 현재 행 자체가 된다. 즉, 현재 행의 SUM(Sales)의 평균은, 값이 하나밖에 없기 때문에(범위가 0에서 0까지이기 때문에) 그 값 자체가 된다. 그래서 Sales의 값과 같게 나온다.






WINDOW_AVG(SUM([Sales]), -2, 1)


◆ 계산된 필드에서, 아래와 같이 수식을 작성하자.



위 수식(‘window_avg[-2,1]’)을 위와 같은 테이블로 만들어보자. 위 수식의 뜻은 현재 행(‘0’)을 기준으로 그 두 전의 행(‘-2’)에서부터 그 다음행(‘1’)까지의 모든 SUM(Sales)의 평균을 구하라는 것이다. 즉, -2(그 두 전의 행), -1(그 전의 행), 0(현재행), 그리고 1(다음행)의 행을 말한다. 


예를 들어, 첫번째 행의 경우 Sales의 값이 ‘$19,511’이다. 이 행을 기준으로 그 두 전의 행에서부터 그 다음행까지의 모든 SUM(Sales)의 평균값은 ’27,396’이다. 왜냐하면, 첫번째 행의 경우, 그 두 전의 행은 존재하지 않기 때문에 현재 행(’19,511’)과 그 다음행(’35,282’)의 SUM(Sales)의 평균값을 구하기 때문이다. 






WINDOW_AVG(SUM([Sales]), FIRST( ), LAST( ))

(= WINDOW_AVG(SUM([Sales])))


◆ 계산된 필드에서, 아래와 같이 수식을 작성하자.



위 수식(‘window_avg[FIRST( ), LAST( )]’)을 위와 같은 테이블로 만들어보자. 위 수식의 결과 값은 모두 똑같이 ’46,882’이다. 왜냐하면 위 수식의 뜻은 첫번째 행부터 마지막 행까지의 모든 SUM(Sales)의 평균을 구하라는 것이기 때문이다. 즉, 행의 값에 상관없이, FIRST( )가 첫번째 행을 의미하고,  LAST( )가 마지막 행을 의미하기 때문에 모든 행의 값은 똑같이 나온다. 

그리고, 위 수식은 범위가 생략된, WINDOW_AVG(SUM([Sales]))와 같은 뜻이다.






WINDOW_AVG(SUM([Sales]), FIRST( ) +2, LAST( )-1)

     (FIRST( ) +n 또는 LAST( )-n, 이런식으로 사용하자!)


  

◆ 계산된 필드에서, 아래와 같이 수식을 작성하자.



위 수식(‘window_avg[FIRST( )+2, LAST( )-1]’)을 위와 같은 테이블로 만들어보자. 위 수식의 결과 값은 모두 똑같이 ’48,713’이다. 왜냐하면 위 수식의 뜻은 첫번째 행의 다음 두 행에서부터('FIRST( )+2') 마지막 행의 그 전의 행(‘LAST( )-1’)까지의 모든 SUM(Sales)의 평균을 구하라는 것이기 때문이다. 

이와 같이, 'FIRST( )+n' 또는 'LAST( )-n’ 이런식으로 사용하면 된다.







2. WINDOW( )는 언제 사용할 수 있을까?




Q: 2014년도의 3분기 수익(Profit)이 2014년도 모든 분기의 수익의 평균과의 차이를 알아보자.



◆ ‘Order Date’를 열에 드래그하고, ‘분기’까지 확장하자.

◆ ‘Profit’을 행으로 드래그하자.

◆ 마크에서 ‘막대’로 바꾸자.



◆ 계산된 필드에서 아래와 같이 수식을 작성하자.



◆ 위 수식(‘모든 분기의 수익의 평균과의 차이’)을 행으로 드래그하자.



그러면 다음과 같은 그래프가 나온다.



◆ 행에 있는 위 수식(‘모든 분기의 수익의 평균과의 차이’)을 클릭하고, ‘계산 도구 - 패널(옆으로)’를 클릭하자.


이와 같이 한 이유는, 계산된 필드에서 작성한 범위('FIRST( )', 'LAST( )’)를 테이블이 아닌, 패널로 바꾸기 위해서다. 왜냐하면 테이블(옆으로)은 모든 연도를 포함하지만, 우리가 구하고자 하는 것은 각 연도의 모든 분기의 평균을 구해야 하기 때문에 패널(옆으로)로 범위를 정한 것이다. 


즉, 계산된 필드에서 작성한 범위('FIRST( )', 'LAST( )’)가 패널이 되고, 여기서 패널은 각각의 연도를 의미한다. 그러면 위에서 작성한 계산된 필드에 의해, 각 분기의 수익(Profit)에서 각 연도의 모든 분기의 수익(Profit)의 평균값을 뺀 값을 구하게 된다.



이 부분이 조금 헷갈린다면, 테이블의 값들이 계산되는 방식에 대해 이해해보자!



◆ 위 수식(‘모든 분기의 수익의 평균과의 차이’)을 레이블에 드래그하자.



◆ 'Order Date'를 색상으로 드래그하자.



그러면 다음과 같은 그래프가 나온다.


이 그래프를 통해, 2014년도의 3분기 수익(Profit)이 2014년도 모든 분기의 수익의 평균과의 차이가 ‘-1,046’이라는 것을 알 수 있다.

매거진의 이전글 [데이터 연결] 분할 & 사용자 지정 분할이란 무엇인가
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari