|

맞춤 쿼리(커스텀 쿼리) 활용하기 – 사용자 정의 매개변수


지난 포스트에서 우리는 기간 매개변수를 활용하여 기간별 매출 비교, 기간에 따른 거래처별 매출을 비교하는 기능과, 기간 매개변수를 활용하여 동적으로 날짜를 표시해주는 차트의 헤더를 제작하는 방법까지 살펴보았습니다. (⬇️ 아래 이미지 참조)

루커 스튜디오와 빅쿼리를 연동할 때 이렇게 맞춤 쿼리(커스텀 쿼리)를 사용하면 데이터를 보다 동적으로 불러올 수 있다는 것을 알 수 있었지요?


이번 포스트에서는 맞춤 쿼리 기능을 한 층 더 깊이 활용해보겠습니다. 루커 스튜디오에는 매개변수를 사용자가 정의하는 기능이 있습니다. 이러한 매개변수는 드롭다운을 통해서 조작할 수 있으며, 드롭다운에서 선택한 값에 따라 쿼리에 정해진 값을 전달할 수 있습니다.

예를 들어, 루커 스튜디오에서 ‘품목’ 이라는 매개변수를 생성했다고 가정해보겠습니다.


이 ‘품목’ 매개변수에 ‘사과’, ‘배’, ‘바나나’ 를 정의하였습니다. 이제 드롭다운을 클릭하면 아래와 같이 정의된 항목들이 나오고, 여기서 선택한 값이 맞춤 쿼리에 전달이 되는 것입니다.


이 매개변수를 빅쿼리에 전달하는 방법은 맞춤 쿼리에서 매개변수 이름을 기입하기만 하면 됩니다. 아래 예시 쿼리를 보면 WHERE 조건절에서 ‘품목’ 매개변수를 사용하였습니다.


💡‘품목’ 앞에 붙어있는 ‘@’ 표시는 이 문자가 매개변수라는 것을 식별시켜주는 표시입니다.


WHERE 조건절에서 테이블에 있는 품목명과 ‘@품목’ 의 값이 일치하는 것만 SELECT하는 것이지요. 예시에서는 ‘사과’를 선택하였으므로 사과 품목에 대한 데이터만 불러오게 됩니다. 이해를 돕기 위해 단순하게 필터링 하는 수준의 쿼리문이었지만 이 기능은 훨씬 더 많은 것을 가능하게 합니다.

이제 기간 매개변수에 더해서 사용자가 직접 정의한 매개변수를 활용하여 아래의 차트를 완성해보겠습니다.

1️⃣: 차트의 측정 기준을 ‘거래처별’, ‘품목별’, ‘채널별’, ‘판매몰별’로 변경하는 기능

⇒ 드롭 다운에서 선택하는 기준에 따른 ‘매출’ 또는 ‘수량’을 집계하고, 기간별로 비교 값을 보여줍니다.

2️⃣: 차트의 측정 항목을 ‘매출’, ‘수량’ 으로 변경하는 기능

⇒ 드롭 다운에서 선택한 항목에 따라 ‘매출’ 또는 ‘수량’을 보여줍니다.

3️⃣: 반품 건을 집계에 포함할 것인지 설정하기

⇒ 드롭 다운에서 반품 건에 대하여 ‘매출’ 또는 ‘수량’에 포함시킬 것인지를 설정합니다.

💡예시에서 반품 건은 아래와 같이 원본 데이터에서 판매 수량이 -(음수) 인 것을 의미합니다.



💡오늘 사용할 예시는 지난 포스트에서 이어지는 내용으로, 이전 포스트를 먼저 살펴보는 것이 내용을 이해하는데 도움이 됩니다. 아래 링크를 확인해주세요.

맞춤 쿼리(커스텀 쿼리) 활용하기 – 기간 매개변수

맞춤 쿼리(커스텀 쿼리) 활용하기 – 기간 매개변수 2


1. 매개변수 추가하기


먼저 매개변수를 추가해보겠습니다. 수정 화면 상단에서 ‘리소스’ → ‘추가된 데이터 소스 관리’를 클릭합니다.


하단의 ‘데이터 소스 추가’ 버튼을 클릭합니다.


빅쿼리(BigQuery) 선택‘맞춤 검색어’프로젝트 선택쿼리 입력창으로 이동합니다.


하단에 매개변수 설정 메뉴가 나오지요? 오늘 사용할 매개변수는 1️⃣기간 매개변수, 2️⃣측정 기준, 3️⃣측정 항목, 4️⃣반품여부를 포함할 것인지 결정하는 총 4개의 매개변수가 필요합니다. 하나씩 추가해보겠습니다.

💡이 포스트에서는 빅쿼리 테이블에 있는 어떤 컬럼을 select할 것인지 매개변수를 통해 조작할 것이기 때문에 일부 매개변수는 테이블의 실제 컬럼명을 참조합니다. 예시에서 사용할 스키마 구조는 다음과 같습니다.


2-1. 기간 매개변수 추가


‘기간 매개변수 사용 설정’을 체크하여 기간 매개변수 사용을 설정합니다. 이렇게 설정한 기간 매개변수는 SQL식별자에 표기되어있듯이 @DS_START_DATE, @DS_END_DATE 로 정의되어 있어서 쿼리에 직접 입력하여 사용할 수 있습니다.


2-2. 측정 기준 매개변수 추가


하단의 ‘매개변수 추가’ 버튼을 클릭합니다.


‘매개변수 추가’를 클릭하면 매개변수 추가 화면이 나오는데, 여기서 ‘매개변수 이름’은 수정 화면에서 데이터 목록에 표시되는 필드의 이름을 뜻합니다. 따라서 매개변수를 식별할 수 있는 이름으로 지정하였습니다. ‘매개변수 ID’는 맞춤 쿼리에서 실제로 참조하는 매개변수명 입니다. 매개변수 ID 역시 식별할 수 있는 이름으로 지정하였습니다.

💡‘허용된 값’ 에는 ‘모든 값’과 ‘값 목록’이 있습니다. ‘모든 값’으로 설정하면 매개변수에는 사용자가 어떤 값이든 입력하고 그 값을 맞춤 쿼리에 전달할 수 있습니다. 이 포스트에서는 측정 기준의 범위가 정해져있으므로 ‘값 목록’을 선택하였습니다.



값 목록’에서 ‘’은 매개변수에 저장되는 실제 값을 뜻하고, ‘라벨’은 루커 스튜디오의 UI에서 표시되는 이름을 뜻합니다. 드롭다운에 매개변수를 넣을 때 목록에 보여지는 것들이 바로 ‘라벨’ 입니다. 예를 들어, 드롭다운에서 ‘거래처별’을 선택하면 @SELECT_DIMENSION 변수는 그 값인 ‘shopName’을 전달받는 것이지요. 여기서는 빅쿼리의 컬럼명과 일치하게 값을 설정하였습니다.

이렇게 매개변수를 추가한 뒤, 드롭다운에서 선택하면 맞춤 쿼리에 선택한 매개변수의 ‘’을 전달할 수 있게 됩니다. 측정 기준을 @SELECT_DIMENSION 으로 정의하였다는 것을 기억해주세요.


💡루커 스튜디오의 매개변수에 대해 더 자세히 알아보려면 구글에서 제공하는 다음의 공식 문서를 참조해주세요.










2-3. 측정항목(매출/금액) 매개변수 추가


측정항목 매개변수의 설정은 다음과 같습니다. 동작하는 방식은 ‘측정기준’과 동일합니다. 빅쿼리의 원본 테이블의 컬럼을 참조할 수 있도록 원본 컬럼명을 각각 ‘revenue’, ‘quantity’로 입력하였습니다.


측정 항목 매개변수는 @SELECT_METRIC 로 정의하였습니다.

2-4. 반품 포함 여부 매개변수 추가


반품을 매출과 수량에 포함할 것인지의 여부를 결정하는 매개변수입니다. 이 매개변수는 데이터 세트의 컬럼을 참조하지 않기 때문에 ‘값’에는 쿼리 내에서 식별할 수 있도록 임의로 정의하였으며 이 매개변수의 ID는 @RETURN_CONDITIONS 로 정의하였습니다.


이렇게 사용할 모든 매개변수를 추가하였습니다. 이제 SQL식별자를 통해 매개변수를 쿼리에 직접 사용할 수 있게 되었습니다.


이렇게 추가한 매개변수를 어떻게 쿼리에서 사용하는지 다음 단계로 넘어가보겠습니다.

3. 쿼리 입력하기


쿼리는 지난번 포스트에서 사용한 것과 비슷합니다. 쿼리의 목적은 다음과 같습니다.

  1. 선택 기간의 측정 기준에 따른 매출 또는 수량 데이터 불러오기
  2. 선택 기간의 측정 기준에 따른 1년 전, 1개월 전, 2개월 전, 3개월 전 매출 또는 수량 불러오기
  3. 반품 포함 여부에 따라 매출/수량을 합산하도록 조건 설정하기
  4. 비교 분석할 수 있도록 불러온 데이터들을 하나의 테이블로 통합하기


쿼리가 길어보이지만 각각의 CTE가 동작하는 로직은 모두 비슷합니다. 이 중 2가지 CTE만 선택하여 분석해보면 충분히 이해할 수 있습니다. 아래 CTE는 3개월 전 매출 또는 수량을 불러오는 쿼리입니다. 앞서 정의했던 각각의 매개변수가 SQL식별자를 통해 사용되고 있는것이 보이지요?


각 부분을 하나씩 살펴보겠습니다.

  • 측정기준(@SELECT_DIMENSION)

@SELECT_DIMENSION 매개변수를 CASE문에서 사용하였습니다. 이 매개변수에 shopName, item, channel, store 값들을 정의하였는데 각각의 값에 라벨명을 지정했던것이 기억나지요? 드롭다운에서 라벨들을 선택하면 그에 맞는 값들이 CASE문에서 동작할 것입니다.

예를 들어 드롭다운에서 ‘거래처별’을 선택하면 이 매개변수에는 shopName, ‘품목별’을 선택하면 item이 맞춤 쿼리에 전달되는 것입니다.

💡CASE 구문이란? 조건에 따라 다른 값을 반환하는 SQL의 조건문입니다. 기본 사용 방법은 다음과 같습니다.


조건 1이 참이면 결과1을 반환, 조건 1이 거짓이고 조건2가 참이면 결과2를 반환합니다. 모든 조건이 거짓이면 기본 결과를 반환합니다.


  • 측정항목(@SELECT_METRIC)

@SELECT_METRIC 매개변수 역시 CASE문에서 사용하였습니다. 이 매개변수에 revenue, quantity 값을 정의하였는데 각각의 값의 라벨은 ‘매출’과 ‘수량’이었습니다. 역시 드롭다운에서 ‘매출’을 선택하면 매개변수는 revenue를, ‘수량’을 선택하면 quantity를 전달할 것입니다.

  • 기간 매개변수(@DS_START_DATE, @DS_END_DATE)

기간 매개변수는 STRING 형태로 전달되기 때문에 날짜 형태로 파싱해주어야 합니다. 각각의 CTE에서는 이 기간 매개변수를 WHERE 조건 절에 사용하여 전년도, 1개월 전, 2개월 전, 3개월 전 매출 또는 수량을 집계합니다. BETWEEN은 SQL에서 범위 조건을 지정할 때 사용하는 연산자입니다. 보통 날짜나 숫자 범위를 필터링할 때 사용합니다.

  • 반품 포함 여부(@RETURN_CONDITIONS)

이 매개변수는 WHERE절에서 데이터를 필터링 하는 역할을 합니다. @RETURN_CONDITIONS가 ‘include’이면 조건 없이 모든 매출 또는 수량을 포함합니다. 하지만 @RETURN_CONDITIONS가 ‘exclude’이면 매출 또는 수량이 음수인 것은 제외하지요.

💡아래 조건문에서 @RETURN_CONDITIONS 의 선택 값에 따라 CASE문에서 정의된 ‘selectMetric’을 직접 사용하지 않는 이유는 무엇일까요? selectMetric은 CASE 문을 사용해 SELECT절 안에서만 정의되는 별칭(Alias)이기 때문입니다. 이 별칭은 SQL 실행 순서 상 WHERE절에서는 인식이 되지 않습니다.

GROUP BY로 그룹화된 결과에 대해 조건을 걸 수 있는 HAVING절을 사용하면 ‘selectMetric’을 사용할 수 있지만, 반품 건까지 이미 그룹화되어있는 결과에 대해서 필터링을 하는 것이기 때문에 값이 정확하지 않습니다. 따라서 이 경우에는 WHERE절에 조건을 사용하는 것이 적합합니다.



다음으로 검토할 CTE는 다음과 같습니다. 이것은 각 기간별 CTE를 FULL OUTER JOIN 하여 통합하는 것입니다.


지난 포스트에서 설명하였듯이 FULL OUTER JOIN 은 두 테이블 간의 모든 행을 포함하여 조인하고 COALESCE() 는 여러 인수 중 NULL 이 아닌 첫 번째 값을 반환합니다. 두 구문을 사용해서 모든 날짜를 포함하여 데이터 손실 없이 CTE들을 통합하는 것입니다. 같은 이유에서 측정 항목인 매출/수량에도 판매가 없는 경우에는 0으로 설정하였습니다.

💡FULL OUTER JOINCOALESCE() 구문이 본 포스트에 적용된 원리에 대해서 더 자세히 알아보고 싶다면 아래의 포스트를 참조해주세요.

FULL OUTER JOIN과 COALESCE를 활용해 여러 개의 테이블을 깔끔하게 조인하기


쿼리 작성을 마쳤으니 이제 데이터 소스를 추가해보겠습니다. 우측 하단의 ‘추가’ 버튼을 클릭합니다.


데이터 소스를 다음과 같이 한글로 변경하였습니다. 각 필드를 클릭하면 변경할 수 있으며, 변경 후에는 원래의 필드명이 무엇이었는지 확인할 수 없으므로 원본 필드명은 ‘설명’ 란에 기입해두면 편리합니다.


이제 매개변수를 직접 조작할 수 있는 드롭다운을 추가해보겠습니다.

4. 드롭다운 설정


수정 화면에서 ‘컨트롤 추가’ → ‘드롭다운 목록’을 선택 후 적절한 곳에 배치합니다.


우측 필드 목록에는 맞춤 쿼리에서 추가했던 매개변수가 나옵니다. 매개변수를 드롭다운의 컨트롤 필드로 옮겨줍니다. 맞춤 쿼리를 작성할 때 사용했던 나머지 매개변수에 대하여도 동일한 작업을 진행합니다.


5. 차트 설정


차트에는 매출/수량 필드들을 측정 항목에 삽입합니다. 이 필드들은 매개변수 값에 따라 동적으로 변화하는 필드들이지요.


💡차트의 헤더를 별도로 제작하는 방법은 지난 포스트에서 살펴보았습니다. 내용이 궁금하다면 아래의 포스트를 참조해주세요.

맞춤 쿼리(커스텀 쿼리) 활용하기 – 기간 매개변수 2


차트가 완성되었으니 한번 테스트해보겠습니다. 측정기준을 ‘품목별’로 변경하면 아래 이미지와 같이 품목별 매출을 보여줍니다.


이번에는 측정항목을 ‘수량’으로 변경하였습니다. 품목별 판매 수량 차트로 잘 바뀌었지요?


마지막으로 ‘반품 포함 여부’를 반품을 포함하는 것으로 설정하였습니다. 반품을 포함하기 때문에 총 합계에서 숫자가 내려간 것이 보입니다.


이것으로 오늘 목표로 했던 대시보드를 완성하였습니다. 만약 이 기능들을 맞춤 쿼리(커스텀 쿼리)를 사용하지 않고 구현한다면 품목별 매출과 수량 차트, 거래처별 매출과 수량 차트 등 차트를 여러개 추가해야만 합니다. 이처럼 맞춤 쿼리에서 사용자 매개변수를 활용하면 차트의 재사용성이 높아진다는 장점이 있습니다.

매개변수와 맞춤 쿼리를 사용하니 데이터베이스와 소통을 하는 것과 같은 기분이 드는 것 같지요? 🤩 루커 스튜디오 사용자라면 이 유용한 기능을 꼭 실무에도 적용해보시길 바랍니다!



다음 포스트에서는 오늘 살펴본 내용에 이어서, 매개변수를 사용해서 정렬 기준과 순서를 변경하는 방법을 소개하겠습니다.

Similar Posts