"การกำหนดระดับรายละเอียด (Grain) คือรากฐานที่สำคัญที่สุดของการทำคลังข้อมูล",
คือ กิจกรรมระดับปฏิบัติการ (เช่น การขาย, การรับคืนสินค้า) ที่สร้างตัวเลขเพื่อนำมาวัดผล
คือ "หนึ่งแถวในตาราง Fact คืออะไร?" ต้องเป็นระดับที่ละเอียดที่สุดที่เป็นไปได้เพื่อให้วิเคราะห์ได้ทุกมุมมอง,
โจทย์: จากชุดข้อมูล Olist E-Commerce จงระบุ Grain Statement ของตารางการขาย
"หนึ่งแถวในตาราง `Order_Items_Fact` คือ..."
**"One row per individual product item in a transaction."**
**เหตุผล:**
ประกอบด้วยมาตรวัดที่เป็นตัวเลข (Quantitative Measurements) และ Foreign Keys ที่เชื่อมไปยังตารางมิติ
บวกกันได้ทุกมิติ (สินค้า, เวลา, พื้นที่)
บวกกันได้บางมิติ แต่ **ห้ามบวกข้ามเวลา**
จากรายการต่อไปนี้ จงเลือก Facts ที่ควรอยู่ใน `Order_Fact` ของเรา:
ทำไมข้ออื่นถึงไม่ใช่?
Order_ID และ Date เป็นมิติ (Dimension), Customer_Name เป็นคุณสมบัติ (Attribute) ไม่ใช่ตัวเลขที่ใช้วัดผลโดยตรงในตาราง Fact,
คือ ตารางที่เก็บคำอธิบาย (Context) เพื่อตอบคำถามว่า ใคร (Who), อะไร (What), ที่ไหน (Where), เมื่อไหร่ (When)
"เสี่ยงต่อการเปลี่ยนแปลงและซ้ำซ้อน"
"สร้างความอิสระและติดตามประวัติได้"
ภารกิจ Phase 1 Project:
จงวางโครงสร้าง **Star Schema** สำหรับ "Sales Analysis" โดยระบุ:
PK: Product_Key (SK)
Product_ID (NK)
Category, Brand
PK: Customer_Key (SK)
Customer_ID (NK)
City, State
FK: Product_Key
FK: Customer_Key
FK: Date_Key
FK: Store_Key
Facts:
• Sales_Amount
• Quantity
• Freight_Value
PK: Date_Key (SK)
Full_Date, Year
Quarter, Month
PK: Store_Key (SK)
Store_ID (NK)
Region, Manager