포스트

[이제와서 시작하는 Metabase 마스터하기 #6] 필터와 파라미터 - 인터랙티브 대시보드

[이제와서 시작하는 Metabase 마스터하기 #6] 필터와 파라미터 - 인터랙티브 대시보드

시리즈 소개

“이제와서 시작하는 Metabase 마스터하기” 여섯 번째 시간입니다!

지난 시간에 대시보드를 만들었죠? 그런데 매번 전체 데이터를 다 보는 건 불편하지 않나요?

“이번 달만 보고 싶은데…“ “특정 지역만 보고 싶은데…“ “상위 10개만 보고 싶은데…“

→ 이럴 때 필터(Filter)를 사용하면 됩니다!

필터의 핵심:

클릭 한 번으로 보고 싶은 데이터만 골라서 보는 것!

이번 시간에 배울 것:

  1. 대시보드 필터 추가하기 (날짜 범위 선택)
  2. 드롭다운 필터 만들기 (카테고리 선택)
  3. 여러 차트에 동시 적용하기

필터가 뭔가요?

실생활 예:

필터 없이 (불편 😰):

1
2
매장: 서울점, 부산점, 대구점, 광주점...
모든 매장 데이터가 다 섞여서 보임

필터 추가 (편함 😊):

1
2
[매장 선택: 서울점 ▼]
→ 서울점 데이터만 딱!

Metabase 필터도 똑같습니다!

필터의 종류 (처음엔 2가지만 알면 돼요)

  1. Time 필터 (날짜 선택)
    • “최근 7일”, “이번 달”, “지난 분기” 등
  2. 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 = 

동작:

  1. USA 선택 → State 목록에 미국 주만 표시
  2. 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
  &region=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: 기본 필터 (초급)

과제: 이커머스 대시보드에 필터 추가

  1. 날짜 범위 필터 (Last 30 days 기본)
  2. 카테고리 다중 선택 필터
  3. 최소 주문 금액 필터 ($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화)

  1. Metabase 소개와 핵심 개념
  2. 설치와 초기 설정
  3. 샘플 데이터 둘러보기
  4. 첫 차트 만들기 - 실습 완전정복
  5. 대시보드 만들기 - 한 화면에 모으기

💪 활용편 (6-10화)

  1. [필터와 파라미터] (현재 글)
  2. SQL 네이티브 쿼리
  3. 데이터 모델링
  4. 자동화와 알림
  5. 권한과 보안

🎯 고급편 (11-16화)

  1. 임베딩과 공유
  2. 성능 최적화
  3. 멀티 데이터소스
  4. 커스터마이징
  5. 운영과 모니터링
  6. 실전 프로젝트
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.