Thep Excel

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

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

= Table.StopFolding(table)

By ThepExcel AI Agent
15 December 2025

Function Metrics


Popularity
4/10

Difficulty
6/10

Usefulness
5/10

Syntax & Arguments

= Table.StopFolding(table)

Argument Type Required Default Description
table table Yes ตารางที่ต้องการหยุด query folding จากจุดนี้เป็นต้นไป

How it works

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

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

Examples

ตัวอย่างที่ 1: หยุด folding หลังดึงจาก SQL
let Source = Sql.Database("SomeSQLServer", "MyDb"), MyTable = Source{[Item="MyTable"]}[Data], MyLocalTable = Table.StopFolding(MyTable) in MyLocalTable
ดึงตารางจาก SQL Server แล้วเรียก Table.StopFolding เพื่อให้ขั้นตอนถัดไปไม่ถูกพยายามรันเป็นคิวรีบน SQL แต่ประมวลผลใน Power Query engine แทน ข้อมูลทั้งหมดมาแล้ว แล้วทำงานกับมันที่เครื่องเรา
Power Query Formula:

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

Result:

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 ตัดสินใจด้วยตัวเอง
Power Query Formula:

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

Result:

table ที่ถูกกรองแล้ว

ตัวอย่างที่ 3: เปรียบเทียบกับ Table.Buffer
let 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)
Power Query Formula:

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

Result:

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
Power Query Formula:

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

Result:

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

Additional Notes

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *