BufferMode.Type คือประเภท enumeration ที่ใช้กำหนดวิธีการเก็บข้อมูลในหน่วยความจำ (buffer) ของ Power Query ให้เลือกระหว่าง Eager หรือ Delayed
=BufferMode.Eager | BufferMode.Delayed
=BufferMode.Eager | BufferMode.Delayed
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| BufferMode.Eager | BufferMode.Type | Optional | เก็บข้อมูลทั้งชุดลงในหน่วยความจำทันทีก่อนจะดำเนินการต่อไป เร็ว แต่อาจใช้ RAM มากเวลาข้อมูลใหญ่ | |
| BufferMode.Delayed | BufferMode.Type | Optional | ตรวจสอบประเภทข้อมูล (schema) ทันที แต่รอให้ query จำเป็นต้องใช้ค่อยเก็บข้อมูลจริง ประหยัด RAM ตอนพัฒนา |
let Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}), Buffered = Table.Buffer(Source, BufferMode.Eager) in Bufferedlet
Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}),
Buffered = Table.Buffer(Source, BufferMode.Eager)
in
Buffered
โครงสร้างของตาราง ID และ Name เก็บลงหน่วยความจำเสร็จสิ้นแล้ว
let Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}), Buffered = Table.Buffer(Source, BufferMode.Delayed) in Bufferedlet
Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}),
Buffered = Table.Buffer(Source, BufferMode.Delayed)
in
Buffered
ระบบจะตรวจสอบ schema ทันที แต่ข้อมูลเต็มๆ จะโหลดต่อมา
let Source = Excel.Workbook(File.Contents("C:\\data.xlsx"), true), Data = Source{[Item="Sheet1"]}[Data], // ตอนพัฒนา ใช้ Delayed // Buffered = Table.Buffer(Data…let
Source = Excel.Workbook(File.Contents("C:\\data.xlsx"), true),
Data = Source{[Item="Sheet1"]}[Data],
// ตอนพัฒนา ใช้ Delayed
// Buffered = Table.Buffer(Data, BufferMode.Delayed)
// พอเสร็จแล้ว เปลี่ยนเป็น Eager
Buffered = Table.Buffer(Data, BufferMode.Eager)
in
Buffered
ข้อมูลจาก Excel โหลดเสร็จสมบูรณ์ก่อนดำเนินการต่อ
ผม อธิบายให้ฟังนะครับ – Eager มันเก็บข้อมูลทั้งหมดลงหน่วยความจำทันที ทำให้ก้าวต่อไปเร็ว แต่อาจแล้ง RAM ส่วน Delayed มันแค่ check schema ก่อน ค่อยเก็บข้อมูลเวลาต้องใช้ ทำให้ Power BI Desktop รีฟรบเร็ว ตอนพัฒนา
ส่วนตัวผม ผมแนะนำให้ใช้ Delayed ตอนพัฒนา query เพราะเร็วขึ้น แต่พอเสร็จแล้วค่อยเปลี่ยนเป็น Eager ตอน refresh ข้อมูลจริง เพื่อให้แน่ใจว่าข้อมูลโหลดเสร็จก่อนทำต่อ
ผมว่าไม่นะครับ BufferMode.Type มันออกแบบมาเพื่อใช้กับ Table.Buffer เท่านั้น ถ้าคุณไม่ใช้ Buffer ก็ไม่ต้องจัดการกับ BufferMode
BufferMode.Type เป็นประเภทข้อมูลใน Power Query ที่ใช้กับฟังก์ชัน Table.Buffer เพื่อบอกระบบว่าต้องจัดการข้อมูลในหน่วยความจำแบบไหน – เก็บทันทีเลย (Eager) หรือรอจนกว่าจะต้องใช้งาน (Delayed) เวลาใช้กับชุดข้อมูลใหญ่ๆ การเลือกแบบที่เหมาะสมมันสำคัญมากครับ
ที่เจ๋งคือ BufferMode.Delayed ช่วยให้การพัฒนาใน Power BI Desktop เร็วขึ้นได้เยอะ เพราะมันข้ามการ evaluate ข้อมูลทั้งหมด และแค่เช็ค schema อย่างเร็ว ส่วนข้อมูลจริงๆ มันค่อยเก็บเวลาต้องใช้
ส่วนตัวผม ผมใช้ Delayed ตอนพัฒนา query เพื่อเร็ว แล้วพอเสร็จแล้ว ผมค่อยเปลี่ยนเป็น Eager ตอน refresh ข้อมูลจริง เพื่อให้มั่นใจว่าข้อมูลมันโหลดเสร็จก่อนทำขั้นตอนต่อไป 😎