Thep Excel

Function.InvokeAfterเรียกใช้ฟังก์ชันหลังจากเวลาที่ระบุ

Function.InvokeAfter เรียกใช้ฟังก์ชันหลังจากรอเวลาที่กำหนด นำไปใช้ในการควบคุมความเร็วเรียกข้อมูล API หรือเพิ่มความล่าช้าระหว่างการประมวลผล

fx
=Function.InvokeAfter(function, delay) as any

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

อัปเดต 12 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
function function ฟังก์ชันที่ไม่มีพารามิเตอร์ (parameterless function) ที่ต้องเรียกใช้ เขียนเป็น lambda expression เช่น () => 42
delay duration เวลาที่ต้องรอก่อนเรียกใช้ฟังก์ชัน ใช้รูปแบบ #duration(0, 0, 0, seconds) เช่น #duration(0, 0, 0, 2) คือรอ 2 วินาที

Additional Notes

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 ได้อย่างมีประสิทธิภาพ 😎

Examples

เรียกใช้ฟังก์ชันแบบเรียบง่ายหลังรอ 2 วินาทีFunction.InvokeAfter(() => 42, #duration(0, 0, 0, 2))

ฟังก์ชัน lambda () => 42 จะทำงานหลังรอ 2 วินาที และคืนค่า 42

fx
=Function.InvokeAfter(() => 42, #duration(0, 0, 0, 2))

ผลลัพธ์42 (หลังรอ 2 วินาที)
รวมข้อความหลังรอ 1 วินาทีFunction.InvokeAfter(() => Text.Combine({"Hello", "World"}, " "), #duration(0, 0, 0, 1))

ฟังก์ชัน lambda จะรวมข้อความ "Hello" และ "World" เป็น "Hello World" หลังรอ 1 วินาที

fx
=Function.InvokeAfter(() => Text.Combine({"Hello", "World"}, " "), #duration(0, 0, 0, 1))

ผลลัพธ์"Hello World" (หลังรอ 1 วินาที)
การเรียกข้อมูล API ที่มีความล่าช้าlet FetchData = () => Json.Document(Web.Contents("https://api.example.com/data")), WithDelay = Function.InvokeAfter(FetchData, #duration(0, 0, 0, 3)) in WithDel…

สร้างฟังก์ชัน FetchData ที่ดึงข้อมูล API จากนั้นใช้ Function.InvokeAfter เพื่อรอ 3 วินาที ก่อนเรียกใช้ ช่วยป้องกัน API ที่มีข้อจำกัดอัตราการเรียก

fx
let
FetchData = () => Json.Document(Web.Contents("https://api.example.com/data")),
WithDelay = Function.InvokeAfter(FetchData, #duration(0, 0, 0, 3))
in
WithDelay

ผลลัพธ์ข้อมูล JSON จากเซิร์ฟเวอร์ (หลังรอ 3 วินาที)
ควบคุมความล่าช้าระหว่างการเรียกข้อมูลหลาย ๆ ครั้งlet URLs = {"url1", "url2", "url3"}, FetchWithDelay = (url) => Function.InvokeAfter( () => Json.Document(Web.Contents(url)), #duration(0, 0, 0, 2) ), Results =…

สร้างฟังก์ชัน FetchWithDelay ที่เรียกข้อมูลแต่ละ URL พร้อมความล่าช้า 2 วินาที เหมาะสำหรับเซิร์ฟเวอร์ที่มีข้อจำกัดจำนวนการร้องขอต่อวินาที

fx
let
URLs = {"url1", "url2", "url3"},
FetchWithDelay = (url) => Function.InvokeAfter(
() => Json.Document(Web.Contents(url)),
#duration(0, 0, 0, 2)
),
Results = List.Transform(URLs, FetchWithDelay)
in
Results

ผลลัพธ์รายชื่อข้อมูล JSON จากทั้ง 3 URL (แต่ละขั้นรอ 2 วินาที)

FAQs

ผมต้องใช้ Function.InvokeAfter เมื่อไหร่?+

ผมแนะนำให้ใช้ Function.InvokeAfter เมื่อเรียก API ที่มีข้อจำกัดความถี่ (rate limiting) หรือเมื่อต้องการเพิ่มความล่าช้าระหว่างการส่งข้อมูลเพื่อหลีกเลี่ยงการบล็อก โดยมักใช้ร่วมกับ List.Transform หรือ Table.AddColumn เพื่อประมวลผลข้อมูลหลาย ๆ ชุด

ฟังก์ชันที่ส่งเข้า Function.InvokeAfter ต้องเป็นแบบไหน?+

ฟังก์ชันต้องไม่มีพารามิเตอร์ (parameterless function) เขียนเป็น lambda expression เช่น () => 42 หรือ () => Text.Combine(…) ถ้าฟังก์ชันต้องใช้พารามิเตอร์ ผมต้องสร้างฟังก์ชัน wrapper ไว้

ผมจำเป็นต้องใช้ #duration ไหม?+

ใช่ ต้องใช้ #duration เพื่อระบุเวลารอ รูปแบบคือ #duration(days, hours, minutes, seconds) ตัวอย่างเช่น #duration(0, 0, 0, 2) คือรอ 2 วินาที, #duration(0, 0, 1, 0) คือรอ 1 นาที

Function.InvokeAfter คืนค่าอะไร?+

ผมคืนค่าผลลัพธ์ของฟังก์ชนที่เรียก ประเภทของค่าขึ้นอยู่กับสิ่งที่ฟังก์ชันนั้นทำ (any type) เช่น ถ้าฟังก์ชันคืนค่าตัวเลข ผมจะคืนค่าตัวเลข ถ้าคืนค่า JSON ผมจะคืนค่า JSON

Resources & Related

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

ฟังก์ชันนี้Function.InvokeAfterFunction values
Function values (1)
Function.Invoke

Function.Invoke เรียกใช้ฟังก์ชันโดยส่งรายการอาร์กิวเมนต์เป็นพารามิเตอร์ ใช้สำหรับการเรียกฟังก์ชันแบบไดนามิก

List functions (1)
List.Transform

List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม

Table functions (1)
Table.AddColumn

Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์

Accessing data functions (1)
Web.Contents

Web.Contents เป็นฟังก์ชันสำหรับดาวน์โหลดเนื้อหาจากเว็บไซต์หรือแหล่งข้อมูลบนอินเทอร์เน็ตผ่าน URL และคืนค่าเป็นข้อมูลแบบ binary data ที่สามารถนำไปประมวลผลต่อได้
.
รองรับการเชื่อมต่อและเรียกใช้งาน REST API อย่างครบถ้วนพร้อมระบบการยืนยันตัวตนผ่านทางตัวเลือกต่างๆ เช่น การกำหนดค่า Headers สำหรับส่งข้อมูลเพิ่มเติมในคำขอ การใช้ Query parameters สำหรับการกรองข้อมูลและส่งพารามิเตอร์ และการระบุ ApiKeyName เพื่อจัดเก็บคีย์การเข้าถึงอย่างปลอดภัย
.
เหมาะอย่างยิ่งสำหรับการเชื่อมต่อกับบริการเว็บและจุดเชื่อมต่อ API แบบไดนามิก โดยใช้ความสามารถของ RelativePath และตัวเลือก Query เพื่อสร้าง URL แบบยืดหยุ่นและทำให้กระบวนการรีเฟรชข้อมูลทำงานได้อย่างราบรื่นและมีประสิทธิภาพในระบบ Power BI Service

Comments

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