Power BI | RANK(), RANKX()
RANK()
RANK 함수는 특정 제품의 매출에 대해 순위를 계산할 때 사용됩니다. 주로 단일 값을 비교할 때 사용되며, 행 수준에서 순위를 계산할 때 사용됩니다.
RANK (
[<ties>],
[<relation> or <axis>],
[<orderBy>],
[<blanks>],
[<partitionBy>],
[<matchBy>],
[<reset>]
)
[<ties>]: 동일한 값에 대해 순위를 어떻게 매길지를 정의합니다.
- DENSE: 동점인 항목에 대해 같은 순위를 매기고, 그 이후 순위를 건너뛰지 않습니다. (예: 1, 1, 2)
- SKIP(기본값): 동점인 항목에 대해 같은 순위를 매기고, 그 이후 순위는 건너뜁니다. (예: 1, 1, 3)
[<relation> or <axis>]: 순위를 매길 기준이 되는 데이터 열입니다. 예를 들어, SalesAmount 같은 열을 사용할 수 있습니다.
[<orderBy>]: 순위를 매길 데이터를 정렬할 기준을 정의합니다. 예를 들어, DESC(내림차순) 또는 ASC(오름차순)을 사용하여 데이터를 정렬할 수 있습니다.
[<blanks>]: 빈 값이 있을 때 어떻게 처리할지를 정의합니다. 기본값은 IGNORE이며, 빈 값은 무시됩니다.
- IGNORE: 빈 값을 무시합니다.
- FIRST: 빈 값에 대해서 첫 번째 순위를 부여합니다.
- LAST: 빈 값에 대해서 마지막 순위를 부여합니다.
[<partitionBy>]: 순위를 매길 범위를 나누는 필드를 지정합니다. 예를 들어, 특정 그룹(예: CalendarYear 또는 ProductCategory) 내에서 순위를 매기고 싶을 때 사용합니다. 여러 개의 열을 지정하여 범위를 세분화할 수 있습니다.
[<matchBy>]: 순위를 매길 데이터의 값이 아닌 다른 값을 기준으로 동일한 순위로 매길지를 정의합니다. 이 인수는 선택사항으로, 주로 RANKX와 결합하여 사용됩니다.
[<matchBy>]: 순위를 매길 데이터의 값이 아닌 다른 값을 기준으로 동일한 순위로 매길지를 정의합니다. 이 인수는 선택사항으로, 주로 RANKX와 결합하여 사용됩니다.
SalesRankWithinYear =
RANK(
DENSE,
ORDERBY([SalesAmount], DESC),
PARTITIONBY([CalendarYear])
)
이 식은 SalesAmount를 기준으로 CalendarYear마다 각 연도별로 매출 순위를 매깁니다.
RANKX()
RANKX(
<table>, -- 순위를 계산할 테이블
<expression>, -- 순위를 매길 기준이 되는 표현식
<value>, -- 순위가 매겨질 값을 선택 (선택사항)
<order>, -- 순위를 매길 순서 (선택사항)
<ties> -- 동점 처리 방식 (선택사항)
)
RANKX 함수는 주어진 테이블에 대해 특정 표현식을 기준으로 순위를 매기는 DAX 함수입니다. 이 함수는 각 항목에 대해 순위를 계산하고, 결과 테이블에서 각 항목의 순위를 반환합니다.
- <table>: 순위를 매길 테이블을 지정합니다. 이 테이블의 각 행에 대해 RANKX가 순위를 계산합니다.
- <expression>: 순위를 매길 기준이 되는 값이나 계산식입니다. 예를 들어, 각 제품의 판매량이나 매출액 등을 기준으로 할 수 있습니다.
- <value> (선택 사항): 특정 값을 기준으로 순위를 매길 수도 있습니다. 이 값이 제공되면 expression에서 계산된 값을 기준으로 순위가 매겨집니다.
- <order> (선택 사항): 순위를 매기는 순서를 지정합니다. 기본값은 내림차순(DESC)이며, ASC로 변경하여 오름차순으로 순위를 매길 수도 있습니다.
- ASC: 오름차순으로 순위 계산
- DESC: 내림차순으로 순위 계산
- <ties> (선택 사항): 동점 항목을 처리하는 방식을 지정합니다.
- SKIP: 동점 항목이 있을 경우, 동일한 순위를 매기고 그 다음 순위는 건너뛰기
- DENSE: 동점 항목이 있을 경우, 동일한 순위를 매기고 그 다음 순위도 연속적으로 매기기 (예: 1, 1, 2, 3)
- MIN: 동점 항목이 있을 경우, 첫 번째 값에 순위를 매기고 그 후 값을 연속적으로 매기기
- MAX: 동점 항목이 있을 경우, 마지막 값에 순위를 매기고 그 후 값을 연속적으로 매기기
= RANKX(
ALL(Products), -- Products 테이블에서 모든 필터를 제거
SUMX(RELATEDTABLE(InternetSales), [SalesAmount]) -- 각 제품별로 관련된 InternetSales 테이블의 매출 합계를 계산
)
RELATEDTABLE(InternetSales)는 Products 테이블과 InternetSales 테이블이 관계를 맺고 있다고 가정했을 때, 각 제품에 대해 해당 제품에 관련된 InternetSales 테이블의 모든 행을 반환합니다. RANKX는 Products 테이블에 있는 모든 제품에 대해 InternetSales 테이블의 매출 합계를 계산하고, 그 매출을 기준으로 순위를 매깁니다. 예를 들어, Bike의 총 매출이 10,000이라면, RANKX는 Bike의 순위를 1로 매깁니다. Shoes가 두 번째로 높은 매출을 가질 경우 Shoes는 2위가 됩니다.