빅데이터(big data)/스팟파이어(Spotfire)

[Spotfire] Rank함수, 그룹별 순위 산출과 중복 없는 denseRank, 엑셀보다 강력한 수식 1번째

에스도비91 2021. 7. 6. 11:00
반응형
목표 : 그룹 별 Rank 구하기
Lot(소대명) Wafer(대원 번호) Value(능력치) Time(평가시점) Rank_in_Lot denseRank_in_Lot
Alpha 2 72 2021.03.29 2 2
Delta 1 80 2021.06.25 1 1
Gamma 2 80 2021.01.09 1 1
Delta 5 63 2021.03.27 2 2
Beta 7 99 2021.01.21 1 1
Gamma 5 58 2021.03.29 2 2
Delta 7 52 2021.02.20 4 3
Delta 10 63 2021.04.19 2 2
Alpha 13 77 2021.02.20 1 1

이전 포스팅에서 정리한 예시 테이블에서

Lot(소대)별 Wafer(대원)의 능력치를 내림차순으로 위와 같이 Rank(순서정렬)을 해보려합니다. 전체에 대한 Rank가 아니라 같은 소대끼리 묶어서 그 안에서 순위를 정하는 것이라 조금 복잡한 예시입니다.

복잡한 수식이 필요한 엑셀의 방식

먼저 엑셀의 경우에 위처럼 값을 수식화하려면 직관적인 함수가 없어 꽤나 복잡합니다. 엑셀에 Rank함수가 있긴하나 지금같이 그룹별 Rank를 구현하는 기능은 없기에...

 

위 테이블 좌상단을 엑셀의 A1에 맞춘 뒤, E2 셀에 아래 수식을 입력하고

=SUMPRODUCT(($A$2:$A$10=A2)*($C$2:$C$10>C2))+1

밑으로 쭉~ 수식을 확장하면 위 테이블의 "Rank_in_Lot"이 채워집니다.(수식 가운데 빨간 부등호를 반대로 바꾸면 작은 값부터 순서를 매기는 오름차순이 됩니다.) 그리고 공동 2등 뒤에 4등이 아닌 중복 무시하고 3등이 오도록 하는 Rank방식인 "dense_Rank_in_Lot"은 딱히 만들 방법이 없네요.

 

문제는 이런 수식을 짜기 위해 짱구를 꽤나 굴려야할 뿐 아니라 셀 하나마다 전체 열 데이터와 비교를 해야하니 데이터(n개)가 많아질 수록 제곱수(n^2)만큼 연산을 거쳐야해서 CPU할당량마저 무시무시하게 잡아먹습니다. 반면! 스팟파이어에선...

확장된 기능의 Rank함수로 간결한 Spotfire

Calculated Column의 수식창에 들어가서

Rank([Value], "desc", [Lot])

이걸로 간단하게 끝납니다!! "dense_Rank_in_Lot"의 경우에는

denseRank([Value], "desc", [Lot])

매우 심플하죠~ 

큰 값부터 내림차순이 아닌 작은 값부터 오름차순으로 하려면 "desc" 대신에 "asc"를 넣어주면 되고 그냥 생략해서 Rank([Value], [Lot])라고 쓰면 asc, 오름차순으로 결과가 산출됩니다.

 

asc(ascend) : 오르다. 오름차순

desc(descend) : 내려가다. 내림차순