[이제와서 시작하는 Metabase 마스터하기 #6] 필터와 파라미터 - 인터랙티브 대시보드
시리즈 소개
“이제와서 시작하는 Metabase 마스터하기” 여섯 번째 시간입니다!
지난 시간에 대시보드를 만들었죠? 그런데 매번 전체 데이터를 다 보는 건 불편하지 않나요?
“이번 달만 보고 싶은데…“ “특정 지역만 보고 싶은데…“ “상위 10개만 보고 싶은데…“
→ 이럴 때 필터(Filter)를 사용하면 됩니다!
필터의 핵심:
클릭 한 번으로 보고 싶은 데이터만 골라서 보는 것!
이번 시간에 배울 것:
- 대시보드 필터 추가하기 (날짜 범위 선택)
- 드롭다운 필터 만들기 (카테고리 선택)
- 여러 차트에 동시 적용하기
필터가 뭔가요?
실생활 예:
필터 없이 (불편 😰):
1
2
매장: 서울점, 부산점, 대구점, 광주점...
모든 매장 데이터가 다 섞여서 보임
필터 추가 (편함 😊):
1
2
[매장 선택: 서울점 ▼]
→ 서울점 데이터만 딱!
Metabase 필터도 똑같습니다!
필터의 종류 (처음엔 2가지만 알면 돼요)
- Time 필터 (날짜 선택)
- “최근 7일”, “이번 달”, “지난 분기” 등
- Text/Category 필터 (항목 선택)
- “전자제품”, “의류”, “식품” 등
대시보드 필터 만들기
Step 1: 필터 추가
1
2
3
4
1. Dashboard 편집 모드
2. "Add a filter" 버튼 클릭
3. 필터 타입 선택
4. 설정 후 Done
필터 타입별 활용
1. Time (날짜/시간 필터)
기본 옵션:
1
2
3
4
5
6
7
8
Filter Type: Time
Options:
- All options (모든 선택지 제공)
- Monthly and Yearly
- Quarter and Year
- Single Date
- Date Range
- Relative dates
예제: 유연한 날짜 필터
1
2
3
4
5
6
7
8
1. Filter Type: Time > All options
2. Default: Previous 30 days
3. 사용자가 선택 가능:
- Today
- Last 7 days
- Last 30 days
- Last 3 months
- Custom range: 2025-01-01 ~ 2025-03-31
2. Location (위치 필터)
1
2
3
4
5
6
7
8
9
10
11
Filter Type: Location
Options:
- City
- State
- Country
- ZIP Code
Example:
Type: State
Default: All states
Multi-select: Enabled
3. ID (식별자 필터)
1
2
3
4
5
6
7
Filter Type: ID
Use case: 특정 사용자, 주문, 상품 필터링
Example:
Label: "User ID"
Default: (empty)
Placeholder: "12345 입력"
4. Number (숫자 필터)
1
2
3
4
5
6
7
8
9
10
11
Filter Type: Number
Options:
- Equal to
- Greater than
- Less than
- Between
Example:
Label: "최소 주문 금액"
Default: 0
Filter type: Greater than or equal to
5. Text (텍스트 필터)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Filter Type: Text or Category
Options:
- Dropdown list (특정 값 선택)
- Search box (자유 입력)
Example - Dropdown:
Label: "Product Category"
Values: Electronics, Clothing, Books
Default: All
Multi-select: Yes
Example - Search:
Label: "Customer Name"
Match: Contains
Placeholder: "이름 검색"
Step 2: Question에 필터 연결
필터를 추가한 후, 각 Question에 연결해야 합니다.
1
2
3
4
1. Dashboard 편집 모드
2. Question 카드 클릭
3. Filter 아이콘 클릭
4. 연결할 필드 선택
예제:
1
2
3
4
5
6
Date Range 필터 생성:
→ Orders Question: Created At 필드 연결
→ Revenue Question: Order Date 필드 연결
→ Customers Question: First Order Date 필드 연결
모든 Question이 동일한 날짜 범위로 필터링됨
Step 3: 필터 배치 및 스타일
1
2
3
4
5
Filter Settings:
- Label: "기간 선택"
- Required: No (선택 사항)
- Width: Auto / Full
- Position: Top (기본) / Sidebar
고급 필터 패턴
1. 필터 체이닝 (Cascading Filters)
한 필터의 선택이 다른 필터의 옵션에 영향:
graph LR
A[Country 선택] --> B[State 목록 필터링]
B --> C[City 목록 필터링]
구현:
1
2
3
4
5
6
7
8
9
10
11
12
13
Filter 1: Country
Type: Dropdown
Values: USA, Canada, Mexico
Filter 2: State
Type: Dropdown
Linked to: Country
Query: SELECT DISTINCT state WHERE country =
Filter 3: City
Type: Dropdown
Linked to: State
Query: SELECT DISTINCT city WHERE state =
동작:
- USA 선택 → State 목록에 미국 주만 표시
- California 선택 → City 목록에 캘리포니아 도시만 표시
2. 다중 값 선택
1
2
3
4
5
6
7
8
Filter: Product Category
Multi-select: Enabled
Default: All selected
User action:
1. "All" 선택 (기본)
2. "Electronics", "Books" 선택 (2개만)
3. 대시보드가 선택된 카테고리만 표시
3. 기본값 설정 전략
A. 전체 보기 (Default)
1
2
3
4
Filter: Date Range
Default: All time
Use case: 사용자가 원하는 범위 선택
B. 최근 데이터 (Recommended)
1
2
3
4
Filter: Date Range
Default: Last 30 days
Use case: 대부분의 분석은 최근 데이터 중심
C. 현재 기간 (Context-aware)
1
2
3
4
Filter: Date Range
Default: Current month
Use case: 월간 리포트 대시보드
D. 사용자 컨텍스트 (Personalized)
1
2
3
4
Filter: Region
Default:
Use case: 지역 매니저는 자동으로 자신의 지역만 표시
SQL 파라미터 (Advanced)
Native SQL 쿼리에서 파라미터 사용:
1. 기본 파라미터 문법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- Text 파라미터
SELECT *
FROM orders
WHERE customer_name =
-- Number 파라미터
SELECT *
FROM orders
WHERE total >
-- Date 파라미터
SELECT *
FROM orders
WHERE created_at BETWEEN AND
2. 선택적 파라미터
1
2
3
4
5
6
7
8
-- 파라미터가 비어있으면 해당 조건 무시
SELECT *
FROM orders
WHERE 1=1
[[AND created_at >= ]]
[[AND customer_state = ]]
-- [[ ]] 문법: 파라미터 값이 있을 때만 포함됨
예제:
1
2
3
4
5
state 파라미터가 비어있으면:
→ WHERE 1=1
state = "CA" 선택하면:
→ WHERE 1=1 AND customer_state = 'CA'
3. IN 절 파라미터
1
2
3
4
5
6
7
8
-- 다중 값 선택
SELECT *
FROM orders
WHERE category IN ()
-- categories 파라미터 설정:
-- Type: Category
-- Multi-select: Yes
동작:
1
2
사용자가 "Electronics", "Books" 선택:
→ WHERE category IN ('Electronics', 'Books')
4. Field Filter (필드 필터)
가장 강력한 파라미터 타입:
1
2
3
4
5
6
7
8
SELECT *
FROM orders
WHERE
-- date_filter 파라미터 설정:
-- Type: Field Filter
-- Widget: Date Range
-- Field: created_at
장점:
1
2
3
4
5
6
사용자 선택:
- "Last 30 days" → WHERE created_at >= CURRENT_DATE - INTERVAL '30 days'
- "2025-Q1" → WHERE created_at BETWEEN '2025-01-01' AND '2025-03-31'
- "Is null" → WHERE created_at IS NULL
Metabase가 자동으로 올바른 SQL 생성
5. 동적 GROUP BY
1
2
3
4
5
6
7
8
9
10
11
SELECT
as dimension,
SUM(total) as revenue
FROM orders
WHERE created_at >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY
ORDER BY revenue DESC
-- grouping_field 파라미터:
-- Type: Field
-- Default: category
사용자 선택:
1
2
3
4
5
6
Dropdown:
- Product Category
- Customer State
- Payment Method
선택에 따라 GROUP BY 차원 변경
인터랙티브 대시보드 구축 실습
예제: 판매 분석 대시보드
요구사항:
- 기간 선택 가능
- 카테고리 필터
- 지역 필터
- TOP N 상품 개수 조정
Step 1: 필터 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Filter 1: Date Range
Type: Time - All options
Label: "기간"
Default: Last 30 days
Filter 2: Categories
Type: Text/Category - Dropdown
Label: "카테고리"
Values: (Auto from field)
Multi-select: Yes
Default: All
Filter 3: Region
Type: Location - State
Label: "지역"
Multi-select: Yes
Default: All
Parameter 1: Top N
Type: Number
Label: "상위 몇 개?"
Default: 10
Step 2: Question 생성 (SQL)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- Question: Top Products by Revenue
SELECT
product_name,
SUM(quantity) as units_sold,
SUM(total) as revenue
FROM orders
WHERE 1=1
[[AND created_at BETWEEN AND ]]
[[AND category IN ()]]
[[AND state IN ()]]
GROUP BY product_name
ORDER BY revenue DESC
LIMIT
Step 3: 대시보드 연결
1
2
3
4
5
6
1. 모든 필터를 대시보드에 추가
2. 각 Question의 파라미터를 필터에 매핑:
- date_range → Date Range 필터
- categories → Categories 필터
- region → Region 필터
- top_n → Top N 파라미터
결과:
사용자가 다음 선택:
1
2
3
4
기간: Last 7 days
카테고리: Electronics, Books
지역: CA, NY
상위 몇 개: 20
모든 차트가 이 조건으로 자동 필터링됨.
URL 파라미터
대시보드 URL에 파라미터를 포함하여 특정 뷰로 바로 이동:
1. URL 구조
1
2
3
4
https://metabase.company.com/dashboard/123?
date_range=past30days
&category=Electronics
®ion=CA
2. 파라미터 인코딩
날짜:
1
2
3
Past 30 days: ?date_range=past30days
Last week: ?date_range=past7days
Custom: ?date_range=2025-01-01~2025-03-31
카테고리 (다중 선택):
1
2
Single: ?category=Electronics
Multiple: ?category=Electronics&category=Books
숫자:
1
2
?min_amount=100
?top_n=20
3. 활용 사례
A. 이메일 리포트 링크
1
2
3
4
5
6
7
8
Subject: 주간 영업 리포트
본문:
지난 주 실적을 확인하세요:
https://metabase.company.com/dashboard/sales?date_range=past7days
이번 달 누적:
https://metabase.company.com/dashboard/sales?date_range=thismonth
B. 슬랙 알림
1
2
3
🚨 CA 지역 매출 급증!
상세 보기: https://metabase.company.com/dashboard/123?region=CA&date_range=today
C. 역할별 맞춤 뷰
1
2
3
4
5
6
7
8
Sales Manager:
→ ?region=&team=
Product Manager:
→ ?category=
Executive:
→ ?view=summary (파라미터로 요약 모드 활성화)
필터 성능 최적화
1. 필터 순서 최적화
쿼리 실행 흐름:
graph TD
A[Raw Data] --> B[Filter 1: Date]
B --> C[Filter 2: Category]
C --> D[Filter 3: Status]
D --> E[Aggregation]
E --> F[Results]
권장 순서:
1
2
3
4
1. Date/Time (가장 많이 데이터 제거)
2. Indexed fields (빠른 조회)
3. Category/Enum (cardinality 낮음)
4. Text search (가장 느림)
예제:
1
2
3
4
5
6
7
8
9
-- 좋은 순서
WHERE created_at >= '2025-01-01' -- 90% 데이터 제거
AND category = 'Electronics' -- 남은 데이터의 80% 제거
AND status = 'completed' -- 최종 필터링
-- 나쁜 순서
WHERE customer_name LIKE '%Kim%' -- 전체 스캔
AND status = 'completed'
AND created_at >= '2025-01-01'
2. 필터 기본값 설정
1
2
3
4
❌ Default: All time (전체 데이터 로드)
✅ Default: Last 30 days (최근 데이터만)
이유: 대부분의 분석은 최근 데이터 중심
3. 캐싱 활용
1
2
3
4
5
6
7
Admin > Settings > Caching
Enable:
- Query results caching: 1 hour
- Dashboard caching: 15 minutes
효과: 같은 필터 조합 재사용 시 즉시 응답
4. 인덱스 활용
데이터베이스 레벨:
1
2
3
4
5
6
7
8
-- 자주 필터링되는 컬럼에 인덱스 생성
CREATE INDEX idx_orders_created_at ON orders(created_at);
CREATE INDEX idx_orders_category ON orders(category);
CREATE INDEX idx_orders_state ON orders(state);
-- 복합 인덱스 (자주 함께 사용되는 필터)
CREATE INDEX idx_orders_date_category
ON orders(created_at, category);
5. 필터 개수 제한
1
2
3
4
5
6
7
권장: 3-5개 필터
최대: 7개 필터
이유:
- 너무 많으면 사용자 혼란
- 쿼리 복잡도 증가
- 성능 저하
사용자 속성 기반 필터
1. 사용자 속성 설정
1
2
3
4
5
6
Admin > People > User > Edit
Attributes:
- department: Sales
- region: West
- level: Manager
2. 필터에 사용자 속성 적용
1
2
3
4
5
SELECT *
FROM orders
WHERE region =
-- Sales 팀의 Jane은 자동으로 West 지역만 볼 수 있음
3. 조건부 접근 제어
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM orders
WHERE 1=1
[[AND (
= 'Executive'
OR region =
)]]
-- Executive는 모든 지역 볼 수 있음
-- Manager는 자신의 지역만
실전 연습 문제
연습 1: 기본 필터 (초급)
과제: 이커머스 대시보드에 필터 추가
- 날짜 범위 필터 (Last 30 days 기본)
- 카테고리 다중 선택 필터
- 최소 주문 금액 필터 ($0 기본)
해답 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Filter 1: Date Range
Type: Time > All options
Label: "주문 기간"
Default: Previous 30 days
Filter 2: Categories
Type: Category > Dropdown
Label: "상품 카테고리"
Field to map: category
Multi-select: Yes
Default: All categories
Filter 3: Minimum Amount
Type: Number
Label: "최소 주문 금액"
Default: 0
Filter type: Greater than or equal to
연결:
- Revenue chart → created_at, category, total
- Orders chart → created_at, category, total
- Products table → created_at, category, total
연습 2: 필터 체이닝 (중급)
과제: 지역 필터 체이닝 구현
Country → State → City 순서로 필터링
해답 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- Question 1: States (Country에 따라 변경)
SELECT DISTINCT state
FROM customers
WHERE country =
ORDER BY state
-- Question 2: Cities (State에 따라 변경)
SELECT DISTINCT city
FROM customers
WHERE country =
AND state =
ORDER BY city
-- Main Dashboard Query:
SELECT *
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE 1=1
[[AND c.country = ]]
[[AND c.state = ]]
[[AND c.city = ]]
연습 3: 동적 대시보드 (고급)
과제: 사용자 역할별 자동 필터링 구현
- Sales Rep: 자신의 고객만
- Regional Manager: 자신의 지역만
- Executive: 모든 데이터
해답 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- User Attributes 설정:
-- role: sales_rep | regional_manager | executive
-- region: West | East | North | South
-- sales_rep_id: 123
-- Dashboard Query:
SELECT
o.order_id,
o.total,
c.name,
c.region,
sr.name as sales_rep
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN sales_reps sr ON c.sales_rep_id = sr.id
WHERE
CASE
WHEN = 'sales_rep' THEN
sr.id =
WHEN = 'regional_manager' THEN
c.region =
WHEN = 'executive' THEN
TRUE
ELSE FALSE
END
-- 각 사용자는 로그인하면 자동으로 자신의 데이터만 표시됨
Filter 설정:
1
2
3
4
5
6
7
Filter: Additional Region (선택 사항)
Type: Location > State
Label: "추가 지역 필터 (선택)"
Default: (empty)
사용자 속성 필터는 항상 적용됨
추가 필터는 범위를 더 좁힐 수만 있음 (확대 불가)
다음 단계
필터와 파라미터를 마스터했습니다. 다음 포스트에서는:
- SQL 고급 활용: Native Query로 복잡한 분석
- Custom Expressions: 계산 로직 구현
- Joins와 Subqueries: 여러 테이블 조합
요약
핵심 개념
graph TD
A[Filters & Parameters] --> B[Dashboard Filters]
A --> C[SQL Parameters]
A --> D[URL Parameters]
B --> B1[모든 Question 제어]
C --> C1[동적 쿼리 생성]
D --> D1[북마크 가능한 뷰]
B --> E[Filter Types]
E --> E1[Time]
E --> E2[Category]
E --> E3[Location]
E --> E4[Number]
E --> E5[Text]
필터 설계 체크리스트
계획 단계:
- 필수 필터 vs 선택적 필터 구분
- 기본값 결정 (최근 데이터 권장)
- 필터 체이닝 필요성 검토
- 사용자 속성 활용 여부 결정
구현 단계:
- 필터 순서 최적화 (날짜 → 인덱스 필드 → 기타)
- 모든 Question에 필터 연결 확인
- 필터 라벨 명확히 작성
- 기본값 설정 및 테스트
검증 단계:
- 필터 조합 테스트
- 성능 확인 (2초 이내 권장)
- URL 파라미터 동작 확인
- 모바일에서 필터 사용성 체크
다음 포스트에서는 SQL을 활용한 고급 분석 기법을 배웁니다!
📚 시리즈 전체 목차
🚀 기초편 (1-5화)
💪 활용편 (6-10화)
- [필터와 파라미터] (현재 글)
- SQL 네이티브 쿼리
- 데이터 모델링
- 자동화와 알림
- 권한과 보안