Table.StopFolding ป้องกันไม่ให้ขั้นตอน downstream ถูกส่งกลับไปประมวลผลที่ data source เดิม ช่วยเมื่อต้องดีบักหรือเมื่อการบังคับประมวลผลใน Power Query ให้ผลลัพธ์ที่คาดหวัง
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| table | table | ตารางที่ต้องการหยุด query folding จากจุดนี้เป็นต้นไป |
Table.StopFolding หยุด Query Folding (การส่งสั่งกลับไปยัง data source เดิม) ทำให้ขั้นตอนถัดไปไม่ถูกแปลงเป็นคิวรีที่รันบนแหล่งข้อมูล แต่ประมวลผลใน Power Query engine แทน
ที่เจ๋งคือในบางกรณี folding อาจส่งผลลัพธ์ที่ไม่คาดหวัง เช่นเมื่อตรรมชาติของฐานข้อมูล (ตัวอักษรพิมพ์เล็ก/ใหญ่ หรือวันที่) มีพฤติกรรมต่างจาก Power Query ด้วย Table.StopFolding เราบังคับให้ประมวลผลทั้งหมดเกิดขึ้นใน Power Query ซึ่งให้ความสอดคล้อง
ส่วนตัวผมใช้บ่อยเวลาดีบักปัญหาข้อมูล ตัดสินใจว่าส่วนไหน folding ได้ส่วนไหนไม่ได้ หรือเมื่อความสามารถของแหล่งข้อมูลจำกัด (บางฐานข้อมูลอ่อนแอบางประมาณ) ผมใช้ StopFolding เพื่อเลี่ยงปัญหา timeout หรือคิวรีที่ซับซ้อน
เมื่อขั้นตอนบางอย่างทำให้ query folding ล้มเหลวหรือทำให้เกิดข้อจำกัดบนแหล่งข้อมูล ให้ใช้ Table.StopFolding เพื่อย้ายการประมวลผลมาอยู่ที่ Power Query
ดึงตารางจาก SQL Server แล้วเรียก Table.StopFolding เพื่อให้ขั้นตอนถัดไปไม่ถูกพยายามรันเป็นคิวรีบน SQL แต่ประมวลผลใน Power Query engine แทน ข้อมูลทั้งหมดมาแล้ว แล้วทำงานกับมันที่เครื่องเรา
ใช้ Table.StopFolding ก่อน Table.SelectRows เมื่อเงื่อนไขการกรองซับซ้อนหรือเมื่อข้อมูลขึ้นอยู่กับลำดับการประมวลผล บางครั้งฐานข้อมูลอาจเข้าใจเงื่อนไข AND/OR ต่างจากที่เรา คิด StopFolding บังคับให้ Power Query ตัดสินใจด้วยตัวเอง
Table.StopFolding และ Table.Buffer ทำงานต่างกัน StopFolding ป้องกันการส่งคิวรีไปยังต้นทาง ส่วน Buffer บังคับให้อ่านข้อมูลทั้งหมดและเก็บไว้ในหน่วยความจำ บ่อยครั้งที่เราใช้ทั้งสองเมื่อต้องการประสิทธิภาพ (Buffer) และความสอดคล้อง (StopFolding)
SQL Server อาจจัดการตัวอักษรพิมพ์เล็ก/ใหญ่ต่างจาก Power Query (Case-sensitive vs Case-insensitive) ด้วย Table.StopFolding เราแน่ใจว่า Text.Lower ทำงานตามที่ Power Query กำหนด ไม่ใช่ตามพฤติกรรมของ SQL
ไม่เสมอ การย้ายงานมาทำใน Power Query (แทนที่จะให้ SQL ประมวลผล) อาจช้ากว่าเดิม ผมแนะนำให้ใช้ Table.StopFolding เมื่อจำเป็นเท่านั้น เช่น ดีบักปัญหาหรือเลี่ยงข้อจำกัดของแหล่งข้อมูล ส่วนใหญ่ folding ช่วยให้เร็ว
Table.StopFolding หยุดการส่งสั่งกลับไปยัง source แต่ไม่บังคับอ่านข้อมูล ส่วน Table.Buffer บังคับให้อ่านข้อมูลทั้งหมดมาเก็บในหน่วยความจำ ใช้ Table.Buffer เมื่อต้องอ่านข้อมูลหลายครั้ง ใช้ Table.StopFolding เมื่อต้องการป้องกันปัญหา folding
ใน Power Query Desktop ถ้าปลายลูกศรขึ้นด้านบน (icon ของแต่ละขั้นตอน) ชี้ไปยัง source ทำให้ folding ทำงาน ผมบอกคำแนะนำ: ใช้ Applied Steps ดูแต่ละขั้นตอน แล้วถ้า dependencies เชื่อมไปยัง source บอกว่า folding กำลังทำงาน
วาง Table.StopFolding หลังจากดึงข้อมูลแล้ว ก่อนการแปลงผลลัพธ์ที่ซับซ้อน หรือเมื่อเจออื่น ๆ ที่ไม่ folding ได้ (เช่น List.Generate) ผมลองใช้ดู ถ้า performance ไม่ผิด ถอดออก ถ้าดีขึ้นเก็บไว้
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.StopFolding จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
โหลดตารางเข้าสู่หน่วยความจำ (RAM) เพื่อแยกข้อมูลจากแหล่งเดิมและป้องกันไม่ให้ Query Folding ดึงข้อมูลใหม่
Table.Buffer บังคับโหลดตารางลงหน่วยความจำและแยกออกจากแหล่งข้อมูลต้นทาง ช่วยป้องกันการ fold และควบคุมเวลาประมวลผล
แปลง List ของ Record เป็นตาราง โดยแต่ละ Record กลายเป็นหนึ่งแถว เหมาะสำหรับข้อมูลจาก API หรือ JSON
Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่