메타베이스는 UI로 강력한 필터 기능을 제공하고 있다.
사실, sql 쿼리를 어느 정도 쓸 수 있는 사람이라면 Metabase 적응이 크게 어렵지 않지만, 한 번 난관을 맞이하는 곳이 있다면 필터일 것이다.
공식 문서를 봐도 자세히 설명이 되어 있지 않고, 잘 설명된 한국어 블로그 글도 없어서 많은 삽질을 했다.
다른 사람들은 나만큼 오래 삽질을 하지 않기를 바라며 남기는 글이다.
날짜 필터 설정
우선, 새로운 용어와 개념이 많이 나올 예정이라, 가장 범용적으로 사용될 날짜 필터부터 살펴보며 자연스럽게 용어들을 설명해보려 한다.
날짜 필터를 설정하는 방법에는 두 가지가 있다.
첫째는 Date 필터를 두 개 만들어서 (start_date, end_date) 각각 설정해주는 방법이고,
둘째는 Field Filter를 사용하는 방법이다.
상황에 맞게 판단해 사용해주면 된다. (두 방법의 장단점은 뒤에서 설명할 예정이다.)
Date 필터로 날짜 필터 설정하기
필터는 variable이라는 것을 이용해야 한다. 개발을 하시는 분들이라면, 일상적으로 사용하는 variable, 변수와 같은 개념이다.
variable을 만들기 위해서는 {{ }}로 감싸주면 된다. 예를 들어, start_date라는 변수를 만들고 싶다면 쿼리 내에 {{start_date}}라고 써주면 되는 것이다.
거두절미하고 개발자는 코드지.
아래는 메타베이스에서 제공하는 sample database에서 유저를 조회하는 간단한 쿼리문이다.
SELECT
NAME
FROM
PEOPLE
여기에 start_date, end_date 두 개의 Date 필터를 설정해서 그 사이에 가입한 유저만 조회해보려 한다.
SELECT
NAME
FROM
PEOPLE
WHERE
CREATED_AT BETWEEN {{start_date}} AND {{end_date}}
우선 이렇게 {{start_date}}과 {{end_date}} 두 개의 변수를 만들어준다.
변수를 생성하면, 자동으로 오른쪽에 사이드바 하나가 생긴 게 보일 텐데,
자동으로 튀어나오지 않는다면, {x} 처럼 생긴 버튼을 눌러주면 된다.
변수 창이 생기면, Variable type을 Date로 설정해준다.
Filter widget label은 유저에게 보일 필터 이름을 설정하는 곳으로, 변수명과는 관련이 없으니, 원하는 이름으로 편하게 설정해주면 된다.
그리고 밑에서 이 변수가 required인지, 그리고 디폴트 값이 있는지 설정을 해주면 된다.
모두 설정해주고, 실행시켜 보면 이런 모습이다.
위에 필터로 2024년 1월 2일부터 1월 9일 사이에 가입한 사람으로 필터했고,
결과로 10개 남짓한 유저의 이름이 나온 것을 볼 수 있다.
Field filter로 날짜 필터 설정하기
그런데, 불편한 점이 있다. 사실 불편한 점이라기보다는 UX를 조금 더 개선할 수 있는 방법이 있다.
우선 두 개의 날짜를 따로 설정해주어야 하고, 현재 시점에서는 "디폴트로 저번 주 데이터만 보이게 해주세요."와 같은 요구사항을 만족시킬 수 없다. 사람이 직접 저번주 월요일부터 일요일 날짜를 각각 선택해주어야 한다.
그런 요구사항은 Field Filter라는 걸 적용하면 더 편하게 구현할 수 있다.
Field filter는 Date와 같이 변수를 만들어서 filter를 먹이는 방식 자체는 동일하지만,
테이블의 특정 필드에 필터를 먹일 수 있다.
예를 들면, people 테이블의 created_at 필드 자체를 물고 있을 수 있다는 의미가 된다.
다시 거두절미 하고 쿼리를 보면,
SELECT
NAME
FROM
PEOPLE
WHERE
{{date}}
쿼리는 이렇게 간단해진다.
별도의 between 로직을 써줄 필요 없이 WHERE {{date}} 하나면 된다. 나머지는 필드 필터에서 다 해준다.
variable type을 field filter로 설정해주고,
원하는 테이블과 필터를 선택해준다.
필터 위젯 타입은 원하는 형태에 따라 선택해주면 되는데, 각각의 기능은 아래와 같다.
1. Month and Year -> 연도와 월을 설정할 수 있다. ex) 2024년 1월
2. Quarter and Year -> 연도와 분기를 설정할 수 있다. ex) 2024년 1분기
3. Single Date -> 원하는 날짜 하루를 설정할 수 있다. ex) 2024년 1월 20일
4. Date Range -> 원하는 날짜 범위를 설정할 수 있다. ex) 2024년 1월 10일 - 2024년 1월 20일
5. Relative Date -> 상대적인 날짜를 선택할 수 있다. ex) 저번 주, 지난 7일, 저번 달, 작년 등
6. Date Filter -> 위 모든 것을 할 수 있다.
나는 가장 제약이 없는 Date Filter로 설정해주었다.
마지막으로 각자의 상황에 맞게 required 여부와 디폴트를 설정해주고 나면,
이렇게 잘 동작하는 것을 볼 수 있다.
Date와 Field Filter의 장단점
이렇게 날짜 필터를 설정하는 두 방법을 살펴보았는데, 각각에는 극명한 장단점이 있다.
일단 앞에서 잠시 언급했듯, Date필터는 사용자 입장에서 편하게 날짜를 설정할 수 없다는 단점이 있다.
반면, Field Filter를 통한 날짜 설정은 지난 주, 날짜 범위 등 다양한 범위의 날짜 필터 지원으로, 조금 더 유동적으로 날짜를 설정할 수 있다.
하지만, Field Filter는 한 필드에밖에 mapping하지 못하기 때문에, 만약 "오늘 가입한 사람 중에 오늘 구매 이력이 있는 사용자"와 같이 people과 orders 테이블의 created_at 필드에 동시에 같은 날짜를 설정해주어야 하는 경우, 각각에 매핑되는 필드 필터를 만들어 각각 필터로 설정해주어야 한다. 같은 날짜임에도 사용자는 뒷단의 동작 방식을 모르니 영문을 모르고 날짜를 두 개 설정해주어야 하는 것이다.
반면, Date 필터는 쿼리로 적용할 필드를 설정할 수 있으므로, 어느 한 필드에 종속되지 않는다.
대시보드에서 한 번에 날짜 필터 적용하기
대시보드에 여러 Question들을 놓고 한번에 날짜 필터를 설정하는 방법도 있습니다.
우선 대시보드에서 우측 상단의 연필 모양 아이콘을 눌러 대시보드 수정 모드로 들어갑니다.
그 후 필터 아이콘을 눌러 날짜 필터를 추가합니다.
그럼, 대시보드에 필터가 하나 만들어지고 우측에 설정 창이 하나 뜨는데,
여기서 디폴트 값을 설정해줄 수 있습니다.
저는 지난 7일로 설정해주겠습니다.
그 후 각 Question들의 필터와 연결해주어야 하는데,
우리는 아까 만들어 둔 {{date}} 필터와 연결해주겠습니다.
필터가 만들어지고 나면 각 Question들에 이렇게 어떤 column에 필터를 연결할지 여부를 묻습니다.
이 창이 보이지 않는다면, 생성된 필터 옆 설정 아이콘을 누르면 됩니다. (아래 사진의 경우 Date Filter 옆 설정 아이콘입니다)
Select를 눌러 아까 Question 내에 만든 {{date}} 필터를 선택해주겠습니다.
모든 Question들에 대해 설정을 끝내주고 Done/Save를 눌러주면 대시보드 내 일괄 필터 적용이 완료됩니다.
이렇게 대시보드 Date Filter 값을 바꿔주면 대시보드 내 모든 Question들에 해당 날짜가 적용되는 것을 볼 수 있습니다.
'개발 잡기술' 카테고리의 다른 글
이젠 진짜 알고리즘 공부 해야지..! 코드트리 사용기 (0) | 2024.02.29 |
---|---|
[Udemy 강의 리뷰] 옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트 (1) | 2024.02.18 |
Metabase(메타베이스)를 활용해 데이터 시각화하기 (1) | 2024.01.07 |
사이드 프로젝트에 미친 사람이 서비스 20개 만들면서 느낀 것들 (8) | 2023.12.10 |
Wix에서 카카오 API 사용하기 (도메인 에러 해결) (3) | 2023.05.17 |