Function.InvokeAfter เรียกใช้ฟังก์ชันหลังจากรอเวลาที่กำหนด นำไปใช้ในการควบคุมความเร็วเรียกข้อมูล API หรือเพิ่มความล่าช้าระหว่างการประมวลผล
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| function | function | ฟังก์ชันที่ไม่มีพารามิเตอร์ (parameterless function) ที่ต้องเรียกใช้ เขียนเป็น lambda expression เช่น () => 42 |
| delay | duration | เวลาที่ต้องรอก่อนเรียกใช้ฟังก์ชัน ใช้รูปแบบ #duration(0, 0, 0, seconds) เช่น #duration(0, 0, 0, 2) คือรอ 2 วินาที |
Function.InvokeAfter ยอมให้เราเรียกใช้ฟังก์ชันไม่มีพารามิเตอร์หลังจากรอเวลาที่กำหนด โดยใช้ duration type ของ Power Query เช่น #duration(0, 0, 0, 2) เพื่อรอ 2 วินาที ฟังก์ชันจะทำงานอย่างอะซิงโครนัสและคืนค่าผลลัพธ์เมื่อเสร็จสิ้น
ที่เจ๋งคือ ผมใช้ Function.InvokeAfter เพื่อควบคุมอัตราการเรียก API ให้ไม่เกินลิมิต โดยเพิ่มความล่าช้าสั้นๆ ระหว่างการร้องขอ ตัวอย่างเช่น เมื่อดึงข้อมูลจาก API ที่มีข้อจำกัดจำนวนการร้องขออายุหนึ่ง ผมแยกการดึงข้อมูลออกเป็นชิ้นเล็กๆ แล้วใช้ Function.InvokeAfter เพื่อรอระหว่างแต่ละครั้ง
ส่วนตัวผม แนะนำให้ใช้ Function.InvokeAfter เมื่อเขียนคิวรี่ที่มีการเรียก API จำนวนมาก เพราะมันช่วยป้องกันการบล็อกหรือข้อผิดพลาด 429 Too Many Requests ได้อย่างมีประสิทธิภาพ 😎
ฟังก์ชัน lambda () => 42 จะทำงานหลังรอ 2 วินาที และคืนค่า 42
ฟังก์ชัน lambda จะรวมข้อความ "Hello" และ "World" เป็น "Hello World" หลังรอ 1 วินาที
สร้างฟังก์ชัน FetchData ที่ดึงข้อมูล API จากนั้นใช้ Function.InvokeAfter เพื่อรอ 3 วินาที ก่อนเรียกใช้ ช่วยป้องกัน API ที่มีข้อจำกัดอัตราการเรียก
สร้างฟังก์ชัน FetchWithDelay ที่เรียกข้อมูลแต่ละ URL พร้อมความล่าช้า 2 วินาที เหมาะสำหรับเซิร์ฟเวอร์ที่มีข้อจำกัดจำนวนการร้องขอต่อวินาที
ผมแนะนำให้ใช้ Function.InvokeAfter เมื่อเรียก API ที่มีข้อจำกัดความถี่ (rate limiting) หรือเมื่อต้องการเพิ่มความล่าช้าระหว่างการส่งข้อมูลเพื่อหลีกเลี่ยงการบล็อก โดยมักใช้ร่วมกับ List.Transform หรือ Table.AddColumn เพื่อประมวลผลข้อมูลหลาย ๆ ชุด
ฟังก์ชันต้องไม่มีพารามิเตอร์ (parameterless function) เขียนเป็น lambda expression เช่น () => 42 หรือ () => Text.Combine(…) ถ้าฟังก์ชันต้องใช้พารามิเตอร์ ผมต้องสร้างฟังก์ชัน wrapper ไว้
ใช่ ต้องใช้ #duration เพื่อระบุเวลารอ รูปแบบคือ #duration(days, hours, minutes, seconds) ตัวอย่างเช่น #duration(0, 0, 0, 2) คือรอ 2 วินาที, #duration(0, 0, 1, 0) คือรอ 1 นาที
ผมคืนค่าผลลัพธ์ของฟังก์ชนที่เรียก ประเภทของค่าขึ้นอยู่กับสิ่งที่ฟังก์ชันนั้นทำ (any type) เช่น ถ้าฟังก์ชันคืนค่าตัวเลข ผมจะคืนค่าตัวเลข ถ้าคืนค่า JSON ผมจะคืนค่า JSON
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Function.InvokeAfter จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Function.Invoke เรียกใช้ฟังก์ชันโดยส่งรายการอาร์กิวเมนต์เป็นพารามิเตอร์ ใช้สำหรับการเรียกฟังก์ชันแบบไดนามิก
List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม
Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์
Web.Contents เป็นฟังก์ชันสำหรับดาวน์โหลดเนื้อหาจากเว็บไซต์หรือแหล่งข้อมูลบนอินเทอร์เน็ตผ่าน URL และคืนค่าเป็นข้อมูลแบบ binary data ที่สามารถนำไปประมวลผลต่อได้
.
รองรับการเชื่อมต่อและเรียกใช้งาน REST API อย่างครบถ้วนพร้อมระบบการยืนยันตัวตนผ่านทางตัวเลือกต่างๆ เช่น การกำหนดค่า Headers สำหรับส่งข้อมูลเพิ่มเติมในคำขอ การใช้ Query parameters สำหรับการกรองข้อมูลและส่งพารามิเตอร์ และการระบุ ApiKeyName เพื่อจัดเก็บคีย์การเข้าถึงอย่างปลอดภัย
.
เหมาะอย่างยิ่งสำหรับการเชื่อมต่อกับบริการเว็บและจุดเชื่อมต่อ API แบบไดนามิก โดยใช้ความสามารถของ RelativePath และตัวเลือก Query เพื่อสร้าง URL แบบยืดหยุ่นและทำให้กระบวนการรีเฟรชข้อมูลทำงานได้อย่างราบรื่นและมีประสิทธิภาพในระบบ Power BI Service
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่