주요 특징
스타 스키마는 집계할 수치와 외래 키를 팩트(Fact) 테이블에 두고, 상품명이나 고객 지역처럼 분류에 쓰는 정보는 차원(Dimension) 테이블로 나누는 데이터 모델이다.
이 예제에서는 주문 내역 12만 건이 담긴 order_items에 상품·고객·결제 수단·주문 상태·유입 채널 테이블을 연결한다.
| 테이블 | 역할 | 주요 컬럼 |
|---|---|---|
order_items | 팩트 | 주문일, 외래 키, 수량, 단가, 주문 금액 |
products | 차원 | 상품, 카테고리, 브랜드, 공급사 |
customers | 차원 | 고객명, 지역, 도시, 고객 등급 |
payment_methods | 차원 | 결제 수단, 결제 유형 |
order_statuses | 차원 | 주문 상태, 처리 단계 |
referral_channels | 차원 | 유입 채널, 유입 유형 |
ecommerceStar | 스타 스키마 | 팩트와 차원 테이블의 연결 정보 |
order_items에는 상품명이나 고객 지역이 들어 있지 않다. 대신 product_id, customer_id 같은 외래 키로 각 차원 테이블의 값을 찾아 주문 금액과 판매 수량을 집계한다.
스타 스키마 연결하기
먼저 팩트와 차원 테이블을 등록하고, createDataSet 배열의 마지막 항목에서 테이블 사이의 관계를 정의한다.
const tableMeta = [
{
name: 'order_items',
sourceUrl: '/asset/ecommerce-star-schema/ecommerce_order_items_xlarge.json',
table: {
fields: [
/* ... */
],
},
},
{
name: 'products',
sourceUrl: '/asset/ecommerce-star-schema/ecommerce_products.json',
table: {
fields: [
/* ... */
],
},
},
// customers, payment_methods, order_statuses, referral_channels ...
{
type: 'star',
name: 'ecommerceStar',
fact: 'order_items',
dimensions: [
{ table: 'products', foreignKey: 'product_id', primaryKey: 'id' },
{ table: 'customers', foreignKey: 'customer_id', primaryKey: 'id' },
{
table: 'payment_methods',
foreignKey: 'payment_method_id',
primaryKey: 'id',
},
{
table: 'order_statuses',
foreignKey: 'order_status_id',
primaryKey: 'id',
},
{
table: 'referral_channels',
foreignKey: 'referral_source_id',
primaryKey: 'id',
},
],
},
];foreignKey에는 팩트 테이블의 외래 키를, primaryKey에는 차원 테이블의 기본 키를 지정한다. primaryKey를 생략하면 차원 테이블의 첫 번째 컬럼을 기본 키로 사용한다.
큐브에서 차원 컬럼 참조하기
큐브의 table에는 팩트 테이블인 order_items 대신 스타 스키마 이름인 ecommerceStar를 지정한다.
차원 컬럼은 테이블.컬럼 형식으로 참조한다. 팩트 테이블의 컬럼은 quantity, total_price처럼 컬럼 이름만 적으면 된다.
const cubes = [
{
name: 'ecommerceAnalysis',
table: 'ecommerceStar',
schema: {
dimensions: [
{ name: '상품', source: 'products.name', type: 'str' },
{ name: '지역', source: 'customers.region', type: 'str' },
{ name: '결제 수단', source: 'payment_methods.label', type: 'str' },
{ name: '주문 상태', source: 'order_statuses.label', type: 'str' },
{ name: '유입 채널', source: 'referral_channels.label', type: 'str' },
{
name: '주문일',
source: 'date',
type: 'date',
dateFields: ['주문 연도;year', '주문 분기;quarter', '주문 월;month'],
},
],
measures: [
{
name: '주문 금액',
source: 'total_price',
type: 'f64',
aggregate: 'sum',
},
{
name: '판매 수량',
source: 'quantity',
type: 'f64',
aggregate: 'sum',
},
],
},
},
];화면에서 보기
처음에는 지역 → 카테고리 → 상품 순서로 행을 묶고, 연도별 주문 금액·판매 수량·주문 건수를 나란히 보여 준다. 북 헤더에서 인스펙터를 연 뒤, 필드 패널에서 결제 수단, 주문 상태, 유입 채널 등을 행·열·필터 영역으로 옮겨 집계 기준을 바꿀 수 있다.
| 조작 | 확인할 내용 |
|---|---|
| 주문 상태·결제 수단 필터 | 선택한 상태와 결제 수단에 해당하는 주문만 보기 |
| 지역을 유입 채널로 교체 | 지역별 결과와 유입 경로별 결과 비교하기 |
| 브랜드를 행에 추가 | 카테고리 아래를 브랜드별로 더 나누기 |
| 평균 단가를 값에 추가 | 주문 금액과 함께 평균 판매 단가 확인하기 |
설정 항목에 대한 자세한 설명은 데이터와 큐브의 스타 스키마를 참고한다.
플레이그라운드를 불러오는 중…