티스토리 뷰

지난 글에 이어 중급 DAX에 대한 내용을 준비했습니다.

 

마찬가지로 <_측정값> 테이블에 '새 측정값' 기능을 이용하여 아래 문제를 풀어보세요. 정답은 마우스로 텍스트 선택(긁기)하시면 보실 수 있습니다.

 

파워BI(PowerBI) 파일은 아래에 첨부하였습니다. 답안 파일로 시작하시고, 정답 파일로 답을 확인해보세요. 유튜브 동영상을 통해 풀이를 함께 해보세요.

 

[답안 파워BI 파일]

답안_datastorydavi_dax_calculate_filter_all_sumx.pbix
0.30MB

 

[정답 파워BI 파일]

정답_datastorydavi_dax_calculate_filter_all_sumx.pbix
0.30MB

 

https://youtu.be/EjANzxm_H2Y


초급 DAX 함수는 입력하는 값이 단순해서 입력받는 인자(Argument, 테이블이름이나 열이름 또는 수식 등 함수가 받는 값)에 대해 고민하지 않아도 괜찮았는데요.

중급 DAX 함수부터는 인자에 어떤 종류가 있고, 각각의 인자가 어떤 내용을 담는지 이해하시는 것이 좋습니다. DAX 함수에 사용되는 인자가 다양하지만, 자주쓰는 인자는 몇가지 되지 않기 때문에 익혀두시면 처음보는 고급 DAX 함수라고 하더라도 금방 이해할 수 있어 이후 고급 DAX 함수까지 공부하시는데 도움이 되리라 생각합니다.

 

[자주쓰는 기본 인자]

01. ColumnName : 열이름을 지정해줍니다. 보통은 '테이블이름'[열이름] 형식으로 지정합니다. 예) '판매'[매출금액]

02. 테이블(Table) : 파워쿼리편집기에서 만든 쿼리로 편집기에서는 오른쪽 데이터영역에 테이블형태로 존재합니다. '테이블이름'으로 지정합니다. 예) '판매'

03. 식(Expression) : 수식입니다. 사칙연산이 들어갈 수도있고, sum이나 count같은 함수를 사용할 수도 있습니다.

04. 필터(Filter) : 필터는 조건을 말합니다. 매출을 구하는데, 서울지점의 매출만 구하도록 조건을 거는 경우 이에 해당하겠습니다. 필터는 크게 3가지이나 서로 비슷합니다. Filter함수를 쓰는 경우는 좀 더 복잡한 조건을 설정하기 위한 것이며 기본 개념은 동일합니다. 시험 문제에서는 Filter를 사용하라고 지정한 경우 Filter를 사용해서 필터 부분을 작성하시면 되겠습니다.

  • 조건식 : '판매'[매출금액] >= 100
  • Filter 함수 사용
  • Boolean(True/False)

05. Dates : 날짜 형식을 갖는 열

06. 날짜(Date) : 날짜 형식을 갖는 날짜

[기타 인자]

07. 이름, 값(Name, Value) : 주로 열 이름을 지정해줍니다. groupby나 rankx를 해서 새  열을 만들 때 사용합니다. 

08. Interval : 날짜/시간 형식의 기간(연도, 분기, 월, 일...)

09. Order : 정렬기준으로 오름차순(ASC 또는 1)과 내림차순(DESC 또는 0, 기본값)

10. 동률(Ties) : rankx 함수 등에서 등수가 같은 경우 같은 등수 이후의 등수를 어떻게 할지 결정합니다. 2위가 3개면, 그 다음 순위가 Dense는 3위, Skip(기본값)은 5위가 됩니다.


[CALCULATE 함수 5문제]

01. [초급] 총 매출금액의 합계를 구하는 측정값을 만드세요.

[측정값 이름] 01총매출
[활용 필드]

  • <판매> 테이블의 [매출금액]
    [사용 함수] CALCULATE, SUM

정답:
01총매출 = CALCULATE(SUM('판매'[매출금액]))

해설:
CALCULATE 함수는 필터링된 컨텍스트 내에서 주어진 식을 평가합니다. SUM 함수는 매출금액 필드의 값을 합산하며, 이 측정값은 <판매> 테이블의 총 매출을 반환합니다.


02. [초급] 2023년의 매출 합계를 구하는 측정값을 만드세요.

[측정값 이름] 02연도별매출
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <날짜> 테이블의 [연도]
    [사용 함수] CALCULATE, SUM

정답:
02연도별매출 = CALCULATE(SUM('판매'[매출금액]), '날짜'[연도] = 2023)

해설:
CALCULATE 함수는 특정 연도(예: 2023년)로 필터링된 매출만 합산하여, 그 연도의 매출을 계산합니다.


03. [초급] 특정 채널(온라인)의 매출금액 합계를 구하는 측정값을 만드세요.

[측정값 이름] 03온라인매출
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <거래처> 테이블의 [채널]
    [사용 함수] CALCULATE, SUM

정답:
03온라인매출 = CALCULATE(SUM('판매'[매출금액]), '거래처'[채널] = "온라인")

해설:
온라인 채널에서 발생한 매출만 필터링하고, 그 매출금액을 합산하여 반환합니다.


04. [초급] 전체 거래처 수를 구하는 측정값을 만드세요.

[측정값 이름] 04거래처수
[활용 필드]

  • <거래처> 테이블의 [거래처명]
    [사용 함수] CALCULATE, DISTINCTCOUNT

정답:
04거래처수 = CALCULATE(DISTINCTCOUNT('거래처'[거래처명]))

해설:
DISTINCTCOUNT 함수는 중복을 제외한 고유 거래처의 수를 계산하며, CALCULATE로 필터링된 데이터를 기반으로 계산할 수 있습니다.


05. [초급] 전체 매출금액을 기준으로 송파점의 매출 비율을 구하는 측정값을 만드세요.

[측정값 이름] 05거래처매출비율
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <거래처> 테이블의 [거래처명]
    [사용 함수] CALCULATE, SUM, DIVIDE

정답:
05거래처매출비율 = DIVIDE(CALCULATE(SUM('판매'[매출금액]), '거래처'[거래처명] = "송파점"), CALCULATE(SUM('판매'[매출금액])))

해설:
DIVIDE 함수는 특정 거래처의 매출을 전체 매출로 나누어 비율을 계산하며, CALCULATE 함수는 해당 거래처와 전체 매출을 각각 필터링합니다.

 

[FILTER 함수 5문제]

06. [초급] 2023년의 매출금액을 계산하는 측정값을 만드세요.

[측정값 이름] 06연도별매출
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <날짜> 테이블의 [연도]
    [사용 함수] FILTER, CALCULATE, SUM

정답:
06연도별매출 = CALCULATE(SUM('판매'[매출금액]), FILTER('날짜', '날짜'[연도] = 2023))

해설:
FILTER 함수는 <날짜> 테이블에서 연도가 2023년인 데이터만 필터링합니다. CALCULATE 함수는 해당 필터링된 매출금액을 합산하여 반환합니다.


07. [초급] '상의' 제품군의 매출금액 합계를 계산하는 측정값을 만드세요.

[측정값 이름] 07제품군별매출
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <제품> 테이블의 [분류명]
    [사용 함수] FILTER, CALCULATE, SUM

정답:
07제품군별매출 = CALCULATE(SUM('판매'[매출금액]), FILTER('제품', '제품'[분류명] = "상의"))

해설:
FILTER 함수는 <제품> 테이블에서 "상의" 제품만 필터링하고, CALCULATE 함수는 해당 제품군에 대한 매출을 합산하여 계산합니다.


08. [초급] 2023년 5월의 매출금액을 계산하는 측정값을 만드세요.

[측정값 이름] 08월별매출
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <날짜> 테이블의 [연도], [월]
    [사용 함수] FILTER, CALCULATE, SUM

정답:
08월별매출 = CALCULATE(SUM('판매'[매출금액]), FILTER('날짜', '날짜'[연도] = 2023 && '날짜'[월] = 5))

해설:
FILTER 함수는 연도와 월을 동시에 필터링합니다. 여기서는 2023년 5월에 해당하는 매출만 계산되며, CALCULATE 함수는 해당 조건의 매출을 합산합니다.


09. [초급] 2023년 5월에 대한 전체 판매 건수를 계산하는 측정값을 만드세요.

[측정값 이름] 09월별판매건수
[활용 필드]

  • <판매> 테이블
  • <날짜> 테이블의 [연도], [월]
    [사용 함수] FILTER, CALCULATE, COUNTROWS

정답:
09월별판매건수 = CALCULATE(COUNTROWS('판매'), FILTER('날짜', '날짜'[연도] = 2023 && '날짜'[월] = 5))

해설:
FILTER 함수로 연도와 월을 기준으로 데이터를 필터링하고, COUNTROWS 함수는 해당 월에 발생한 판매 건수를 계산합니다.


10. [초급] 2023년 '상의' 제품의 매출금액을 계산하는 측정값을 만드세요.

[측정값 이름] 10연도제품군별매출
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <날짜> 테이블의 [연도]
  • <제품> 테이블의 [분류명]
    [사용 함수] FILTER, CALCULATE, SUM

정답:
10연도제품군별매출 = CALCULATE(SUM('판매'[매출금액]), FILTER('날짜', '날짜'[연도] = 2023), FILTER('제품', '제품'[분류명] = "상의"))

해설:
두 개의 FILTER 함수를 사용해 연도와 제품군(상의)을 각각 필터링합니다. CALCULATE 함수는 해당 필터링된 매출을 합산합니다.

 

[ALL 함수 5문제]

11. [초급] 송파점의 매출 비율을 계산하는 측정값을 만드세요.

[측정값 이름] 11거래처매출비율
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <거래처> 테이블의 [거래처명]
    [사용 함수] CALCULATE, ALL, DIVIDE, SUM

정답:
11거래처매출비율 = DIVIDE(CALCULATE(SUM('판매'[매출금액]), '거래처'[거래처명] = "송파점"), CALCULATE(SUM('판매'[매출금액]), ALL('거래처')))

해설:
ALL 함수는 전체 거래처의 매출을 고려하도록 하며, CALCULATE 함수는 특정 거래처(예: "송파점")의 매출과 전체 매출을 계산한 후 DIVIDE 함수로 비율을 구합니다.


12. [초급] '상의' 제품군의 매출 비율을 계산하는 측정값을 만드세요.

[측정값 이름] 12제품군매출비율
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <제품> 테이블의 [분류명]
    [사용 함수] CALCULATE, ALL, DIVIDE, SUM

정답:
12제품군매출비율 = DIVIDE(CALCULATE(SUM('판매'[매출금액]), '제품'[분류명] = "상의"), CALCULATE(SUM('판매'[매출금액]), ALL('제품')))

해설:
ALL 함수는 모든 제품군의 매출을 고려하며, CALCULATE는 특정 제품군(예: "상의")의 매출과 전체 제품군 매출을 비교하여 비율을 계산합니다.


13. [초급] 전체 거래처 중 송파점의 거래 수  비율을 계산하는 측정값을 만드세요.

[측정값 이름] 13거래처거래수비율
[활용 필드]

  • <판매> 테이블
  • <거래처> 테이블의 [거래처명]
    [사용 함수] CALCULATE, ALL, DIVIDE, COUNTROWS

정답:
13거래처거래수비율 = DIVIDE(CALCULATE(COUNTROWS('판매'), '거래처'[거래처명] = "송파점"), CALCULATE(COUNTROWS('판매'), ALL('거래처')))

해설:
ALL 함수는 전체 거래처에서의 거래 수를 계산하고, CALCULATE 함수는 특정 거래처(예: "송파점")의 거래 수를 필터링하여 비율을 계산합니다.


14. [초급] 송파점의 매출 합계를 계산하고, 전체 거래처의 매출과의 차이를 반환하는 측정값을 만드세요.

[측정값 이름] 14거래처매출차이
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <거래처> 테이블의 [거래처명]
    [사용 함수] CALCULATE, ALL, SUM

정답:
14거래처매출차이 = CALCULATE(SUM('판매'[매출금액]), ALL('거래처')) - CALCULATE(SUM('판매'[매출금액]), '거래처'[거래처명] = "송파점")

해설:
ALL 함수는 전체 거래처의 매출을 계산하고, CALCULATE는 특정 거래처(예: "송파점")의 매출을 계산하여, 두 값의 차이를 계산합니다.


15. [초급] 전체 거래처의 거래 수와 강남점의 거래 수 차이를 반환하는 측정값을 만드세요.

[측정값 이름] 15거래처거래수차이
[활용 필드]

  • <판매> 테이블
  • <거래처> 테이블의 [거래처명]
    [사용 함수] CALCULATE, ALL, COUNTROWS

정답:
15거래처거래수차이 = CALCULATE(COUNTROWS('판매'), ALL('거래처')) - CALCULATE(COUNTROWS('판매'), '거래처'[거래처명] = "강남점")

해설:
ALL 함수는 전체 거래처의 거래 수를 계산하고, CALCULATE는 특정 거래처(예: "강남점")의 거래 수를 계산하여 두 값의 차이를 반환합니다.

 

[SUMX 함수 3문제]

 

16. [초급] 총 판매단가를 합산하는 측정값을 만드세요.

[측정값 이름] 16총판매단가
[활용 필드]

  • <판매> 테이블의 [단가]
  • <판매> 테이블의 [수량]
    [사용 함수] SUMX

정답:
16총판매단가= SUMX('판매', '판매'[단가]*'판매'[수량])

해설:
SUMX 함수는 <판매> 테이블의 각 행에서 [매출금액]을 합산합니다. CALCULATE는 필터링된 컨텍스트에서 해당 계산을 실행합니다.

 


17. [초급] '상의' 제품의 매출 합계를 계산하는 측정값을 만드세요.

[측정값 이름] 17제품군별매출합계
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <제품> 테이블의 [분류명]
    [사용 함수] SUMX, CALCULATE

정답:
17제품군별매출합계 = CALCULATE(SUMX('판매', '판매'[매출금액]), '제품'[분류명] = "상의")

해설:
SUMX 함수는 <판매> 테이블에서 각 행에 대해 [매출금액]을 계산하고, CALCULATE는 특정 제품군(상의)에 대한 매출을 필터링합니다.


18. [초급] 전체 연도에서 발생한 매출금액을 계산하는 측정값을 만드세요.

[측정값 이름] 18전체연도매출합계
[활용 필드]

  • <판매> 테이블의 [매출금액]
  • <판매> 테이블의 [판매일]
    [사용 함수] SUMX, CALCULATE, ALL

정답:
18전체연도매출합계 = CALCULATE(SUMX('판매', '판매'[매출금액]), ALL('판매'[판매일].[연도]))

해설:
SUMX 함수는 전체 연도에 대해 매출금액을 계산하고, ALL 함수는 모든 연도에 대해 필터를 제거하여 계산된 매출을 반환합니다.

 

[함수 응용 2문제]

19. [중급] 특정 기간(2023년1월1일~2023년12월31일) 동안의 총 매출 금액을 계산하는 측정값을 만드세요.

[측정값 이름] 19특정기간총매출금액
[활용 필드]
<판매> 테이블의 [매출금액], [판매일]
[사용 함수] CALCULATE, FILTER, SUM, DATE
정답:
19특정기간총매출금액 = CALCULATE(SUM('판매'[매출금액]), FILTER('판매', '판매'[판매일] >= DATE(2022, 1, 1) && '판매'[판매일] <= DATE(2022, 12, 31)))
해설:
FILTER 함수는 2023년의 날짜 범위로 데이터를 필터링하고, CALCULATE는 그 조건에서 총 매출 금액을 계산합니다.


20. [중급] 특정 거래처의 총 매출액을 전체 매출액에 대한 비율로 계산하는 측정값을 만드세요.

[측정값 이름] 20거래처별매출비율
[활용 필드]
<판매> 테이블의 [매출금액], [거래처코드]
[사용 함수] CALCULATE, SUM, ALL, DIVIDE
정답:
20거래처별매출비율 = DIVIDE(CALCULATE(SUM('판매'[매출금액])), CALCULATE(SUM('판매'[매출금액]), ALL('판매'[거래처코드])))
해설:
ALL 함수는 거래처 필드를 제거한 상태에서 전체 매출을 계산하고, DIVIDE를 통해 특정 거래처의 매출을 전체 매출과 나눠 비율을 구합니다.