Fact vs Dimension Table และการออกแบบ Data Model แบบ Star
เคยไหมที่เวลาเราจะเริ่มทำ Data Analytics หรือต้องสร้าง Dashboard ขึ้นมาสักอันนึง เราพอรู้ว่าเราต้องใช้ข้อมูลอะไรบ้าง แต่ไม่รู้ว่าจะจัดตารางยังไง ควรจะมีกี่ Table แต่ละ Table ควรเชื่อมโยงกันยังไง ใช้เกณฑ์อะไรในการออกแบบตารางให้ไม่ใหญ่เกินไป ไม่มีข้อมูลเยอะเกินไป บทความนี้จะว่าด้วยเรื่องของ Data Model ที่เหมาะกับการทำ Data Analytics นั่นคือ Star Schema หรือ Snowflake Schema

ก่อนจะไปเจาะลึกเรื่องของ Fact และ Dimension เราต้องทำความเข้าใจ Data Model แบบ Star Schema และ Snowflake Schema กันก่อน ทั้งสองรูปแบบคือการจัดการโครงสร้างข้อมูลเพื่อเตรียมความพร้อมก่อนการทำ Data Aanlytics เพื่อการวิเคราะห์ข้อมูลแบบ Transactional ที่เน้นการบันทึกเหตุการณ์ที่เกิดขึ้นเป็นรายการในชีวิตประจำวัน หรือกิจกรรมปกติของธุรกิจ เช่น การสั่งซื้อ การโอนเงิน
โดยหลักการของทั้ง Star และ Snoflake นั้นเรียบง่ายคือ Fact Data จะอยู่ตรงกลาง โดยมีการเชื่อมโยงกับ Dimension Data ที่อยู่ล้อมรอบ
แล้ว Fact Data กับ Dimension Data คืออะไร?
Fact Data
Fact Data – หรือข้อมูลเท็จจริง เป็นข้อมูลที่เกิดขึ้นจากการบันทึก Transaction ที่เกิดขึ้น อาจะเป็น Transaction ย่อย เช่น ข้อมูลการขายสินค้า (แบบรายการต่อรายการ) หรือข้อมูลที่สรุปมาแล้ว เช่น ยอดขายประจำเดือน/ปี ข้อมูลจำนวนสินค้าคงคลัง ข้อมูลที่วัดได้จากมิเตอร์ IoT ต่าง ๆ เป็นต้น
ลักษณะของข้อมูลที่เป็น Fact Data
- สามารถวัดได้ (Measures): เป็นตัวเลขที่เราสนใจในการวิเคราะห์ เช่น ยอดขาย จำนวนสินค้า ต้นทุน กำไร ระยะเวลาในการให้บริการ อุณหภูมิ ความชื้น
- มีค่าเป็นตัวเลข (Numberic Value): มักมีตัวเลขเป็นองค์ประกอบในตาราง
- ปริมาณเพิ่มขึ้นตามระยะเวลาที่ผ่านไป: จำนวนข้อมูล (Rows) จะเพิ่มขึ้นเรื่อย ๆ ตามการบันทึกข้อมูล
- มีความละเอียด (Granularity): มักเป็นตารางที่เก็บข้อมูลในระดับละเอียดสุดของรายการ เช่น ข้อมูลการขายสินค้าแบบรายการละ 1 การชำระเงิน หรือเป็นข้อมูลที่ถูกสรุปต่อยอดมาจากข้อมูลระดับละเอียดสูง เช่น ข้อมูลการขายสินค้าต่อวัน
ตัวอย่าง Fact Table
Sale_Transaction
| Order_ID | Date_Key | Product_Key | Branch_Key | Quantity | Total_Amount (฿) |
|---|---|---|---|---|---|
| 10001 | 20250101M | P002 | B001 | 1 | 75 |
| 10002 | 20250101M | P001 | B001 | 2 | 130 |
| 10003 | 20250101A | P004 | B002 | 1 | 70 |
| 10004 | 20250102M | P005 | B003 | 1 | 85 |
| 10005 | 20250101E | P003 | B001 | 1 | 75 |
Dimension Data
Dimension Data – หรือข้อมูลเชิงอธิบาย เป็นข้อมูลที่ใช้ประกอบเพื่ออธิบายหรือขยายความสิ่งใดสิ่งหนึ่ง เช่น ฐานข้อมูลรายชื่อผลิตภัณฑ์ ฐานข้อมูลลูกค้า ฐานข้อมูลพนักงาน ข้อมูลสาขา ข้อมูลวันที่หรือปฏิทิน เพื่อใช้ในการขยายความข้อมูลที่อยู่ใน Fact Table เพื่ออธิบายว่า “ใคร”, “อะไร”, “ที่ไหน”, “เมื่อไหร่” หรือ “อย่างไร” ที่ Transaction นั้นเกิดขึ้น
ลักษณะของข้อมูลที่เป็น Dimension Data
- เป็นข้อมูลอธิบาย (Context): ให้รายละเอียดเกี่ยวกับข้อมูล Fact เพื่อใช้ต่อยอดในการแบ่งกลุ่ม กรอง หรือเจาะลึกได้ เช่น การวิเคราะห์ยอดขายตามกลุ่มผลิตภัณฑ์ (เชื่อม Fact เข้ากับฐานข้อมูลผลิตภัณฑ์) ตามกลุ่มลูกค้า (เชื่อมเข้ากับฐานข้อมูลลูกค้า) ตามไตรมาส (เชื่อมเข้ากับข้อมูลวันที่)
- ความนิ่งของข้อมูลสูงกว่า Fact Table: อาจจะเพิ่มขึ้นหรือลดลงตามการเปลี่ยนแปลงตามบริบท เช่น การเพิ่มผลิตภัณฑ์ใหม่ การขยายฐานลูกค้า การเข้า-ออกของพนักงาน เป็นต้น
- มีการจัดแบ่งกลุ่มหรือให้รายละเอียดเพิ่ม: ตัวอย่างเช่น ฐานข้อมูลผลิตภัณฑ์อาจมีข้อมูลรายละเอียดของสินค้าเชิงลึก ชื่อผู้ผลิต หรือหมวดหมู่ของสินค้า เป็นต้น
ตัวอย่าง Dimension Table
Product
| Product_Key | Product_Name | Category | Price (฿) |
|---|---|---|---|
| P001 | Espresso | Coffee | 65 |
| P002 | Latte | Coffee | 75 |
| P003 | Cappuccino | Coffee | 75 |
| P004 | Green Tea Latte | Tea | 70 |
| P005 | Chocolate Frappe | Frappe | 85 |
Date/Time
| Date_Key | Date | Day | Month | Quarter | Year | Time_Slot |
|---|---|---|---|---|---|---|
| 20250101M | 2025-01-01 | Wed | Jan | Q1 | 2025 | Morning |
| 20250101A | 2025-01-01 | Wed | Jan | Q1 | 2025 | Afternoon |
| 20250101E | 2025-01-01 | Wed | Jan | Q1 | 2025 | Evening |
| 20250102M | 2025-01-02 | Thu | Jan | Q1 | 2025 | Morning |
Branch
| Branch_Key | Branch_Name | City | Open_Year | Manager | Manager_emp_id |
|---|---|---|---|---|---|
| B001 | Central Rama 9 | Bangkok | 2020 | Mr. Somsak Chokdee | 1001 |
| B002 | Siam Square | Bangkok | 2018 | Miss. Suwanna Yimkeng | 1002 |
| B003 | Chiang Mai Town | Chiang Mai | 2019 | Mr. Bucha Nathong | 1003 |
ความสันพันธ์ระหว่าง Fact และ Dimension ทำงานร่วมกันอย่างไร
Fact Data และ Dimension Data จะถูกเชื่อมโยงกันผ่าน Key Column เพื่อให้สามารถวิเคราะห์ข้อมูลได้ จากตัวอย่างข้างต้น ใน Fact Table จะประกอบด้วย Key 3 ตัวนั่นคือ
- Product Key – ใช้เชื่อมโยงกับฐานข้อมูลสินค้า
- Date Key – ใช้เชื่อมโยงกับข้อมูลวันที่
- Branch Key – ใช้เชื่อมโยงกับข้อมูลสาขา
การเชื่อมโยงกันระหว่าง Fact และ Dimension Data จึงออกมามีลักษณะคล้ายดวงดาว โดยมี Fact Table เป็นศูนย์กลาง และมี Dimension Table เป็นรัศมี ซึ่งถูกเชื่อมกันด้วย Key

โครงสร้างความสัมพันธ์ข้อมูลแบบนี้จะทำให้เราสามารถกรองข้อมูลยอดขายผ่านบริบทของ Dimension Data ได้ เช่น
การจัดอันดับยอดขายตามเมือง โดยการใช้ข้อมูล ‘City’ จาก Branch Table

ตามประเภทของหมวดหมู่สินค้า โดยใช้ข้อมูล ‘Category’ จาก Product Table

การวิเคราะห์ว่ายอดขายของกิจการเราเกิดขึ้นในวันไหนของสัปดาห์มากกว่ากัน โดยใช้ข้อมูล ‘Day’ จาก Date/Time

ในขณะที่ Snowflake นั้นใช้หลักการเดียวกันกับ Star Schema แต่ในบางกรณี ข้อมูลที่เป็น Dimension Data อาจจะมีการแตกย่อยออกเป็นข้อมูล Sub-dimension เพิ่มเติม เพื่อขยายรายละเอียดต่อไปได้ เช่น ‘Employee Database’ เป็น Sub-dimension ของ Brach Table โดยเชื่อมข้อมูล Manager Employee ID เข้ากับฐานข้อมูลพนักงาน เพื่อวิเคราะห์หาความสัมพันธ์ระหว่างยอดขายและ Performance ของผู้จัดการร้าน เป็นต้น
Employee Database
| emp_id | Full Name | Job Title | Manager | Performance Review Score | Year of Service |
|---|---|---|---|---|---|
| 1001 | Mr. Somsak Chokdee | Branch Manager | Mr. Somsak Chokdee | 5 | 3 |
| 1002 | Miss. Suwanna Yimkeng | Branch Manager | Miss. Suwanna Yimkeng | 10 | 7 |
| 1003 | Mr. Bucha Nathong | Branch Manager | Mr. Bucha Nathong | 7 | 5 |
สรุปความแตกต่างระหว่าง Fact Data และ Dimension Data
| คุณสมบัติ | Fact Data | Dimension Data |
| บทบาท | สิ่งที่เกิดขึ้น (What happened) | บริบท (Context) หรือ คำอธิบาย (Who, What, Where, When) |
| ประเภทค่า | ตัวเลขเชิงปริมาณ (Measures) | ข้อความหรือคำอธิบาย (Attributes) |
| การคำนวณ | นำไปรวม, เฉลี่ย, นับ, หรือคำนวณได้ | ใช้สำหรับกรอง, จัดกลุ่ม, จัดหมวดหมู่ |
| ตัวอย่าง | ยอดขาย, จำนวนหน่วย, กำไร, ต้นทุน | ชื่อลูกค้า, ชื่อผลิตภัณฑ์, ภูมิภาค, วันที่ |
ทุกการวิเคราะห์ข้อมูลที่ดีเริ่มต้นจากการจัดเรียงข้อมูลอย่างเหมาะสม ถ้าเราเข้าใจว่าเรา “กำลังวัดอะไร” (Fact) และ “วัดภายใต้บริบทหรือมุมมองใด” (Dimension) เราจะสามารถเลือกได้ว่าเราต้องใช้ข้อมูลอะไรบ้าง และเชื่อมโยงกันอย่างไรนั่นเองครับ แล้วพบกันใหม่บทความต่อไปครับ ขอบคุณครับ
