แผนการเรียนรู้
/

สัปดาห์ที่ 4: การสร้างแบบจำลองมิติ II
SCD และเทคนิคขั้นสูง

การจัดการการเปลี่ยนแปลงของข้อมูลประวัติและมิติรูปแบบพิเศษ

หัวใจสำคัญของสัปดาห์นี้

"ในโลกของข้อมูล สิ่งเดียวที่คงที่คือการเปลี่ยนแปลง... เราจะเก็บประวัติศาสตร์อย่างไรไม่ให้ข้อมูลผิดเพี้ยน?"

Phase 1: Advanced Dimensional Design

ผลลัพธ์การเรียนรู้

1
วิเคราะห์และเลือกใช้ SCD ประเภทต่างๆ (Type 1, 2, 3) ได้ตามความต้องการธุรกิจ
2
ออกแบบโครงสร้าง **Degenerate Dimensions** สำหรับรหัสเอกสารได้
3
สร้าง **Junk Dimensions** เพื่อจัดระเบียบกลุ่มของ Flags และ Indicators
4
อธิบายบทบาทของ **Agentic AI** ในการตรวจจับความผิดเพี้ยนของมิติอัตโนมัติ

Slowly Changing Dimensions (SCD)

คือเทคนิคการจัดการมิติที่มีการเปลี่ยนแปลงค่าของแอตทริบิวต์เมื่อเวลาผ่านไป

ทำไมต้องทำ SCD?

  • • เพื่อรักษาความถูกต้องของการรายงานผลย้อนหลัง
  • • เพื่อติดตามพฤติกรรมลูกค้าที่เปลี่ยนแปลง (เช่น การย้ายที่อยู่)
  • • เพื่อให้ AI เอเจนต์เข้าใจบริบทของข้อมูล ณ ช่วงเวลานั้นๆ อย่างแม่นยำ

SCD Type 1: การเขียนทับ (Overwrite)

ข้อมูลเก่า:

สมชาย - กทม.

ข้อมูลใหม่:

สมชาย - **เชียงใหม่**

**คุณสมบัติ:** เขียนทับค่าเดิมทันที ไม่เก็บประวัติ

**ข้อควรระวัง:** ยอดขายเก่าใน กทม. จะถูกเปลี่ยนเป็น เชียงใหม่ ทั้งหมดในรายงาน!

*ใช้สำหรับ: การแก้ไขคำสะกดผิด หรือข้อมูลที่ไม่ต้องการเก็บประวัติ*

SCD Type 2: การสร้างแถวใหม่ (New Row)

ตารางมิติลูกค้า (Dim_Customer)

Surrogate Key Customer_ID (NK) Province Effective_Date Current_Flag
101 C-001 กทม. 2022-01-01 N
505 C-001 เชียงใหม่ 2024-06-13 Y

**มาตรฐานทองคำ:** แบ่งส่วนประวัติศาสตร์ได้อย่างสมบูรณ์ (Perfectly Partitions History)

SCD Type 3: การเพิ่มคอลัมน์ใหม่ (New Field)

เน้นการเปรียบเทียบระหว่าง "ค่าปัจจุบัน" และ "ค่าก่อนหน้า" (Current vs. Previous)

Customer_Name

สมชาย

Current_Province

เชียงใหม่

Previous_Province

กทม.

"ช่วยให้มองเห็น 'ความจริงสองด้าน' ในแถวเดียว แต่เก็บประวัติได้จำกัด"

กิจกรรมกลุ่ม (20 นาที)

ภารกิจ: เลือก SCD ให้โครงการ E-Commerce

โจทย์: จงระบุว่าสถานการณ์ต่อไปนี้ควรใช้ SCD ประเภทใด?

1. พนักงานสะกดชื่อยี่ห้อสินค้าผิดจาก "Appel" เป็น "Apple"
2. ลูกค้า VIP ย้ายที่อยู่จากกรุงเทพฯ ไปภูเก็ต และเราต้องการให้ยอดขายเก่าแสดงที่กรุงเทพฯ ส่วนยอดใหม่แสดงที่ภูเก็ต
3. ฝ่ายการตลาดต้องการดูยอดขายรวมปีนี้เทียบกับเขตการขายเก่าของปีที่แล้วในรายงานเดียว

เฉลยขั้นตอนการแก้ปัญหา SCD

Type 1

**แก้คำผิด:** เพราะข้อมูลเดิมผิดพลาดทางเทคนิค ไม่ใช่การเปลี่ยนแปลงทางธุรกิจ

Type 2

**ย้ายที่อยู่:** เพื่อ "Partition History" ให้ยอดขายเก่าและใหม่ผูกกับสถานที่ที่ถูกต้อง ณ เวลานั้น

Type 3

**เทียบเขตเก่า/ใหม่:** เพื่อสร้าง "Alternate Realities" ให้วิเคราะห์เปรียบเทียบในแถวเดียวกันได้

Degenerate Dimensions (มิติเสื่อม)

"มิติที่ไม่มีตารางเป็นของตัวเอง แต่อยู่ในตาราง Fact"

ตัวอย่าง:

  • • เลขที่คำสั่งซื้อ (Order Number)
  • • เลขที่ใบกำกับภาษี (Invoice ID)
  • • รหัสพัสดุ (Tracking Number)

ทำไมต้องทำ?

  • • ลดการ Join ตารางที่ไม่จำเป็น
  • • ข้อมูลเหล่านี้มักไม่มีคุณลักษณะอื่น (Attributes) ให้เก็บ

Junk Dimensions (มิติขยะ/รวมมิตร)

รวบรวม Flags และ Text Indicators ที่กระจัดกระจายมารวมไว้ที่เดียว

Is_Refunded?
Payment_Method
Promotion_Applied?
Dim_Transaction_Profiles (Junk Dimension)

"ช่วยลดจำนวนคอลัมน์ Foreign Key ในตาราง Fact ได้มหาศาล"

เวิร์กชอป (25 นาที)

ออกแบบ Junk Dimension

ภารกิจ Phase 1 (ต่อ):

ในโครงการ E-Commerce ของคุณ มีแฟล็ก 3 ตัวดังนี้:

  • 1. **Payment_Status** (Paid, Pending)
  • 2. **Delivery_Type** (Standard, Express)
  • 3. **Is_Gift** (Yes, No)

คำถาม:

1. จงระบุจำนวนแถวทั้งหมดที่อาจเกิดขึ้นใน Junk Dimension นี้ (Cross Join)

2. วาดโครงสร้างตาราง Junk Dimension เบื้องต้น

เฉลยขั้นตอนการสร้าง Junk Dimension

1. การคำนวณขนาดตาราง:

2 (Payment) x 2 (Delivery) x 2 (Gift) = **8 แถว**

"ตาราง Junk จะเก็บทุกความเป็นไปได้ของการรวมกันของ Flags"

2. โครงสร้างตาราง:

Profile_Key (SK) Payment Delivery Gift?
1PaidStandardYes
2PaidStandardNo
............
💡 ประโยชน์: ลด Foreign Key ใน Fact Table จาก 3 เหลือเพียง 1 คอลัมน์!

SCD ในยุคของ AI Agents

AI เอเจนต์สมัยใหม่ (เช่น AV-SQL) มีบทบาทสำคัญในการจัดการ SCD:

  • Auto-Detection
    ตรวจจับ Schema Drift หรือการเปลี่ยนแปลงของมิติต้นทางอัตโนมัติ
  • Agentic Mapping
    AI ช่วยเขียน SQL สำหรับการสร้าง SCD Type 2 ที่ซับซ้อนได้แม่นยำขึ้น
  • Semantic Stability
    ช่วยให้ Semantic Layer คงความถูกต้องแม้ข้อมูลประวัติจะเปลี่ยนไป

บทสรุปสัปดาห์ที่ 4

1. **SCD Type 2** คือวิธีหลักในการเก็บประวัติข้อมูลในคลังข้อมูลสมัยใหม่
2. **Degenerate Dimensions** ช่วยลดความซับซ้อนโดยการเก็บรหัสเอกสารไว้ใน Fact
3. **Junk Dimensions** ทำให้โมเดลสะอาดขึ้นโดยการรวมกลุ่ม Flags
Next Week: Requirements Gathering & Information Packages