파워쿼리에는 간단히 버튼 하나만 클릭하면 복잡한 수식을 입력하는 것과 똑같은 효과를 볼 수 있는 명령이 있는데요.

그 중 대표적인 것이 그룹화입니다.

 

엑셀을 써보신 분들은 조건에 맞는 합이나 행의 개수를 파악하기 위해 SUMIF, SUMIFS, COUNTIF, COUNTIFS같은 수식을 수시로 썼을 거라 생각합니다.

 

처음에는 복잡해 보이지만 수식을 이해하면 이처럼 편한 수식이 없죠.

아마 엑셀 수식 중 가장 많이 사용되는 수식중 하나가 아닐까 합니다.

 

DAX에서 FILTER를 이용해 구할 수 있지만, 만일 쿼리 에디터에서 작업을 해도 된다면 아주 쉽게 해결할 수 있습니다.


그룹화는 무엇인가?

 

그룹화는 위에 설명해 드린 데로 열의 조건에 따라 원하는 열의 데이터를 연산하는 것입니다. 조건이 몇 개든 요약하고자 하는 연산이 몇 개건 상관없이 한 번의 명령으로 실행되는 것이 장점이며, 아래에 보시는 것과 같이 합계, 평균 등 총 8개의 연산을 제공합니다.


그룹화 사용 방법

먼저 그룹화는 홈 탭을 통해 실행할 수 있으며, 명령 실행 후에는 위에서 보는 것과 같이 새 창이 나옵니다.

기본은 하나의 열을 조건으로 한 하나의 연산을 실행하는 것이고, 고급을 누르면 SUMIFS나 COUNTIFS와 같이 복수의 조건을 만들 수 있습니다.

그리고 집계 추가 버튼도 나오는 데 이를 이용해 추가 연산도 가능하게 됩니다.

 

만일 그룹화 명령을 실행하기 전에 복수의 열을 선택하면 바로 고급 옵션으로 들어가게 됩니다.


그룹화의 예

만일 아래의 표에서 Brand과 Type을 그룹으로 하여  총 판매량과 평균 리콜 비율을 알고 싶다면 Brand와 Type 두 열을 선택하고 그룹화를 누릅니다. 그다음 새 열 이름을 넣고 연산과 열을 선택하면 됩니다. 여기서는 연산을 합계, 평균 그리고 열은 Year와 Recall을 선택하면 되겠죠.

 


그룹화의 단점

그룹화를 실행하게 된다면 일단 쿼리내의 테이블이 그룹화된 형태로 바뀌게 됩니다. 이 말은 기존 데이터는 더 이상 볼 수 없다는 것을 의미합니다.

만약 데이터의 최종 형태가 그룹화라면 크게 상관없지만 그렇지 않다면 기존 데이터를 사용할 수 있는 다른 방법을 찾아봐야 합니다.

 

만약 데이터를 없애지 않고 계속 두고 싶다면

테이블 형태가 그룹화가 최종이 아니라 데이터를 이용해 전처리 작업을 더 진행하고 싶은 경우는 2가지 방법을 고려할 수 있습니다.

  • 기존 쿼리를 복사해 데이터를 그대로 두고 그룹화 명령을 실행한 뒤, 다시 기존 테이블로 돌아와  다른 작업을 진행
  • DAX에서 FILTER 명령으로 똑같은 효과를 얻을 수 있으므로, 쿼리 에디터를 빠져나와 측정값이나 데이터 보기 창에서 CALCULATE와 FILTER를 이용하여 함수를 만든다.

 

이상 그룹화에 대해 말씀드렸는데요, 쿼리 에디터 내에서는 복잡한 수식 없이 간단한 방법으로 조건에 따라 연산을 수행할 수 있으니 목적에 맞게 잘 사용하면 좋은 명령이라 생각합니다.

 

DAX에서 SUMIF함수는 존재하지 않습니다.

사실 보고서에서 슬라이서로 클릭만 하면 원하는 결과를 보여주기 때문에 딱히 필요가 없는 함수 일지 모릅니다.

아래와 같은 쿼리가 있다고 가정을 하겠습니다.

여기서 Zone A만의 합계를 구한다고 생각을 하면 엑셀에서는 SUMIF를 사용해서 A의 합계만 계산할 수 있습니다.

하지만 아래와 같이 Power BI에서는 슬라이서를 이용하면 간단히 해결이 될 수 있기 때문에 크게 문제가 되지 않았던 함수였는것 같습니다.

 

위에 보여지는 슬라이서에서 A를 클릭하면 딱히 수식을 이용하지 않더라도 Zone A의 합계가 자동 계산이 되어 카드로 표시가 되고, 1F를 선택하게 되면 자동으로 1F의 합계를 보여주게 되죠.

하지만 어떤 경우는 슬라이서를 사용하지 않고 계산을 해야하는 경우가 생길 수도 있죠.

이럴 때는 계산을 해야 하는데 DAX에서는 SUMIF함수가 존재하지 않는다라는 이야기는 처음에 했습니다.

DAX에서는 CALCULATE함수를 이용하면 해결이 가능합니다.

712는 Process의 합을 보여주고, 아래에 149는 CALCULATE함수를 이용해 Zone A만의 합산을 구한 것입니다.

간단히 정리를 하자면 FILTER함수로 Wall 쿼리의 Zone이라는 열에서 "A"만 추출한 Wall 쿼리의 Process열의 합산을 구하라는 식이 되겠습니다.

그럼 조금 전에 슬라이서로 A를 선택했을 때와 똑같은 값은 보여줍니다.

 

그리고 FILTER는 여러 번 반복해서 사용이 될 수 있습니다.

만약 1F에 있는 Zone A의 합계만 보고 싶다면 아래와 같이 필터를 하나 더 추가하면 됩니다.

SUMIFS = CALCULATE(SUM(Wall[Process]),FILTER(WALL,WALL[Zone]="A"),FILTER(Wall,Wall[Floor]="1F"))

그럼 엑셀에서 SUMIFS와 같은 수식이 만들어집니다.

간단히 DAX에서 SUMIF를 계산할 수 있는 CALCULATE함수에 대해 알아보았습니다.

CALCULATE내에는 꼭 SUM이 아니라 다른 함수도 쓰일 수 있기에 여러 함수를 이용해서 수식을 만들어 보는 것도 재미있는 일이라 생각합니다.

+ Recent posts