Tableau สามารถ Connect Data ได้ 2 รูปแบบคือ Connect Live และ Connect Extract ถ้าหากท่านเลือกที่จะ Connect แบบ Extract แล้ว ท่านจำเป็นต้องทำการ Refresh Extract เพื่อให้ข้อมูล update อยู่เสมอ
ทางเลือกในการ Refresh Extract ก็ยังแบ่งออกเป็น 2 รูปแบบคือ Full Refresh และ Incremental Refresh ในบทความนี้จะแนะนำการทำ Incremental Refresh บนโปรแกรม Tableau ให้ท่านผู้อ่านเข้าใจประโยชน์ วิธีการ และสามารถนำไปใช้งานจริงได้ด้วยตนเอง
Incremental Refresh คืออะไร?
Incremental Refresh คือการ Extract Data เฉพาะข้อมูลในแถว (Row) ที่เป็นข้อมูลใหม่เท่านั้น ข้อมูลใหม่ในที่นี้จะเปรียบเทียบกับข้อมูล Extract ก่อนหน้า เมื่อได้ข้อมูลแถวใหม่ก็นำข้อมูลเหล่านั้นไปแทรกข้อมูล (Append Data) เข้าไปบนไฟล์ Extract เดิม
ประโยชน์คือทำให้เราประหยัดเวลา และทรัพยากรในการ Refresh Extract
ข้อแตกต่างระหว่าง Full Refresh และ Incremental Refresh
ผู้เขียนขอยกตัวอย่างสถานการณ์ดังต่อไปนี้เพื่อเปรียบเทียบให้เห็นอย่างชัดเจน
- เราดึงข้อมูลการขาย (Sales Data) ย้อนหลัง 3 ปี
- โดยเฉลี่ยแล้วเราจะมี Record เพิ่มวันละประมาณ 1,000 rows
- ปัจจุบันเราดึงข้อมูลย้อนหลัง 3 ปี
- ข้อมูลล่าสุดในวันนี้ พบว่าเรามีข้อมูลทั้งหมด 1 ล้าน rows
- เราทำการ update ข้อมูลทุกวัน เพื่อไปแสดงผลบน Tableau Dashboard
- เราใช้การ Connect Data แบบ Extract
จากสถานการณ์ข้างต้น เราต้องการให้ข้อมูล update ทุกวัน ดังนั้นเมื่อเวลาผ่านไป 1 วัน เราก็ต้องมา Refresh Extract โดยเรามี 2 ทางเลือกคือ
- Full Refresh คือการที่เราต้อง Refresh ข้อมูลจำนวน 1,000,000 (เดิม) + 1,000 (ข้อมูลใหม่วันนี้) = 1,001,000 rows ซึ่ง อาจจะใช้เวลาประมาณ 5 นาที
- Incremental Refresh คือเราจะทำการเพิ่มข้อมูลแค่ 1,000 rows โดยการ Append Data เข้าไปในข้อมูล 1,000,000 rows ซึ่งได้ผลลัพธ์ 1,001,000 rows เช่นเดียวกัน แต่อาจใช้เวลาแค่ 10 วินาทีเท่านั้น
จะเห็นได้ชัดเจนว่าการทำ Incremental Refresh ใช้เวลาน้อยกว่า Full Refresh อย่างมาก ยิ่งข้อมูลมีขนาดใหญ่ ก็จะเห็นความต่างได้อย่างชัดเจน
สิ่งจำเป็นที่ต้องมี ถ้าจะทำ Incremental Refresh
สิ่งจำเป็นที่ต้องมี ถึงจะทำ Incremental Refresh ได้นั่นก็คือ ใน Data source เราต้องมี Column หรือ Field ที่สามารถระบุได้ว่า ข้อมูล row ไหนที่เป็นข้อมูลใหม่ โดย Field ดังกล่าวมีคุณสมบัติดังนี้
- เป็น Field ที่มี Data Type ได้ 2 แบบคือ เป็นตัวเลข (Numeric) หรือเป็นวันที่ (Date, Date Time)
- Field นี้ต้องมีทั้งใน Input (Data Input) และ Output (ที่เป็น Extract File หรือ Output Table) เพราะต้องใช้อ้างอิงระหว่าง Input และ Output
การ Configure Incremental Refresh?
เนื่องจากเราสามารถทำ Incremental Refresh ได้ทั้งบน Tableau Desktop และ Tableau Prep Builder ดังนั้นจะขออธิบายวิธีการทำแยกกันดังนี้
a) การทำ Incremental Refresh บน Tableau Desktop
เมื่อเราเปิด Tab Data Source ให้ไปทำการ Configure ดังนี้
- เลือก Connect Data แบบ Extract
- Click ที่เมนู Edit
- Check เครื่องหมายถูกที่ Incremental refresh เพื่อบอกระบบว่าเรากำลังจะทำ Incremental Refresh
- เลือก Table (ในกรณีที่ Input มีหลาย Tables) และทำการเลือก Column หรือ Field ที่เป็นตัวกำหนดว่า Row ไหนเป็น New Data
b: การทำ Incremental Refresh บน Tableau Prep Builder
- ไปที่ Input Step
- ไปที่ Tab Settings
- Check เครื่องหมายถูก ที่ Enable incremental refresh
- เลือก Column หรือ Field ใน Input ที่เป็นตัวกำหนดว่า Row ไหนเป็น New Data
- เลือก Output Table (เลือกชื่อ Output)
- เลือก Column หรือ Field ใน Input ที่เป็นตัวกำหนดว่า Row ไหนเป็น New Data
การเรียกใช้งาน Incremental Refresh
ในตอนที่เราทำการ Refresh Extract นั้น ถ้าหากเรามีการ Configure ให้โปรแกรมรับรู้ว่าเรามี Incremental Refresh แล้ว โปรแกรม Tableau จะมีเมนูให้เลือกว่าเราจะทำ Full Refresh หรือ Incremental Refresh ก็ได้ ดังนี้
a) การ Refresh Extract บนโปรแกรม Tableau Desktop
- Click ขวาที่ Data Source
- เลือกเมนู Extract
- จะเห็นว่าระบบแสดง รูปแบบการ Refresh ให้เห็นทั้ง 2 รูปแบบ ให้เลือก Refresh (Incremental)
b) การ Refresh Extract บนโปรแกรม Tableau Prep Builder
- ไปที่ Output Step, Click ที่เครื่องหมาย สามเหลี่ยมเล็ก ๆ ดังรูป
- จะเห็นว่าระบบแสดง รูปแบบการ Refresh ให้เห็นทั้ง 2 รูปแบบ เช่นเดียวกัน ให้เลือก Incremental Refresh
การใช้งาน Incremental Refresh ในทางปฏิบัติ
ในชีวิตจริงปัญหาที่สำคัญที่พบได้บ่อยก็คือ เราอาจไม่มั่นใจว่า Column หรือ Field ที่เราใช้อ้างอิงในการหาว่าข้อมูล Row ใดเป็น New Row นั้น จะให้ผลลัพธ์ถูกต้อง 100% เสมอไป (ตลอดกาล) หรือไม่ ปัญหาอาจเกิดขึ้นในกรณีที่มีการไป update ข้อมูลเก่า (ย้อนหลัง) เป็นต้น
ดังนั้นในทางปฏิบัติเราสามารถทำ Incremental Refresh ควบคู่กับ Full Refresh ได้ เช่น เรากำหนดให้มีการทำ Incremental Refresh ทุก ๆ วัน แต่ไปกำหนดให้มีการทำ Full Refresh เดือนละครั้ง เป็นต้น การทำเช่นนี้ อย่างน้อยเราก็มั่นใจได้ว่าข้อมูลจะมีการ Update ได้ถูกต้องทั้งหมด อย่างน้อยก็เดือนละครั้งแน่นอน