Primary 함수 중
Primary 함수는 Primary 함수 내에 다른 함수가 포함된다.
예: PREVIOUS_VALUE(SUM(Sales))
Primary 함수
PREVIOUS_VALUE( )
1. PREVIOUS_VALUE( )는 무엇인가?
‘PREVIOUS_VALUE( )’ 는 파티션(계산할 범위/그룹)의 첫번째 행에 대해서는 ‘( )’ 안의 값을 반환하고, 나머지 행에 대해서는 그 전의 행으로부터의 계산식 또는 값을 반환한다.
예를 들어보자.
◆ 계산된 필드에서 아래와 같은 수식을 작성하자.
◆ 위 수식(‘PREVIOUS_VALUE(1)’)을 열에 드래그하자.
◆ ‘Region’을 행으로 드래그하고, 색상에 드래그하자.
모든 Region의 값이 1이다. 왜 그럴까?
위에서 정의한 대로, 첫번째 행(‘Central’)에 대해서는 PREVIOUS_VALUE(1)의 ‘( )’ 안의 값,
즉, ‘1’을 반환한다.
나머지 행에 대해서는 그 전의 행으로부터의 계산식 또는 값을 반환한다. 여기서 그 전의 행(‘Central’)의 값은 ‘1’ 이므로, 다음행(‘East’)의 값은 1이고, ‘East’의 값이 1이니까, ‘South’의 값 또한 1이 된다.
또 다른 예를 들어보자.
◆ 계산된 필드에서 아래와 같이 수식을 작성하자.
◆ ‘Profit’과 위 수식('SUM([Profit]) + PREVIOUS_VALUE(0)’)을 열에 드래그하자.
◆ ‘Region’을 행으로 드래그하고, 색상으로 드래그하자.
왼쪽 그래프는 각 ‘Region'의 ‘Profit'이다. 그러나, 오른쪽 그래프는 ‘Profit'에 ‘PREVIOUS_VALUE(0)’을 더했다.
오른쪽 그래프를 보면, 첫번째 행(‘Central’)에 대해서는 ‘Central’의 SUM(Profit) + ‘PREVIOUS_VALUE(0)’의 값이 반환되는데, ‘Central’의 'SUM(Profit)’의 값(=$39,706) + ‘PREVIOUS_VALUE(0)’의 값(=0)이 반환되는 것이고, 즉, $39,706의 값이다.
두번째 행(‘East’)에 대해서는
‘East’의 SUM(Profit) + ‘PREVIOUS_VALUE(0)’의 값이 반환되는데, 여기서 'SUM(Profit)’의 값은
‘East’의 'SUM(Profit)’이고, ‘PREVIOUS_VALUE(0)’의 값은 그 전의 행(‘Central’)으로부터의 계산식 또는 값, ‘Central’의 행의 값이다.
다시 말하면, ‘East’의 'SUM(Profit)’ + ‘Central’의 행의 값 = $91,523 + $39,706 = $131,229 이다.
세번째 행과 마지막 행도 위와 같은 방식으로 더해지기 때문에 'SUM(Profit)' + ‘PREVIOUS_VALUE(0)’은 ‘Profit'의 누계 합계와 같다.
2. PREVIOUS_VALUE( )는 언제 사용할 수 있을까?
매년 성장률에 따른 점수를 매겨보는 예제를 들어보자. 2013년의 점수를 100으로 놓고,
이를 기준으로 다음 해의 성장률에 따른 다음 해의 점수를 매겨보는 계산을 할 때, ‘PREVIOUS_VALUE( )’를 사용할 수 있다.
날짜와 성장률을 포함한 엑셀데이터를 태블로에 가져왔다.
2013년의 점수를 100으로 놓고, 이를 기준으로 다음 해의 성장률에 따른 다음 해의 점수를 매겨보는 계산을 할 때
◆ 아래와 같은 수식을 작성해보자.
여기서 알아야 할 함수가 ‘IFNULL( )’이다.
'IFNULL(식1,식2 )’이면, null이 아니면 식1을 반환하고, null이면 식2를 반환하는 함수이다.
그렇다면 위 수식은 의미는 무엇일까?
◆ 위 수식(‘점수’)을 ‘측정값’ 박스 안으로 드래그하여, 테이블을 만들어보자.
위 테이블과 수식을 같이 보면서 이해해보자.
우선, 첫번째 행(‘2013’)에 대해서는
'PREVIOUS_VALUE(IFNULL(1+(SUM([성장률])),100))*IFNULL(1+SUM([성장률]),1)’의 값이 반환되는데, 첫번째 행의 성장률이 없으므로(=NULL), 첫번째 행에 대한 값은 100*1 = 100이다.
두번째 행(‘2014’)에 대해서는
'PREVIOUS_VALUE(IFNULL(1+(SUM([성장률])),100))*IFNULL(1+SUM([성장률]),1)’의 값이 반환되는데, 두번째 행의 'PREVIOUS_VALUE(IFNULL(1+(SUM([성장률])),100))’의 값은 그 전의 행의 값(‘2013’), 100이고,
'IFNULL(1+SUM([성장률]),1)’의 값은, 두번째 행의 성장률이 있으므로(=null이 아니므로), ‘1+1%’이다.
즉, 두번째 행의 값은 100*(1+1%) = 101이다.
세번째 행(‘2015’)과 마지막 행(‘2016’) 또한 같은 방식으로 계산된다.
위의 예제처럼, 성장률에 따른 점수를 계산할 때 사용되었지만,
‘PREVIOUS_VALUE( )’의 개념을 이해한다면, 다른 목적으로도 사용될 수 있을 것이다.