Thep Excel

BufferMode.Typeเลือกวิธีการเก็บข้อมูลแบบไหน?

BufferMode.Type คือประเภท enumeration ที่ใช้กำหนดวิธีการเก็บข้อมูลในหน่วยความจำ (buffer) ของ Power Query ให้เลือกระหว่าง Eager หรือ Delayed

fx
=BufferMode.Eager | BufferMode.Delayed

ความนิยม3/10
ความยาก2/10
ประโยชน์3/10

อัปเดต 4 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
[BufferMode.Eager]ไม่บังคับ BufferMode.Type เก็บข้อมูลทั้งชุดลงในหน่วยความจำทันทีก่อนจะดำเนินการต่อไป เร็ว แต่อาจใช้ RAM มากเวลาข้อมูลใหญ่
[BufferMode.Delayed]ไม่บังคับ BufferMode.Type ตรวจสอบประเภทข้อมูล (schema) ทันที แต่รอให้ query จำเป็นต้องใช้ค่อยเก็บข้อมูลจริง ประหยัด RAM ตอนพัฒนา

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

BufferMode.Type เป็นประเภทข้อมูลใน Power Query ที่ใช้กับฟังก์ชัน Table.Buffer เพื่อบอกระบบว่าต้องจัดการข้อมูลในหน่วยความจำแบบไหน – เก็บทันทีเลย (Eager) หรือรอจนกว่าจะต้องใช้งาน (Delayed) เวลาใช้กับชุดข้อมูลใหญ่ๆ การเลือกแบบที่เหมาะสมมันสำคัญมากครับ

ที่เจ๋งคือ BufferMode.Delayed ช่วยให้การพัฒนาใน Power BI Desktop เร็วขึ้นได้เยอะ เพราะมันข้ามการ evaluate ข้อมูลทั้งหมด และแค่เช็ค schema อย่างเร็ว ส่วนข้อมูลจริงๆ มันค่อยเก็บเวลาต้องใช้

ส่วนตัวผม ผมใช้ Delayed ตอนพัฒนา query เพื่อเร็ว แล้วพอเสร็จแล้ว ผมค่อยเปลี่ยนเป็น Eager ตอน refresh ข้อมูลจริง เพื่อให้มั่นใจว่าข้อมูลมันโหลดเสร็จก่อนทำขั้นตอนต่อไป 😎

Examples

ใช้ BufferMode.Eager เพื่อเก็บข้อมูลทันทีlet Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}), Buffered = Table.Buffer(Source, BufferMode.Eager) in Buffered

ใช้ BufferMode.Eager เวลาต้องการให้ข้อมูลโหลดเสร็จก่อนทำขั้นตอนต่อ ผมใช้แบบนี้ตอนการคำนวณต้องใช้ข้อมูลเดียวกันซ้ำๆ

fx
let
Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}),
Buffered = Table.Buffer(Source, BufferMode.Eager)
in
Buffered

ผลลัพธ์โครงสร้างของตาราง ID และ Name เก็บลงหน่วยความจำเสร็จสิ้นแล้ว
ใช้ BufferMode.Delayed เพื่อเร็วในการพัฒนาlet Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}), Buffered = Table.Buffer(Source, BufferMode.Delayed) in Buffered

ใช้ Delayed เวลาพัฒนา query ใน Power BI Desktop เพื่อให้ closing dialog เร็ว ส่วนตัวผม ผมใช้แบบนี้ทุกครั้งตอนทำ query ใหม่ๆ

fx
let
Source = Table.FromRows({{1, "A"}, {2, "B"}}, {"ID", "Name"}),
Buffered = Table.Buffer(Source, BufferMode.Delayed)
in
Buffered

ผลลัพธ์ระบบจะตรวจสอบ schema ทันที แต่ข้อมูลเต็มๆ จะโหลดต่อมา
เปลี่ยนไป Eager ก่อน refresh ข้อมูลจริงlet Source = Excel.Workbook(File.Contents("C:\\data.xlsx"), true), Data = Source{[Item="Sheet1"]}[Data], // ตอนพัฒนา ใช้ Delayed // Buffered = Table.Buffer(Data…

ผมแนะนำให้ใช้วิธีนี้ – ตอนพัฒนา ใช้ Delayed เพื่อความรวดเร็ว พอเสร็จแล้วค่อยเปลี่ยนเป็น Eager ตอน refresh ข้อมูลจริง

fx
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 โหลดเสร็จสมบูรณ์ก่อนดำเนินการต่อ

FAQs

BufferMode.Eager กับ Delayed มีความแตกต่างตรงไหนบ้าง?+

ผม อธิบายให้ฟังนะครับ – Eager มันเก็บข้อมูลทั้งหมดลงหน่วยความจำทันที ทำให้ก้าวต่อไปเร็ว แต่อาจแล้ง RAM ส่วน Delayed มันแค่ check schema ก่อน ค่อยเก็บข้อมูลเวลาต้องใช้ ทำให้ Power BI Desktop รีฟรบเร็ว ตอนพัฒนา

ผมควรใช้ BufferMode.Delayed หรือ Eager ดีคะ?+

ส่วนตัวผม ผมแนะนำให้ใช้ Delayed ตอนพัฒนา query เพราะเร็วขึ้น แต่พอเสร็จแล้วค่อยเปลี่ยนเป็น Eager ตอน refresh ข้อมูลจริง เพื่อให้แน่ใจว่าข้อมูลโหลดเสร็จก่อนทำต่อ

ถ้าไม่ใช้ Table.Buffer เลย BufferMode.Type มีประโยชน์ไหม?+

ผมว่าไม่นะครับ BufferMode.Type มันออกแบบมาเพื่อใช้กับ Table.Buffer เท่านั้น ถ้าคุณไม่ใช้ Buffer ก็ไม่ต้องจัดการกับ BufferMode

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ BufferMode.Type จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้BufferMode.Typeenumerations
Table functions (1)
Table.Buffer

โหลดตารางเข้าสู่หน่วยความจำ (RAM) เพื่อแยกข้อมูลจากแหล่งเดิมและป้องกันไม่ให้ Query Folding ดึงข้อมูลใหม่

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่