ใช้ขนาดที่เปลี่ยนแปลงอย่างช้าๆ
ข้อมูลมิติข้อมูลเปลี่ยนแปลงเมื่อเวลาผ่านไป ลูกค้าย้ายไปยังเมืองใหม่ ผลิตภัณฑ์ถูกเปลี่ยนชื่อ และพนักงานย้ายระหว่างแผนก บทบาทหลักของคลังข้อมูลคือการอธิบายอดีตอย่างถูกต้อง ดังนั้นคุณจึงต้องมีกลยุทธ์ในการจัดการการเปลี่ยนแปลงเหล่านี้ รูปแบบมิติ (SCD) ที่เปลี่ยนแปลงอย่างช้าๆ จะกําหนดวิธีที่แบบจําลองมิติของคุณตอบสนองเมื่อข้อมูลต้นฉบับมีการเปลี่ยนแปลง
ทําความเข้าใจประเภท SCD
ข้อกําหนดทางธุรกิจที่แตกต่างกันเรียกร้องให้มีแนวทางที่แตกต่างกันในการติดตามการเปลี่ยนแปลง ประเภท SCD ต่อไปนี้มีตั้งแต่การเพิกเฉยต่อการเปลี่ยนแปลงทั้งหมดไปจนถึงการรักษาบันทึกในอดีตทั้งหมด
ประเภทที่ 0: เก็บต้นฉบับไว้
ประเภท 0 จะรักษาค่าเดิมและไม่อนุญาตให้มีการเปลี่ยนแปลง ใช้ชนิด 0 สําหรับข้อมูลอ้างอิงคงที่ที่ไม่ควรเปลี่ยนแปลง เช่น คะแนนเครดิตเดิม ณ เวลาที่สมัครหรือวันเกิด
ประเภทที่ 1: เขียนทับ
ประเภท 1 เขียนทับค่าที่มีอยู่ด้วยค่าใหม่ ไม่มีประวัติที่เก็บรักษาไว้ วิธีนี้เหมาะสมเมื่อ:
- การเปลี่ยนแปลงเป็นการแก้ไขข้อผิดพลาด
- ความถูกต้องในอดีตของแอตทริบิวต์ที่เปลี่ยนแปลงนั้นไม่สําคัญ
- คุณต้องการการบํารุงรักษาที่ง่ายที่สุด
ตัวอย่างเช่น หากที่อยู่อีเมลของลูกค้าเปลี่ยนไป การอัปเดตประเภทที่ 1 จะแทนที่อีเมลเก่าด้วยอีเมลใหม่ ข้อเท็จจริงในอดีตทั้งหมดที่เกี่ยวข้องกับลูกค้ารายนั้นจะสะท้อนถึงที่อยู่อีเมลปัจจุบัน
Note
การเปลี่ยนแปลงประเภทที่ 1 อาจส่งผลต่อการวิเคราะห์ในอดีต ถ้าพนักงานขายถูกมอบหมายใหม่ไปยังภูมิภาคใหม่ และคุณเขียนทับภูมิภาค ยอดขายที่ผ่านมาทั้งหมดของพวกเขาจะปรากฏภายใต้ภูมิภาคใหม่ พิจารณาว่าลักษณะการทํางานนี้ตรงตามข้อกําหนดการรายงานของคุณหรือไม่
ประเภทที่ 2: เพิ่มแถวใหม่
ประเภทที่ 2 แทรกแถวใหม่สําหรับการเปลี่ยนแปลงแต่ละครั้ง โดยรักษาประวัติทั้งหมด แถวเดิมยังคงอยู่ และสมาชิกมิติแต่ละเวอร์ชันจะได้รับคีย์ตัวแทนของตัวเอง ประเภท SCD นี้พบได้บ่อยที่สุดสําหรับแอตทริบิวต์ที่ความถูกต้องในอดีตมีความสําคัญ
การใช้งานประเภทที่ 2 ต้องมีคอลัมน์เพิ่มเติม:
| คอลัมน์ | จุดประสงค์ |
|---|---|
| วันที่เริ่มต้น | เมื่อเวอร์ชันนี้มีผลบังคับใช้ |
| วันที่สิ้นสุด | เมื่อเวอร์ชันนี้ถูกแทนที่ (แถวปัจจุบันใช้วันที่ในอนาคตไกล เช่น 9999-12-31) |
| เป็นธงปัจจุบัน | ระบุเวอร์ชันที่ใช้งานอยู่สําหรับการค้นหาระหว่างการโหลดตารางข้อเท็จจริง |
เมื่อมีการเปลี่ยนแปลง กระบวนการ ETL จะทําดังนี้
- อัปเดตแถวปัจจุบันที่มีอยู่โดยตั้งค่าวันที่สิ้นสุดและเปลี่ยนค่าสถานะปัจจุบันเป็น
FALSE - แทรกแถวใหม่ที่มีค่าแอตทริบิวต์ใหม่, คีย์ตัวแทนใหม่, วันที่เริ่มต้นที่ตั้งค่าเป็นวันที่เปลี่ยนแปลง และค่าสถานะปัจจุบันที่ตั้งค่าเป็น
TRUE
ประเภทที่ 2 เป็นสิ่งสําคัญเมื่อคุณต้องการวิเคราะห์อดีตอย่างถูกต้อง ตัวอย่างเช่น หากคุณต้องการรายงานยอดขายตามภูมิภาคที่พนักงานขายได้รับมอบหมาย ณ เวลาที่ขายแต่ละครั้ง การติดตามประเภทที่ 2 จะรักษาบริบทนั้นไว้
ประเภทที่ 3: เพิ่มคอลัมน์ใหม่
ประเภท 3 จะเพิ่มคอลัมน์เพื่อจัดเก็บค่าก่อนหน้าควบคู่ไปกับค่าปัจจุบัน แนวทางนี้ติดตามประวัติที่จํากัด ซึ่งโดยทั่วไปจะเป็นเพียงการเปลี่ยนแปลงล่าสุดเท่านั้น
ตัวอย่างเช่น มิติพนักงานขายอาจรวมCurrentSalesRegionทั้งคอลัมน์และPreviousSalesRegion เมื่อพนักงานขายย้าย ภูมิภาคปัจจุบันจะเปลี่ยนเป็นคอลัมน์ก่อนหน้า และภูมิภาคใหม่จะกลายเป็นคอลัมน์ปัจจุบัน
ประเภท 3 มีประโยชน์เมื่อคุณต้องการเปรียบเทียบสถานะปัจจุบันกับสถานะก่อนหน้าเพียงสถานะเดียว อย่างไรก็ตาม มักไม่ใช้เพราะคุณสูญเสียการเปลี่ยนแปลงระดับกลางทั้งหมด
แบบที่ 6: แนวทางไฮบริด
Type 6 รวมองค์ประกอบของ Type 1, Type 2 และ Type 3 รักษาประวัติเวอร์ชันเต็ม (ประเภท 2) ในขณะเดียวกันก็จัดเก็บค่าปัจจุบันในทุกแถว (พิมพ์ทับ Type 1 ในคอลัมน์เฉพาะ) และค่าก่อนหน้า (Type 3)
ไฮบริดนี้ช่วยให้คิวรีสามารถเข้าถึงทั้งบริบทในอดีตและปัจจุบันจากแถวเวอร์ชันใดก็ได้ อย่างไรก็ตาม จะเพิ่มความซับซ้อนให้กับกระบวนการ ETL เนื่องจากทุกแถวสําหรับสมาชิกมิติต้องได้รับการอัปเดตเมื่อค่าปัจจุบันมีการเปลี่ยนแปลง
เลือกประเภท SCD ที่เหมาะสม
ใช้คําแนะนําต่อไปนี้เพื่อเลือกประเภท SCD ที่เหมาะสม:
| ข้อกำหนด | ประเภทที่แนะนํา |
|---|---|
| แก้ไขข้อมูลอ้างอิงที่ไม่เคยเปลี่ยนแปลง | ชนิดที่ 0 |
| ไม่จําเป็นต้องแก้ไขหรือประวัติ | ชนิดที่ 1 |
| ต้องการความถูกต้องในอดีตอย่างเต็มที่ | ชนิดที่ 2 |
| ต้องการเฉพาะการเปรียบเทียบปัจจุบันกับก่อนหน้า | แบบที่ 3 |
| ต้องการทั้งมุมมองปัจจุบันและในอดีตในทุกแถว | แบบที่ 6 |
พิจารณาการแลกเปลี่ยนการใช้งาน
SCD แต่ละประเภทมีผลกระทบด้านต้นทุนและความซับซ้อน:
- พื้นที่เก็บข้อมูล: มิติข้อมูลประเภท 2 จะเพิ่มขึ้นเมื่อเวลาผ่านไปเมื่อแถวเวอร์ชันใหม่สะสม วางแผนสําหรับพื้นที่จัดเก็บที่เพิ่มขึ้นและพิจารณาว่าการเติบโตส่งผลต่อประสิทธิภาพของคิวรีอย่างไร
- ความซับซ้อนของคิวรี: การรวมตารางข้อเท็จจริงกับมิติข้อมูลประเภท 2 จําเป็นต้องมีการจับคู่ในวันที่มีผลบังคับใช้หรือใช้ค่าสถานะปัจจุบัน ซึ่งจะเพิ่มความซับซ้อนให้กับคิวรี
- ความซับซ้อนของ ETL: ประเภท 2 และประเภท 6 ต้องการตรรกะ ETL ที่ซับซ้อนมากขึ้นเพื่อตรวจจับการเปลี่ยนแปลง
- ข้อกําหนดทางธุรกิจ: การเลือกประเภท SCD ควรขับเคลื่อนตามความต้องการทางธุรกิจ อย่าติดตามประวัติในที่ที่ไม่จําเป็น และอย่าข้ามการติดตามประวัติที่มันอยู่
เคล็ดลับ
หลีกเลี่ยงการใช้การติดตามประเภท 2 กับแอตทริบิวต์ทุกรายการในมิติข้อมูล ติดตามประวัติเฉพาะแอตทริบิวต์ที่ธุรกิจต้องการการวิเคราะห์ในอดีตเท่านั้น ใช้ประเภท 1 สําหรับส่วนที่เหลือเพื่อให้สามารถจัดการมิติได้