Thep Excel

Table.Bufferโหลดตารางเข้า Memory เพื่อความเร็ว

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

fx
=Table.Buffer(table, [options]) as table

ความนิยม5/10
ความยาก4/10
ประโยชน์6/10

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table table ตารางที่ต้องการ Buffer เข้าสู่หน่วยความจำ
[options]ไม่บังคับ nullable record BufferMode.Eager เลือก BufferMode: BufferMode.Eager (โหลดทันที) หรือ BufferMode.Delayed (โหลดเมื่อต้องใช้)

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

Additional Notes

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

ในทางปฏิบัติ Table.Buffer มีประโยชน์มากเมื่อคุณต้องใช้ตารางเดียวกันหลายครั้ง เช่นแบ่งข้อมูลเป็นหลาย Group หรือทำ Join กับตารางเดิมหลายครั้ง เพราะจะโหลดข้อมูลจากแหล่งเดิมเพียงครั้งเดียว

แต่ส่วนตัวผม Buffer ไม่ใช่วิธีแก้ปัญหาประสิทธิภาพแบบสากล นอกจากจะช่วยในกรณีที่ใช้ตารางซ้ำแล้ว Buffer อาจทำให้ Performance แย่ลง เพราะต้องโหลดข้อมูลทั้งหมดเข้า Memory ก่อน จึงควรใช้อย่างชาญฉลาด ไม่ใช่ใช้ให้ทั่ว 😎

Examples

ตัวอย่างพื้นฐาน: Buffer ข้อมูลเพื่อใช้ซ้ำlet Source = Excel.CurrentWorkbook(){[Name="Sales"]}[Content], Buffered = Table.Buffer(Source) in Buffered

ใช้เมื่อต้องดึงข้อมูลจาก Excel หลายครั้ง Buffer ทำให้ไม่ต้องอ่าน Excel ซ้ำทุกครั้ง

fx
let
Source = Excel.CurrentWorkbook(){[Name="Sales"]}[Content],
Buffered = Table.Buffer(Source)
in
Buffered

ผลลัพธ์ตารางเดิมแต่โหลดเข้า RAM เรียบร้อย
ตัวอย่างที่ 2: Buffer ก่อนแบ่งข้อมูลหลายทางlet Source = Table.FromRecords({ [ID = 1, Status = "Active", Amount = 1000], [ID = 2, Status = "Inactive", Amount = 2000], [ID = 3, Status = "Active", Amount =…

Buffer ก่อน ทำให้ Active, Inactive, HighAmount ทั้งหมดใช้ข้อมูล Buffered ร่วมกัน ไม่ต้องดึงข้อมูล Source ใหม่

fx
let
Source = Table.FromRecords({
[ID = 1, Status = "Active", Amount = 1000],
[ID = 2, Status = "Inactive", Amount = 2000],
[ID = 3, Status = "Active", Amount = 1500]
}),
Buffered = Table.Buffer(Source),
Active = Table.SelectRows(Buffered, each [Status] = "Active"),
Inactive = Table.SelectRows(Buffered, each [Status] = "Inactive"),
HighAmount = Table.SelectRows(Buffered, each [Amount] > 1200)
in
Buffered

ผลลัพธ์ตารางเดิม โดยข้อมูลดึงมาเพียงครั้งเดียว
ตัวอย่างที่ 3: Buffer ตารางขนาดใหญ่ก่อน Join หลายครั้งlet LargeTable = Sql.Database("Server", "MyDB"){[Item="Products"]}[Data], BufferedProducts = Table.Buffer(LargeTable), Orders = Excel.CurrentWorkbook(){[Name="O…

Buffer Products ก่อน จะโหลด Products ครั้งเดียวแล้วนำมา Join กับ Orders และ Returns โดยไม่ต้องดึงข้อมูลใหม่

fx
let
LargeTable = Sql.Database("Server", "MyDB"){[Item="Products"]}[Data],
BufferedProducts = Table.Buffer(LargeTable),
Orders = Excel.CurrentWorkbook(){[Name="Orders"]}[Content],
JoinWithOrders = Table.NestedJoin(
Orders, "ProductID",
BufferedProducts, "ID",
"Product"
),
Returns = Excel.CurrentWorkbook(){[Name="Returns"]}[Content],
JoinWithReturns = Table.NestedJoin(
Returns, "ProductID",
BufferedProducts, "ID",
"Product"
)
in
JoinWithOrders

ผลลัพธ์ตารางที่ Join กับ Products โดยข้อมูล Products โหลดมาเพียงครั้งเดียว
ตัวอย่างที่ 4: Buffer ด้วย Delayed Modelet Source = Sql.Database("Server", "MyDB"){[Item="MassiveTable"]}[Data], Buffered = Table.Buffer(Source, [BufferMode = BufferMode.Delayed]) in Buffered

BufferMode.Delayed ใช้เมื่อตารางขนาดใหญ่มากและอาจไม่ได้ใช้ทั้งหมด จะช่วยประหยัด Memory ในระยะแรก

fx
let
Source = Sql.Database("Server", "MyDB"){[Item="MassiveTable"]}[Data],
Buffered = Table.Buffer(Source, [BufferMode = BufferMode.Delayed])
in
Buffered

ผลลัพธ์ตารางเดิม โดยจะโหลดเข้า Memory เมื่อต้องใช้ไม่ใช่ทันที

FAQs

Table.Buffer ช่วยเพิ่ม Performance ได้ไหม?+

ไม่ใช่เสมอไป Buffer ช่วยเมื่อคุณใช้ตารางซ้ำหลายครั้ง ลดการดึงข้อมูลจากแหล่งเดิม แต่ถ้าใช้ตารางแค่ครั้งเดียว Buffer อาจทำให้ Performance แย่ลง เพราะต้องเสียเวลา + Memory ในการโหลด

ต่างจาก Table.StopFolding ยังไง?+

Table.Buffer โหลดข้อมูลทั้งหมดเข้า Memory และป้องกัน Query Folding / Table.StopFolding เพียงป้องกัน Query Folding โดยไม่โหลดข้อมูล ถ้าต้องเพิ่ม Performance คุณควรเลือก Table.StopFolding อันดับแรก

เมื่อไหร่ควร Buffer?+

ควร Buffer เมื่อ: (1) ใช้ตารางซ้ำ 2 ครั้งขึ้นไป (2) ตารางมาจาก Source ช้า เช่น SQL Database (3) ใช้ Join หรือ Merge ซ้ำกับตารางเดิม อย่า Buffer ถ้าใช้แค่ครั้งเดียว

BufferMode.Eager vs BufferMode.Delayed ต่างกันไหม?+

Eager โหลดเข้า Memory ทันที (ค่าเริ่มต้น) / Delayed โหลดเมื่อต้องใช้จริง Delayed ช่วยประหยัด Memory ถ้าบางครั้งไม่ได้ใช้ตารางทั้งหมด

Resources & Related

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

ฟังก์ชันนี้Table.BufferTable functions
Table functions (4)
Table.FromRecords

แปลง List ของ Record เป็นตาราง โดยแต่ละ Record กลายเป็นหนึ่งแถว เหมาะสำหรับข้อมูลจาก API หรือ JSON

Table.NestedJoin

Table.NestedJoin เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด และสร้างคอลัมน์ใหม่ที่เก็บตารางย่อยของแถวที่จับคู่ได้ เหมาะกับงาน Merge ที่ต้องการเก็บรายละเอียดฝั่งขวาไว้เป็น nested table ก่อนจะ Expand หรือทำขั้นตอนต่อ

Table.SelectRows

Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่

Table.StopFolding

Table.StopFolding ป้องกันไม่ให้ขั้นตอน downstream ถูกส่งกลับไปประมวลผลที่ data source เดิม ช่วยเมื่อต้องดีบักหรือเมื่อการบังคับประมวลผลใน Power Query ให้ผลลัพธ์ที่คาดหวัง

List functions (2)
List.Buffer

List.Buffer เก็บรายการข้อมูลไว้ในหน่วยความจำเพื่อเพิ่มประสิทธิภาพเมื่อต้องเข้าถึงรายการเดียวกันหลายครั้ง ฟังก์ชันนี้มีประโยชน์เมื่อต้องใช้ผลลัพธ์จากการคำนวณซ้ำๆ หรือเมื่อต้องการลดจำนวนการเข้าถึงแหล่งข้อมูลภายนอก

List.ConformToPageReader

List.ConformToPageReader ใช้ภายในเพื่อแปลง List ของ Record เป็น Table ตาม Schema ที่กำหนด เหมาะสำหรับโครงสร้างข้อมูลที่ Page Reader ต้องการ

enumerations (1)
BufferMode.Type

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

Comments

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