Power BI에서 순위를 구하고자 할 때는 RANKX라는 DAX 함수를 사용합니다. 그룹별로 순위도 구할 수 있을까요? 아파트 평단가 시도별 시군구별 순위를 구하는 예제를 통해 그룹별 순위 구하는 방법을 알아보겠습니다.
결과
결과의 모습을 먼저 보여드리면 아래와 같습니다. 1번째 열부터 5번째 열에는 시도, 시군구, 아파트 이름, 아파트별 평균 평단가 값을 설정하여 아파트별 평단가를 확인할 수 있도록 했습니다.
이제 순위를 표시해야겠죠? 6번째 열은 시도 시군구 구별 없이 전체 아파트에 대한 평단가 순위가 나옵니다. 7번째 열은 시도 별 아파트 평단가 순위가 표현됩니다. 마지막으로 8번째 열은 시군구별 아파트 평단가 순위가 표현됩니다.
원하는 대로 시도별, 시군구별 그룹에 대한 순위가 올바르게 표현되었음을 확인할 수 있습니다.
작업 순서
이제 해당 결과를 얻기 위해 필요한 작업들을 순서대로 알아보겠습니다.
1.평단가 엑셀 데이터 작성 및 불러오기
데이터 분석을 단순화하기 위해서 아래와 같은 엑셀 파일을 임의로 작성하였습니다. 이 엑셀 파일을 Power BI로 불러옵니다.
필드 영역에 테이블과 열들이 제대로 불러와져 있음을 확인할 수 있습니다.
2. 측정값 작성
먼저 평균 평단가 측정식을 작성합니다. 해당 엑셀파일에서는 SUM을 이용해도 되겠으나 추후 평형이 다르거나 가격에 대한 시점이 여러 개 있는 경우를 대비해서 평균 평단가를 구합니다.
평단가_AVERAGE = AVERAGE('Sheet1'[평단가])
다음은 전체 아파트에 대해서 평균 평단가의 순위를 구하는 측정값입니다.
ISINSCOPE는 지정된 열이 수준 계층 구조의 수준이면 true를 반환합니다. 아파트 열을 지정해 줍니다.
RANKX는 RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])의 구조로 사용됩니다. 테이블 인수의 각 행에 대해 숫자의 순위를 숫자 목록으로 반환합니다. ‘Sheet1’ 테이블의 전체 영역에서 평균 평단가에 의한 순위를 구하게 됩니다.
NOT ISBLANK는 해당 값이 빈 값이 아니면 True를 반환하는 함수입니다. 여기서는 평균 평단가가 빈 값이 아니면 순위 값을 반환하게 됩니다.
평단가 Rank =
IF (
ISINSCOPE ( 'Sheet1'[아파트] ),
VAR APTAVGPrice = [평단가_AVERAGE]
VAR ProductRank =
RANKX (
ALLSELECTED ( 'Sheet1' ),
[평단가_AVERAGE]
)
VAR Result =
IF (
NOT ISBLANK ( APTAVGPrice ),
ProductRank
)
RETURN Result
)
다음은 시도별 아파트 평단가에 대한 순위입니다. 여기서 다른 점은 CALCULATETABLE 함수를 이용하여 시도별 그룹화된 테이블식을 만든 부분입니다. CACULATETABLE을 통해서 시도 그룹을 반영한 테이블 식이 만들어집니다. 이 테이블 식이 RANKX의 테이블로 입력하여 시도별 순위를 구하게 됩니다.
CALCULATETABLE의 구문은 CALCULATETABLE(<expression>[, <filter1> [, <filter2> [, …]]])이며 수정된 필터 컨텍스트에서 테이블 식을 평가하여 테이블을 반환합니다.
평단가 Rank in 시도 =
VAR APTAVGPrice = [평단가_AVERAGE]
VAR Category =
CALCULATETABLE (
'Sheet1',
REMOVEFILTERS ( 'Sheet1'[아파트] ),
ALLSELECTED ( 'Sheet1' ),
VALUES ( 'Sheet1'[시도] )
)
VAR ProductRank =
IF (
ISINSCOPE ( 'Sheet1'[아파트] ),
RANKX (
Category,
[평단가_AVERAGE]
)
)
VAR Result =
IF (
NOT ISBLANK ( APTAVGPrice ),
ProductRank
)
RETURN
Result
다음은 시군구별 아파트 평단가에 대한 순위입니다. CALCULATETABLE의 필터 중 VALUES(‘Sheet1’[시군구])가 반영된 것 외에는 앞의 측정식과 동일합니다.
평단가 Rank in 시군구 =
VAR APTAVGPrice = [평단가_AVERAGE]
VAR Category =
CALCULATETABLE (
'Sheet1',
REMOVEFILTERS ( 'Sheet1'[아파트] ),
ALLSELECTED ( 'Sheet1' ),
VALUES ( 'Sheet1'[시군구] )
)
VAR ProductRank =
IF (
ISINSCOPE ( 'Sheet1'[아파트] ),
RANKX (
Category,
[평단가_AVERAGE]
)
)
VAR Result =
IF (
NOT ISBLANK ( APTAVGPrice ),
ProductRank
)
RETURN
Result
3. 시각화 개체 만들기
시각화 필드에서 테이블을 선택하여 빈테이블을 하나 추가합니다. 값 영역에 아래 그림과 같이 시도, 시군구, 시도_시군구, 아파트 열과 위에서 구한 측정식들을 넣어주면 결과에서 보신 테이블이 완성됩니다.
정리 소감
전체 테이블에 대한 순위를 구할 때도 있고 필요에 따라서 그룹별 순위를 구할 때가 있었는데 이번 정리를 통해서 그룹별 순위를 구하는 방법을 알게 되었습니다. 지금은 데이터가 특정 시점으로 고정되어 있고 평형도 33평으로 고정되어 있는데 다양한 시점과 평형이 섞여 있는 경우 그룹별 순위를 구하는 방법에 대해서는 추후 포스팅하겠습니다. 또한 EARLIER 함수를 이용해서 그룹별 함수를 만들 수 도 있는데 이 부분도 추후 포스팅하도록 하겠습니다.
'데이터 분석 및 업무 자동화' 카테고리의 다른 글
Power BI DAX patterns - YoY, QoQ, MoM 구하기 (0) | 2022.04.08 |
---|---|
Power BI EARLIER 함수 사용하여 그룹별 순위 구하기 (0) | 2022.04.06 |
Power BI DAX Pattern - 누적합계 구하는 방법 (Cumulative total) (0) | 2022.04.01 |
Power BI에서 코로나 확진자 7일 이동평균 구하는 두가지 방법 (DATESINPERIOD, VAR) (0) | 2022.04.01 |
Power BI DAX 기초 - RELATED, USERELATIONSHIP, CROSSFILTER, TREATAS (0) | 2022.03.30 |
댓글