Thep Excel

Table.StopFoldingหยุด Query Folding (บังคับประมวลผลใน Power Query)

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

fx
= Table.StopFolding(table)

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

อัปเดต 15 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางที่ต้องการหยุด query folding จากจุดนี้เป็นต้นไป

Additional Notes

Table.StopFolding หยุด Query Folding (การส่งสั่งกลับไปยัง data source เดิม) ทำให้ขั้นตอนถัดไปไม่ถูกแปลงเป็นคิวรีที่รันบนแหล่งข้อมูล แต่ประมวลผลใน Power Query engine แทน

ที่เจ๋งคือในบางกรณี folding อาจส่งผลลัพธ์ที่ไม่คาดหวัง เช่นเมื่อตรรมชาติของฐานข้อมูล (ตัวอักษรพิมพ์เล็ก/ใหญ่ หรือวันที่) มีพฤติกรรมต่างจาก Power Query ด้วย Table.StopFolding เราบังคับให้ประมวลผลทั้งหมดเกิดขึ้นใน Power Query ซึ่งให้ความสอดคล้อง

ส่วนตัวผมใช้บ่อยเวลาดีบักปัญหาข้อมูล ตัดสินใจว่าส่วนไหน folding ได้ส่วนไหนไม่ได้ หรือเมื่อความสามารถของแหล่งข้อมูลจำกัด (บางฐานข้อมูลอ่อนแอบางประมาณ) ผมใช้ StopFolding เพื่อเลี่ยงปัญหา timeout หรือคิวรีที่ซับซ้อน

How it works

บังคับให้แปลงข้อมูลในเครื่อง

เมื่อขั้นตอนบางอย่างทำให้ query folding ล้มเหลวหรือทำให้เกิดข้อจำกัดบนแหล่งข้อมูล ให้ใช้ Table.StopFolding เพื่อย้ายการประมวลผลมาอยู่ที่ Power Query

Examples

ตัวอย่างที่ 1: หยุด folding หลังดึงจาก SQLlet Source = Sql.Database("SomeSQLServer", "MyDb"), MyTable = Source{[Item="MyTable"]}[Data], MyLocalTable = Table.StopFolding(MyTable) in MyLocalTable

ดึงตารางจาก SQL Server แล้วเรียก Table.StopFolding เพื่อให้ขั้นตอนถัดไปไม่ถูกพยายามรันเป็นคิวรีบน SQL แต่ประมวลผลใน Power Query engine แทน ข้อมูลทั้งหมดมาแล้ว แล้วทำงานกับมันที่เครื่องเรา

fx
let
Source = Sql.Database("SomeSQLServer", "MyDb"),
MyTable = Source{[Item="MyTable"]}[Data],
MyLocalTable = Table.StopFolding(MyTable)
in
MyLocalTable

ผลลัพธ์table
ตัวอย่างที่ 2: หยุด folding ก่อนกรองเงื่อนไขที่ซับซ้อนlet Source = Sql.Database("Server01", "Sales"), Orders = Source{[Item="Orders"]}[Data], Local = Table.StopFolding(Orders), Filtered = Table.SelectRows(Local, ea…

ใช้ Table.StopFolding ก่อน Table.SelectRows เมื่อเงื่อนไขการกรองซับซ้อนหรือเมื่อข้อมูลขึ้นอยู่กับลำดับการประมวลผล บางครั้งฐานข้อมูลอาจเข้าใจเงื่อนไข AND/OR ต่างจากที่เรา คิด StopFolding บังคับให้ Power Query ตัดสินใจด้วยตัวเอง

fx
let
Source = Sql.Database("Server01", "Sales"),
Orders = Source{[Item="Orders"]}[Data],
Local = Table.StopFolding(Orders),
Filtered = Table.SelectRows(Local, each [Amount] > 1000 and [Status] = "Completed")
in
Filtered

ผลลัพธ์table ที่ถูกกรองแล้ว
ตัวอย่างที่ 3: เปรียบเทียบกับ Table.Bufferlet Source = Sql.Database("Server01", "Sales"), Orders = Source{[Item="Orders"]}[Data], Stopped = Table.StopFolding(Orders), Buffered = Table.Buffer(Stopped) in…

Table.StopFolding และ Table.Buffer ทำงานต่างกัน StopFolding ป้องกันการส่งคิวรีไปยังต้นทาง ส่วน Buffer บังคับให้อ่านข้อมูลทั้งหมดและเก็บไว้ในหน่วยความจำ บ่อยครั้งที่เราใช้ทั้งสองเมื่อต้องการประสิทธิภาพ (Buffer) และความสอดคล้อง (StopFolding)

fx
let
Source = Sql.Database("Server01", "Sales"),
Orders = Source{[Item="Orders"]}[Data],
Stopped = Table.StopFolding(Orders),
Buffered = Table.Buffer(Stopped)
in
Buffered

ผลลัพธ์table ที่ถูก buffer และหยุด folding
ตัวอย่างที่ 4: ดีบักปัญหาตัวอักษรพิมพ์เล็ก/ใหญ่let Source = Sql.Database("Server", "DB"), Data = Source{[Item="Customers"]}[Data], Local = Table.StopFolding(Data), Matched = Table.SelectRows(Local, each Text…

SQL Server อาจจัดการตัวอักษรพิมพ์เล็ก/ใหญ่ต่างจาก Power Query (Case-sensitive vs Case-insensitive) ด้วย Table.StopFolding เราแน่ใจว่า Text.Lower ทำงานตามที่ Power Query กำหนด ไม่ใช่ตามพฤติกรรมของ SQL

fx
let
Source = Sql.Database("Server", "DB"),
Data = Source{[Item="Customers"]}[Data],
Local = Table.StopFolding(Data),
Matched = Table.SelectRows(Local, each Text.Lower([Name]) = "john doe")
in
Matched

ผลลัพธ์table ที่ตรงกับการแปลง text

FAQs

ใช้ Table.StopFolding แล้วเร็วขึ้นเสมอไหม?+

ไม่เสมอ การย้ายงานมาทำใน Power Query (แทนที่จะให้ SQL ประมวลผล) อาจช้ากว่าเดิม ผมแนะนำให้ใช้ Table.StopFolding เมื่อจำเป็นเท่านั้น เช่น ดีบักปัญหาหรือเลี่ยงข้อจำกัดของแหล่งข้อมูล ส่วนใหญ่ folding ช่วยให้เร็ว

ต่างจาก Table.Buffer อย่างไร?+

Table.StopFolding หยุดการส่งสั่งกลับไปยัง source แต่ไม่บังคับอ่านข้อมูล ส่วน Table.Buffer บังคับให้อ่านข้อมูลทั้งหมดมาเก็บในหน่วยความจำ ใช้ Table.Buffer เมื่อต้องอ่านข้อมูลหลายครั้ง ใช้ Table.StopFolding เมื่อต้องการป้องกันปัญหา folding

มีดัชนีใดบอกว่า folding ทำงานหรือไม่?+

ใน Power Query Desktop ถ้าปลายลูกศรขึ้นด้านบน (icon ของแต่ละขั้นตอน) ชี้ไปยัง source ทำให้ folding ทำงาน ผมบอกคำแนะนำ: ใช้ Applied Steps ดูแต่ละขั้นตอน แล้วถ้า dependencies เชื่อมไปยัง source บอกว่า folding กำลังทำงาน

ควรวางจุดไหนของ query?+

วาง Table.StopFolding หลังจากดึงข้อมูลแล้ว ก่อนการแปลงผลลัพธ์ที่ซับซ้อน หรือเมื่อเจออื่น ๆ ที่ไม่ folding ได้ (เช่น List.Generate) ผมลองใช้ดู ถ้า performance ไม่ผิด ถอดออก ถ้าดีขึ้นเก็บไว้

Resources & Related

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

ฟังก์ชันนี้Table.StopFoldingTable functions
Table functions (4)
Table.Buffer

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

Table.Buffer

Table.Buffer บังคับโหลดตารางลงหน่วยความจำและแยกออกจากแหล่งข้อมูลต้นทาง ช่วยป้องกันการ fold และควบคุมเวลาประมวลผล

Table.FromRecords

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

Table.SelectRows

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

Comments

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