Table.WithErrorContext เป็นฟังก์ชันภายใน Power Query ที่ใช้เพิ่มข้อมูล context ให้กับค่า เพื่อให้ error messages มีความชัดเจนมากขึ้นเวลา debug
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| value | any | ค่าที่ต้องการเพิ่มข้อมูล context ให้ (สามารถเป็น table, record, list, หรือค่าใด ๆ ก็ได้) |
| context | text | ข้อความ context ที่อธิบายค่า หรือบอก error context information (เช่น ‘Rows 1-100’, ‘Processing Customer Table’, ‘Validation Step 2’) |
Table.WithErrorContext คือฟังก์ชันภายใน Power Query ที่ออกแบบมาสำหรับการจัดการข้อมูล context ในช่วงประมวลผล โดยเชื่อมข้อมูล context text เข้ากับค่า (value) เพื่อให้เมื่อเกิด error ขึ้นมา error message นั้นจะมีข้อมูลที่ชี้แจงมากขึ้น
ที่เจ๋งคือ ฟังก์ชันนี้ช่วยให้เรา track ได้ว่าข้อมูลไปถึงขั้นไหนในกระบวนการประมวลผล และเกิด error จากขั้นตอนไหน ทำให้ debugging ซับซ้อนได้ง่ายขึ้นมากเลย โดยไม่ต้องลองผิดลองถูกนาน
ส่วนตัวผมใช้ Table.WithErrorContext บ่อยเวลาต้องประมวลผลข้อมูลแบบ multi-step ที่มีหลายตาราง transform เพราะถ้า error เกิดขึ้น ก็รู้ได้ทันทีว่า “ปัญหาอยู่ตรงไหน” แทนที่จะ scroll หา error ไปสักพักครึ่ง
Debugging
Error Tracing
ใช้ Table.WithErrorContext เพื่อเพิ่มข้อมูล context ให้กับ Source table ว่า data นี้มาจากการ load ครั้งแรก เพื่อให้ debug ได้ชัดเจน
รวม Table.WithErrorContext กับ try-catch เพื่อให้ได้ error message ที่มีข้อมูล context ชี้แจงมากขึ้น ทำให้รู้ว่า error เกิดตรงไหนในกระบวนการ
เพิ่ม context ที่ละเอียดสำหรับแต่ละขั้นตอน เพื่อให้ถ้า error เกิดขึ้น จะรู้ได้ว่าล้มเหลวตรง Step ไหน ทำให้ debug ง่ายมาก
Table.WithErrorContext สามารถใช้กับ record ได้ด้วย ไม่จำเป็นต้องใช้แค่ table เท่านั้น ช่วยให้ tracking record ง่ายขึ้น
ใช่ค่ะ ผม Table.WithErrorContext เป็นฟังก์ชันภายในของ Power Query ที่ Microsoft ออกแบบมาสำหรับใช้ภายในระบบ ไม่ได้ recommend ใช้ใน production query อย่างเป็นทางการ แต่ยังสามารถใช้ได้ตามปกติ ปัญหาคือ ถ้า Microsoft เปลี่ยนการทำงาน version ใหม่ อาจจะ break code ได้
ผมแนะนำให้ใช้กับค่าใด ๆ ก็ได้ (table, record, list, text, number) แต่โดยทั่วไปเหมาะสุดเวลาใช้กับ table หรือ record เพื่อเพิ่มข้อมูล debug context โดยเฉพาะ multi-step transformation ที่มีหลาย steps
ผม try-catch ใช้สำหรับ**จับ** error ที่เกิดขึ้นแล้ว ส่วน Table.WithErrorContext ใช้เพื่อ**เตรียม context** ให้ error message มีข้อมูลชี้แจงมากขึ้น ทั้งสองตัวสามารถใช้ร่วมกันได้ดี ผม try-catch ข้างนอก Table.WithErrorContext ข้างในเลย
ผม context นั้น จะบันทึกอยู่ใน value และจะปรากฏขึ้นมา เวลาที่ error เกิดขึ้น ผมเห็นมันอยู่ใน error message หรือ diagnostic data ของ Power Query
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.WithErrorContext จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์
Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่
Table.TransformColumns ใช้สำหรับแปลงข้อมูลในคอลัมน์โดยใช้ฟังก์ชันที่กำหนดไว้ แต่ละคอลัมน์สามารถมีการแปลงแตกต่างกันได้ รองรับการเปลี่ยนแปลงประเภทข้อมูลในเวลาเดียวกัน
Action.WithErrorContext ให้บริบทข้อผิดพลาดเมื่อประมวลผลการดำเนินการ ช่วยในการแก้จุดบกพร่องและการจัดการข้อผิดพลาด
Function.InvokeWithErrorContext เรียกใช้ฟังก์ชันพร้อมบริบทข้อผิดพลาด
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่