데모스타 스키마
주문 내역 12만 건을 상품·고객·결제 수단·주문 상태·유입 채널 테이블과 연결해 분석한다.

주요 특징

스타 스키마는 집계할 수치와 외래 키를 팩트(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',
        },
      ],
    },
  },
];

화면에서 보기

처음에는 지역 → 카테고리 → 상품 순서로 행을 묶고, 연도별 주문 금액·판매 수량·주문 건수를 나란히 보여 준다. 북 헤더에서 인스펙터를 연 뒤, 필드 패널에서 결제 수단, 주문 상태, 유입 채널 등을 행·열·필터 영역으로 옮겨 집계 기준을 바꿀 수 있다.

조작확인할 내용
주문 상태·결제 수단 필터선택한 상태와 결제 수단에 해당하는 주문만 보기
지역을 유입 채널로 교체지역별 결과와 유입 경로별 결과 비교하기
브랜드를 행에 추가카테고리 아래를 브랜드별로 더 나누기
평균 단가를 값에 추가주문 금액과 함께 평균 판매 단가 확인하기

설정 항목에 대한 자세한 설명은 데이터와 큐브의 스타 스키마를 참고한다.

플레이그라운드를 불러오는 중…