지난 포스팅에서는 RANKX를 사용하여 그룹별 순위 구하기를 알아보았습니다. EARLIER 함수를 이용하여 그룹별 순위를 구할 수도 있습니다. 오늘은 EARLIER 함수가 무엇인지 정리하고 어떻게 그룹별 순위 구하는데 활용할 수 있는지 정리하겠습니다.
먼저 RANKX를 사용한 그룹별 순위 구하는 포스팅은 아래 링크 참조하시기 바랍니다.
Power BI DAX RANKX 그룹별 순위 구하기 (feat. 아파트 평단가 시도별 시군구별 순위)
결과
데이터 아이콘을 클릭합니다. (빨간색 박스)
날짜가 2022년 3월 1일 필터링된 새 테이블이 생성되어 있습니다.(녹색 박스)
시도 순위, 시군구 순위, 순위가 새 열로 추가되어 있습니다. (오렌지색 박스)
진행 순서
1. 데이터 불러오기
아래 사진과 같이 임의의 엑셀 데이터를 생성하였습니다. 지난 포스팅 대비하여 틀린 점은 날짜 열이 추가되었고 2022년 3월 1일 시세와 2012년 7월 1일 시세 두 개가 존재하는 부분입니다. 시세가 날짜별로 다른 상황을 연출하기 위해서 임의의 두 날짜 데이터를 만든 것입니다. 엑셀 파일을 파워 비아이로 불러옵니다.
2. 특정 시점 기준 테이블 만들기
불러온 데이터 테이블에서 특정 시점 기준으로 그룹별 순위를 만들려고 합니다. 그러기 위해서는 특정 시점 기준의 테이블을 생성하는게 효율적이겠죠? 왜냐하면 여러 날짜가 섞여 있으면 여러 날짜의 시세가 포함된 순위가 산출되어 혼동이 되기 때문입니다.
특정 시점 기준 테이블을 만들기 위해서는 [데이터] - [테이블 도구] - [새 테이블] 순서로 클릭 한 후 아래와 같은 식을 입력합니다. 저는 2022년 3월 1일 자를 설정했습니다. 완성되면 2022년 3월 1일 자의 데이터만 필터링된 '시세_20220301' 테이블이 생성됩니다.
시세_20220301 = FILTER('시세', '시세'[날짜]=DATE(2022,3,1))
3. EARLIER 함수 사용하여 그룹별 순위 새열 만들기
이제 EARLIER 함수를 사용하여 그룹별 순위를 구할 차례입니다. 들어가기에 앞서 EARLIER 함수에 대해서 살펴보겠습니다.
EARLIER 함수의 구문은 EARLIER(<열>) 입니다. EARLIER 함수는 행 컨텍스트 함수로써 현재 행 값을 수식 기준에 다라 평가한 이후 이를 반영한 새로운 테이블을 반환합니다. 지정한 열에 있는 현재 값을 돌려준다고 쉽게 이해하시면 되겠습니다. 주로 새열을 만들 때 사용됩니다.
먼저 순위를 구하는 새열을 만드는 식입니다. 필터함수는 결과 값으로 테이블을 반환합니다. EARLIER 함수를 통해서 [평단가] 열의 행 값을 전체 행 값과 비교하여 현재 행의 [평단가]가 높은 행만 필터링하여 테이블을 만듭니다. COUNTROWS 함수를 사용하여 이 테이블의 행의 갯수를 세어 순위를 계산하게 됩니다.
순위 =
COUNTROWS (
FILTER (
'시세_20220301',
EARLIER ( '시세_20220301'[평단가] ) <= '시세_20220301'[평단가]
)
)
다음으로 시도별 순위를 구하는 새열을 만드는 식입니다.
필터 안의 필터 함수는 '시세_20220301' 테이블을 대상으로 수행합니다. EARLIER 함수를 통해서 [시도] 열의 행 값을 전체 행 값과 비교하여 현재 행의 [시도]와 같은 행만 필터링하여 테이블을 만듭니다.
같은 시도의 테이블식을 대상으로 두번째 EARLIER 함수가 동작합니다. 두 번째 EARLIER 함수는 바로 위에서 알아본 식의 동작 원리와 동일하게 동작합니다.
COUNTROWS 함수를 사용하여 현재 행과 같은 시도에서 평단가가 높거나 같은 테이블의 행의 갯수를 세어 순위를 계산합니다.
시도 순위 =
COUNTROWS (
FILTER (
FILTER ( '시세_20220301', EARLIER ( '시세_20220301'[시도] ) = '시세_20220301'[시도] ),
EARLIER ( '시세_20220301'[평단가] ) <= '시세_20220301'[평단가]
)
)
시군구 순위는 위의 시도 순위에서 '시도'를 '시군구'로만 바꾸었고 나머지는 동일합니다.
시군구 순위 =
COUNTROWS (
FILTER (
FILTER ( '시세_20220301', EARLIER ( '시세_20220301'[시군구] ) = '시세_20220301'[시군구] ),
EARLIER ( '시세_20220301'[평단가] ) <= '시세_20220301'[평단가]
)
)
정리 소감
그룹별 순위를 구하는데 RANKX를 사용할 수 도 있고 EARLIER 함수를 사용하는 다양한 방법을 알게 되었습니다. 다만 EARLIER 함수를 이용하면 새로운 테이블도 만들어야 하고 새열도 추가해야 해서 동작이 느려질 수도 있겠습니다. 다양한 방법과 패턴을 이해하고 상황에 맞게 사용하면 좋을 것 같습니다.
'데이터 분석 및 업무 자동화' 카테고리의 다른 글
MySQL 여러 테이블 한번에 다루는 방법 (UNION, UNION ALL) (0) | 2022.04.12 |
---|---|
Power BI DAX patterns - YoY, QoQ, MoM 구하기 (0) | 2022.04.08 |
Power BI DAX RANKX 그룹별 순위 구하기 (feat. 아파트 평단가 시도별 시군구별 순위) (0) | 2022.04.05 |
Power BI DAX Pattern - 누적합계 구하는 방법 (Cumulative total) (0) | 2022.04.01 |
Power BI에서 코로나 확진자 7일 이동평균 구하는 두가지 방법 (DATESINPERIOD, VAR) (0) | 2022.04.01 |
댓글