본문 바로가기
데이터 분석 및 업무 자동화

Power BI DAX Patterns 하위 항목 및 하위 값 찾기 (FILTER, RANKX)

by 공부머리 2022. 5. 5.
반응형

지난 포스팅에서 TOPN 함수를 사용하여 상위 항목에 대한 분석을 해보았습니다. 반대로 하위 항목에 대한 분석이 가능할까요? BOTTOMN이라는 DAX 함수는 없지만 FILTER와 RANKX의 조합으로 하위 항목 분석에 대한 내용을 정리해 보겠습니다.

 

결과

  • 총매출 : 해당 년월에 해당하는 총매출 결과입니다.
  • 하위 제품 매출 : 매출이 가장적은 제품이 차지하는 매출액입니다.
  • 하위 제품 : 해당하는 하위 제품은 무엇인지 나타냅니다.

대시보드
결과 테이블

 

측정식

총매출을 구하는 측정식입니다. 제품 가격과 판매 수량을 곱한 모든 항목에 대해서 합한 값을 나타냅니다.

총매출 = 
SUMX(
    '판매 테이블',
    RELATED('제품 테이블'[Price]) * '판매 테이블'[Units]

 

 

  • CALCULATE절 : FILTER절에서 필터링된 테이블 기준으로 총매출을 구합니다.
  • FILTER절 : RANKX가 1을 만족하는 제품 테이블을 반환합니다. 하위 항목 1행이 반환됩니다.
  • RANKX절 : 제품테이블에서 총매출을 오름차순으로 정렬하여 순위를 구합니다. 총매출액이 가장 적을 때 1순위가 됩니다. Dense는 동률일 때 다음 순위를 다음 숫자를 적용한다는 의미입니다.
하위제품매출 = 
CALCULATE(
    [총매출],
    FILTER(
        '제품 테이블',
        RANKX(
            '제품 테이블',
            [총매출],,
            ASC,
            Dense
        ) = 1 
    )
)

 

 

  • CONCATENATEX절 : FILTER절에서 필터링된 테이블 기준으로 제품명을 반환합니다.
  • FILTER절, RANKX절 : 바로 위 측정식에서 설명한 내용과 동일합니다.
하위제품 = 
CONCATENATEX(
    FILTER(
        '제품 테이블',
        RANKX(
            '제품 테이블',
            [총매출],,
            ASC,
            Dense
        ) = 1 
    ),
    '제품 테이블'[Product]
)

 

 

관련 측정식 설명

CONCATENATEX

설명 : 테이블의 각 행에 대하여 계산되는 식의 결과를 연결한 문자열을 반환하는 함수입니다.

구문 : CONCATENATEX(<table>, <expression>[, <delimiter> [, <orderBy_expression> [, <order>]]...])

  • Table : 계산을 진행할 테이블입니다.
  • Expression : 테이블의 각 행에 대해서 계산할 식입니다.
  • Delimiter(선택) : 연결 간 사용할 구분 기호를 의미합니다.
  • orderBy_expression(선택) : 문자열에서 연결된 값을 정렬하는 식입니다.
  • Order(선택) : 정렬 방법을 설정합니다.

 

RANKX

설명 : 테이블의 각 행에 대하여 순위를 매겨 순위 숫자를 반환하는 함수입니다.

구문 : RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

  • Table : 식이 계산되는 테이블입니다.
  • Expression : 테이블의 각 행에 대하여 순위를 계산하는 식입니다.
  • Value(선택) : 순위를 찾을 단일 스칼라 값을 반환하는 식입니다. 공란일 경우 expression의 식이 적용됩니다.
  • Order : 정렬 방식을 설정합니다.
  • Ties : skip을 설정하면 동률 발생 시 다음 순위는 동률을 이룬 수를 더한 값이 반영됩니다. Dense로 설정하면 동률 발생 시 다음 순위는 다음 순위 값이 반영됩니다.

 

정리 소감

TOPN과 반대되는 함수가 별도 없어서 어떻게 적용할까 고민이 되었는데 FILTER와 RANKX 함수를 사용하여 하위 항목 및 하위 값을 분석할 수 있어서 유용했습니다. RANKX에서 ASC 대신에 DESC를 적용한다면 상위 항목 및 상위 값을 분석할 수 있겠습니다.

반응형

댓글