개요
팩트 테이블은 실적, 판매 수량과 같은 수치를 차원 ID 들과 함께 매핑하여 저장하는 테이블이다. 이때 저장되는 데이터를 몇 가지 특징으로 나눌 수 있다. 이 특징에 따라서 해당 수치값을 어떻게 저장해야 하는지, 어떻게 계산하여 새로운 마트로 구성할 수 있는지가 다를 수 있다. 이글에서는 이 부부에 대해서 다루어 보고자 한다.
가산성
수치값은 대부분 합산하여 활용하는 것이 직관적이다. 하지만 모든 수치값이 합산하여 계산할 수 있는 것은 아니다. 합산해서는 안 되는 값을 합산하여 계산하여 활용하거나 저장할 경우 의미없는 데이터를 조회하게 될 뿐이다. 이를 방지하기 위해서라도 저장되는 데이터의 가산성에 대해서 제대로 이해하고 있을 필요가 있다. 데이터의 가산성은 완전 가산성, 반 가산성, 비가산성으로 나눌 수 있다.
기준일 | 제품 | 판매실적 | 재고 | 할인율 |
2024-07-01 | 제품 A | 10 | 50 | 10% |
2024-07-01 | 제품 B | 20 | 30 | 15% |
2024-07-02 | 제품 A | 5 | 45 | 10% |
2024-07-02 | 제품 B | 15 | 25 | 15% |
2024-07-03 | 제품 A | 12 | 40 | 5% |
2024-07-03 | 제품 B | 8 | 20 | 10% |
- 완전 가산성: 모든 차원에서 합산이 가능한 수치이다. 위 테이블에서 판매실적은 어떤 차원에서도 합계 값이 의미를 가진다. 즉 가산성이 있다.
- 반 가산성: 재고는 7월 1일자의 재고가 7월 2일자에 남아 있을 수도 있기에 날짜 범위를 넘어선 합산으로는 의미를 가지기 어렵다. 다만 7월 1일의 제품 A와 제품 B의 합산은 당일 총 재고로서의 의미를 지닐 수 있다.
- 비 가산성: 할인율은 합산하여도 의미가 없으며 평균이나 다른 방법으로 분석해야한다.
Null값 처리
수치 데이터에는 null 값이 존재할 수 있다. 이때 null 값에 특별한 의미가 있는 게 아니라면 0으로 대체를 하는 것이 좋다. 대부분의 BI 툴에서는 null 값에 대한 자체적인 대안 방법이 있고 sql을 사용하여 조회하는 사람에게 있어서도 null 값을 대체하기 위한 방법을 사용하고 있기에 문제가 될 여지는 적으나 null값은 결국 해당 데이터가 없었음을 의미하기에 수치 상으로는 0으로 대체되는 것이 옳다.
차원테이블과 연결되는 외부키가 null 값인 경우에는 데이터 연결의 문제가 발생할 수 있다. 제품 ID 컬럼의 값이 null이라면 제품과 조인하여 조회할 경우 연결 오류, 데이터 손실이 발생할 수 있다. 만약에 정말 제품이 지정되지 않았다는 의미를 부여하고 싶다면 더미 값을 사용하여 대체할 수 있다. 더미 값은 제품 ID와 겹치지 않도록 유니크한 값, 예를 들면 9999나 -1을 활용하여 지정할 수 있다. 날짜값이 없는 경우에도 1900-01-01과 같은 더미 날짜를 활용할 수 있다.
결론
팩트 테이블에서 데이터의 가산성과 Null 값에 대해 알아보았다. 데이터를 다루는 사람의 입장에서는 상식적으로 보일 수도 있는 문제들이다. 재고를 날짜 관계없이 합산하거나 비율, 퍼센테이지를 합계를 낸다거나 하는 문제를 내는 사람은 데이터를 이제 막 만지기 시작한 사람이거나 해당 데이터가 어떤 값인지 관심 없는 사람이 아닌이상 없을 것이기 때문이다. 더군다나 Null값 처리 문제는 SQL을 짜면서도 많이 마주치게 되는 문제이기에 데이터를 다루다보면 익숙해지는 문제이기도 하다. 그러나 그런만큼 흔하게 마주치는 문제이기에 이를 어떻게 나누고 다루어야 할지 정리해두는 것도 필요하다고 생각했다. 실제로 같이 프로젝트를 진행하는 사람 중에서 실적을 테이블로 만들어서 보여줘야하는 화면 개발자가 목표 대비 실적율을 총계란에 합산해서 보여주는 실수를 저지르는 것도 본 일이 있다. 화면 개발을 하는 입장에서 데이터에 관심이 없었거나 비율은 평균을 내는 게 보통이라는 걸 이해하고 있지 못했던 것으로 보인다. 그런 실수를 하지 않기 위해서라도 기초는 확실히 살펴둘 필요가 있다고 생각한다.
'BI' 카테고리의 다른 글
자주하는 증감률 계산 실수 (0) | 2025.03.14 |
---|---|
DW/ETL - 기간 누계(YTD, MTD) 데이터 (0) | 2024.07.27 |
DW/ETL - 스타 스키마와 스노우플레이크 스키마 (0) | 2024.07.12 |
DW/ETL - 팩트 테이블과 차원 테이블 설계 (0) | 2024.07.08 |
DW/ETL - 차원 모델링 (0) | 2024.07.06 |