หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ: แอป
พื้นที่ทํางาน Copilot Studio
Desktop โฟลว์
แอป
แบบจําลอง Power Platform CLI
ฟังก์ชัน
Dataverse Power Pages
คำนวณค่าและดำเนินการสำหรับ เรกคอร์ด ทั้งหมดใน ตาราง
คำอธิบาย
ฟังก์ชันจะ ForAll ประเมินสูตรสําหรับระเบียนทั้งหมดในตาราง สูตรสามารถคำนวณค่าและ/หรือทำการดำเนินการ เช่น การปรับเปลี่ยนข้อมูล หรือการทำงานกับการเชื่อมต่อ ใช้ ฟังก์ชัน With เพื่อประเมินสูตรสำหรับเรกคอร์ดเดียว
ใช้ฟังก์ชัน Sequence กับForAllฟังก์ชันเพื่อทําซ้ําตามจํานวน
ฟิลด์ของเรกคอร์ดที่กำลังประมวลผลอยู่สามารถใช้งานได้ภายในสูตร ใช้ ตัวดำเนินการ ThisRecord หรือเพียงแค่อ้างอิงชื่อของฟิลด์เหมือนที่คุณทำกับค่าอื่น ตัวดำเนินการ Asยังสามารถใช้เพื่อตั้งชื่อเรกคอร์ดที่กำลังประมวลผล ซึ่งสามารถช่วยให้สูตรของคุณง่ายต่อการเข้าใจมากขึ้น และทำให้สามารถเข้าถึงเรกคอร์ดที่ซ้อนกันได้ สำหรับข้อมูลเพิ่มเติม ดูตัวอย่างด้านล่างและ การทำงานกับขอบเขตเรกคอร์ด
ค่าที่ส่งกลับ
จะส่งกลับผลลัพธ์ของการประเมินแต่ละสูตรในตาราง ตามลำดับเดียวกับตารางข้อมูลขาเข้า
ถ้าผลลัพธ์ของสูตรเป็นค่าเดียว ตารางผลลัพธ์จะเป็นตารางแบบคอลัมน์เดียว ถ้าผลลัพธ์ของสูตรเป็นตาราง ตารางผลลัพธ์จะมีเรกคอร์ดที่มีคอลัมน์เดียวกับเรกคอร์ดผลลัพธ์
ถ้าผลลัพธ์ของสูตรเป็นค่า ว่าง จะไม่มีระเบียนในตารางผลลัพธ์สําหรับระเบียนข้อมูลป้อนเข้านั้น ในกรณีนี้ มีระเบียนในตารางผลลัพธ์น้อยกว่าตารางต้นทาง
ทำการดำเนินการ
สูตรสามารถมีฟังก์ชันที่ทำการดำเนินการ เช่น การปรับเปลี่ยนเรกคอร์ดของแหล่งข้อมูล ด้วยฟังก์ชัน Patch และ Collect สูตรยังสามารถเรียกวิธีการเชื่อมต่อได้ สามารถทำการดำเนินการหลายอย่างได้ต่อหนึ่งเรกคอร์ด โดยการใช้ ตัวดำเนินการ ; คุณไม่สามารถปรับเปลี่ยนตารางที่เป็นหัวเรื่องของ ForAll ฟังก์ชันได้
เมื่อเขียนสูตรของคุณ ให้จำไว้ว่าสามารถดำเนินการเรกคอร์ดตามลำดับใดก็ได้ เมื่อเป็นไปได้ พร้อมๆ กัน เรกคอร์ดแรกของตารางอาจได้รับการดำเนินการหลังจากเรกคอร์ดสุดท้าย
ใช้ความระมัดระวังเพื่อหลีกเลี่ยงการเรียงลำดับที่ขึ้นต่อกัน ด้วยเหตุนี้ คุณจึงไม่สามารถใช้ฟังก์ชัน UpdateContextClear และClearCollect ภายใน ForAll ฟังก์ชันได้ เนื่องจากสามารถใช้ฟังก์ชันดังกล่าวเพื่อจัดเก็บตัวแปรที่ทําให้ผลลัพธ์นี้เปลี่ยนแปลงได้อย่างง่ายดาย คุณสามารถใช้ Collect ได้ แต่จะไม่สามารถระบุลำดับการเพิ่มเรกคอร์ดได้
หลายๆ ฟังก์ชันที่ปรับเปลี่ยนแหล่งข้อมูล รวมถึง CollectRemove และ Update จะส่งกลับแหล่งข้อมูลที่เปลี่ยนแปลงเป็นค่าที่ส่งกลับ ค่าที่ส่งกลับเหล่านี้อาจมีขนาดใหญ่และใช้ทรัพยากรที่สําคัญถ้าถูกส่งกลับสําหรับทุกระเบียนของ ForAll ตาราง นอกจากนี้ คุณยังอาจพบว่าค่าที่ส่งกลับไม่ใช่ค่าที่คุณคาดหวังไว้ เนื่องจาก ForAll สามารถดําเนินการแบบขนานและอาจแยกผลข้างเคียงของฟังก์ชันเหล่านี้ออกจากการรับผลลัพธ์ ถ้าไม่ได้ใช้ค่าที่ส่งกลับจาก ForAll ซึ่งมักจะเกิดขึ้นในกรณีที่มีฟังก์ชันการปรับเปลี่ยนข้อมูล ค่าที่ส่งกลับจะไม่ถูกสร้างขึ้นและไม่ต้องกังวลเกี่ยวกับทรัพยากรหรือคําสั่งซื้อ แต่ถ้าคุณกําลังใช้ผลลัพธ์ของ ForAll ฟังก์ชัน และหนึ่งในฟังก์ชันที่ส่งกลับแหล่งข้อมูล ให้คิดอย่างรอบคอบเกี่ยวกับวิธีการจัดโครงสร้างผลลัพธ์และลองใช้กับชุดข้อมูลขนาดเล็กก่อน
ทางเลือก
หลายฟังก์ชันใน Power Apps สามารถดําเนินการได้มากกว่าหนึ่งค่าในแต่ละครั้งโดยใช้ตารางแบบคอลัมน์เดียว ตัวอย่างเช่น ฟังก์ชัน Len สามารถประมวลผลตารางของค่าข้อความ ส่งกลับตารางความยาวด้วยวิธีเดียวกันนี้ ForAll สามารถทําได้ ซึ่งสามารถขจัดความจําเป็นในการใช้งาน ForAll ในหลายกรณี อาจมีประสิทธิภาพมากขึ้น และอ่านได้ง่ายขึ้น
ข้อควรพิจารณาอีกประการหนึ่งคือ ForAll ไม่สามารถมอบสิทธิ์ได้ในขณะที่ฟังก์ชันอื่น ๆ อาจเป็น เช่น Filter
การมอบหมาย
เมื่อใช้กับแหล่งข้อมูล ฟังก์ชันนี้ไม่สามารถมอบสิทธิ์ เฉพาะแหล่งข้อมูลส่วนแรกเท่านั้นที่จะมีการเรียกข้อมูลแล้วมีการนำฟังก์ชันไปใช้ ผลลัพธ์อาจไม่แสดงข้อมูลการดำเนินการทั้งหมด คำเตือนอาจปรากฏในเวลาที่มีการสร้างเพื่อเตือนคุณเกี่ยวกับการจำกัดนี้และแนะนำให้สลับไปยังรายการอื่นที่สามารถมอบสิทธิ์ได้ หากสามารถทำได้ สำหรับข้อมูลเพิ่มเติม ดูที่ ภาพรวมของการมอบสิทธิ์
ไวยากรณ์
ForAll(ตาราง, สูตร)
- ตาราง - จำเป็นต้องมี ตารางที่จะดำเนินการ
- สูตร - จำเป็น สูตรที่จะประเมินสำหรับเรกคอร์ดทั้งหมดของ ตาราง
ตัวอย่าง
การคำนวณ
ตัวอย่างต่อไปนี้ใช้ แหล่งข้อมูลSquares:
เมื่อต้องการสร้างแหล่งข้อมูลนี้เป็นคอลเลกชัน ให้ตั้งค่าคุณสมบัติ OnSelect ของตัวควบคุม ปุ่ม ในสูตรนี้ เปิดโหมดแสดงตัวอย่าง แล้วเลือกปุ่ม:
ClearCollect( Squares, [ "1", "4", "9" ] )
| สูตร | คำอธิบาย | ผลลัพธ์ |
|---|---|---|
|
ForAll( Squares, Sqrt( Value ) ) Sqrt( กำลังสอง ) |
สำหรับทุกเรกคอร์ดของตารางขาเข้า จะคำนวณรากที่สองของคอลัมน์ ค่า คุณยังสามารถใช้ฟังก์ชัน Sqrt กับตารางคอลัมน์เดียวได้ ทําให้สามารถทําตามตัวอย่างนี้ได้โดยไม่ต้องใช้ForAll |
|
| ForAll( Squares, Power( Value, 3 ) ) | สำหรับทุกเรกคอร์ดของตารางขาเข้า จะเพิ่มคอลัมน์ ค่า เป็นจำนวนยกกำลังสาม ฟังก์ชัน Power ไม่สนับสนุนตารางคอลัมน์เดียว ดังนั้น ForAll ต้องใช้ในกรณีนี้ |
|
การใช้การเชื่อมต่อ
ตัวอย่างต่อไปนี้ใช้ แหล่งข้อมูลExpressions:
เมื่อต้องการสร้างแหล่งข้อมูลนี้เป็นคอลเลกชัน ให้ตั้งค่าคุณสมบัติ OnSelect ของตัวควบคุม ปุ่ม ในสูตรนี้ เปิดโหมดแสดงตัวอย่าง แล้วเลือกปุ่ม:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
ตัวอย่างนี้ยังใช้การเชื่อมต่อ Microsoft Translator เมื่อต้องการเพิ่มการเชื่อมต่อนี้ไปยังแอปของคุณ ให้ดูบทความเกี่ยวกับวิธี จัดการการเชื่อมต่อ
| สูตร | คำอธิบาย | ผลลัพธ์ |
|---|---|---|
| ForAll(Expressions, MicrosoftTranslator.Translate(Value, "es")) | สำหรับทุกเรกคอร์ดในตาราง Expressions จะแปลเนื้อหาของคอลัมน์ ค่า เป็นภาษาสเปน (ตัวย่อ "es") |
|
| ForAll(Expressions, MicrosoftTranslator.Translate(Value, "fr")) | สำหรับทุกเ่รกคอร์ดในตาราง Expressions จะแปลเนื้อหาของคอลัมน์ ค่า เป็นภาษาฝรั่งเศส (ตัวย่อ "fr") |
|
การคัดลอกตาราง
ในบางครั้ง คุณต้องกรองข้อมูล รูปร่าง เรียงลำดับ และจัดการ Power Apps มีฟังก์ชันมากมายสำหรับการทำเช่นนี้ เช่น FilterAddColumns และ Sort Power Apps จะถือว่าแต่ละตารางเป็นค่า ทําให้ตารางนั้นไหลผ่านสูตรและใช้งานได้อย่างง่ายดาย
และบางครั้งคุณต้องการทำสำเนาของผลลัพธ์นี้เพื่อใช้ในภายหลัง หรือคุณต้องการย้ายข้อมูลจากแหล่งข้อมูลหนึ่งไปยังอีกรายการหนึ่ง Power Apps มีฟังก์ชัน Collect สำหรับคัดลอกข้อมูล
แต่ก่อนที่คุณจะทําสําเนา ให้คิดอย่างรอบคอบว่าจําเป็นหรือไม่ สามารถจัดการหลายๆ สถานการณ์ได้โดยการกรองและการจัดรูปร่าง แหล่งข้อมูลที่เกี่ยวข้องตามความต้องการด้วยสูตร ข้อเสียบางอย่างของการทำสำเนา ได้แก่:
- สำเนาสองฉบับที่มีข้อมูลเดียวกันอาจทำให้หนึ่งฉบับมีข้อมูลไม่ตรงกัน
- การทำสำเนาอาจใช้หน่วยความจำของคอมพิวเตอร์ แบนด์วิดท์ และ/หรือเวลาอย่างมาก
- สําหรับแหล่งข้อมูลส่วนใหญ่ การคัดลอกไม่สามารถรับมอบสิทธิ์ได้ ซึ่งจํากัดปริมาณข้อมูลที่สามารถย้ายได้
ตัวอย่างต่อไปนี้ใช้ แหล่งข้อมูลผลิตภัณฑ์:
เมื่อต้องการสร้างแหล่งข้อมูลนี้เป็นคอลเลกชัน ให้ตั้งค่าคุณสมบัติ OnSelect ของตัวควบคุม ปุ่ม ในสูตรนี้ เปิดโหมดแสดงตัวอย่าง แล้วเลือกปุ่ม:
ClearCollect( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
เป้าหมายของเราคือการทำงานกับตารางที่คัดลอกมาที่มีเฉพาะรายการที่มีปริมาณที่ขอมากกว่าปริมาณที่พร้อมใช้งาน และตารางที่เราต้องการสร้างคำสั่งซื้อ:
เราสามารถดำเนินการงานนี้ได้ด้วยสองวิธี โดยทั้งสองวิธีจะให้ผลลัพธ์เดียวกัน และมีข้อดีและข้อเสียต่างกัน
การจัดรูปทรงตารางตามความต้องการ
ไม่ต้องทำสำเนา! เราสามารถใช้สูตรต่อไปนี้ที่ใดก็ตามที่เราต้องการ:
// Table shaping on demand, no need for a copy of the result
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
ขอบเขตเรกคอร์ด จะถูกสร้างขึ้นด้วยฟังก์ชัน Filter และ AddColumns เพื่อทำการเปรียบเทียบและการลบตามลำดับ ด้วยฟิลด์ 'ปริมาณที่ขอ' และ 'ปริมาณที่พร้อมใช้งาน' สำหรับแต่ละเรกคอร์ด
ในตัวอย่างนี้ ฟังก์ชัน Filter สามารถรับมอบสิทธิ์ได้ ซึ่งเป็นสิ่งสำคัญ เนื่องจากสามารถค้นหาผลิตภัณฑ์ทั้งหมดที่ตรงกับเกณฑ์ แม้ว่าจะเป็นเพียงไม่กี่เรกคอร์ดจากหลายล้านเรกคอร์ดในตาราง ในขณะนี้ ShowColumns และ AddColumns ไม่สามารถรับมอบสิทธิ์ได้ ดังนั้น จํานวนผลิตภัณฑ์จริงที่จําเป็นต้องสั่งซื้อจึงถูกจํากัด ถ้าคุณทราบว่าขนาดของผลลัพธ์นี้มีขนาดเล็กเสมอ สามารถใช้วิธีนี้ได้
และเนื่องจากเราไม่ได้ทําสําเนา จึงไม่มีสําเนาเพิ่มเติมของข้อมูลในการจัดการหรือล้าสมัย
ForAll ตามความต้องการ
อีกวิธีหนึ่งคือการใช้ ForAll ฟังก์ชันเพื่อแทนที่ฟังก์ชันการจัดรูปร่างตาราง:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
สูตรนี้อาจทำให้ผู้ใช้บางส่วนอ่านและเขียนได้ง่ายยิ่งขึ้น
ไม่มีส่วนของ ForAll สามารถมอบสิทธิ์ได้ เฉพาะส่วนแรกของตาราง ผลิตภัณฑ์ จะถูกประเมิน ซึ่งอาจเกิดปัญหาขึ้นได้ถ้าตารางนี้มีขนาดใหญ่ เนื่องจาก Filter อาจได้รับมอบสิทธิ์ในตัวอย่างก่อนหน้า จึงสามารถทำงานได้ดียิ่งขึ้นกับชุดข้อมูลขนาดใหญ่
รวบรวมผลลัพธ์
ในบางสถานการณ์ อาจต้องใช้สำเนาข้อมูล คุณอาจต้องย้ายข้อมูลจากแหล่งข้อมูลหนึ่งไปยังอีกแหล่งข้อมูลหนึ่ง ในตัวอย่างนี้ คำสั่งซื้อจะถูกสร้างขึ้นในตาราง NewOrder บนระบบของผู้จัดจำหน่าย สําหรับการโต้ตอบความเร็วสูงกับผู้ใช้ คุณอาจต้องแคชสําเนาตารางในเครื่องเพื่อให้ไม่มีเวลาแฝงของเซิร์ฟเวอร์
เราใช้การจัดรูปร่างตารางแบบเดียวกับสองตัวอย่างก่อนหน้า แต่เราจะเก็บผลลัพธ์ไว้ในคอลเลกชัน:
ClearCollect( NewOrder,
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
)
ClearCollect( NewOrder,
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
ClearCollect และ Collect ไม่สามารถมอบหมายได้ ทำให้ปริมาณข้อมูลที่สามารถย้ายได้ด้วยวิธีนี้ถูกจำกัด
รวบรวมภายใน ForAll
สุดท้าย เราสามารถดําเนินการ Collect ได้โดยตรงภายใน ForAll:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
อีกครั้ง ฟังก์ชัน ForAll ไม่สามารถรับมอบสิทธิ์ได้ในขณะนี้ ถ้าตาราง Products มีขนาดใหญ่ ดู ForAll ที่ระเบียนชุดแรกเท่านั้น และเราอาจพลาดผลิตภัณฑ์บางอย่างที่จําเป็นต้องสั่งซื้อ แต่สําหรับตารางที่เราทราบว่ามีขนาดเล็กอยู่ วิธีนี้ใช้ได้
โปรดทราบว่าเราจะไม่จัดเก็บผลลัพธ์ของForAll การเรียกใช้ฟังก์ชัน Collect จากภายในจะส่งกลับแหล่งข้อมูล NewOrder สําหรับทุกระเบียน ซึ่งอาจเพิ่มข้อมูลจํานวนมากถ้าเรากําลังจัดเก็บ
แมปตารางในส่วนประกอบ
ดูที่ แมปตาราง