หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ไดนามิก เป็นชนิดข้อมูลใน Power Fx ที่สามารถจัดเก็บโครงสร้างข้อมูลที่ซับซ้อนหรือเรียบง่ายได้ ไม่สามารถใช้โดยตรงและแปลงเป็นชนิดข้อมูลอื่นในขณะทํางานไม่ว่าจะโดยชัดแจ้งหรือโดยนัย เขตข้อมูลของเรกคอร์ดในค่า ไดนามิก สามารถเข้าถึงได้โดยใช้เครื่องหมายจุด และการมีอยู่ของเขตข้อมูลจะถูกตรวจสอบเฉพาะในขณะทํางานเท่านั้น
มีสองวิธีในการสร้างค่า ไดนามิก :
- การใช้ฟังก์ชัน ParseJSON
- การใช้ตัวเชื่อมต่อที่ส่งกลับชนิด "แบบไดนามิก"
Note
ไดนามิกเดิมเรียกว่า UntypedObject เฉพาะชื่อเท่านั้นที่เปลี่ยนแปลง จะไม่มีการเปลี่ยนแปลงในตรรกะ ตําแหน่งเดียวที่ชื่อจะปรากฏในสูตรอยู่ในเวอร์ชันทดลองของฟังก์ชันที่ผู้ใช้กําหนดเองและชนิดที่ผู้ใช้กําหนดเอง
ชนิดอย่างง่าย
ไม่สามารถใช้ค่าของตัวแปรที่มีค่า ไดนามิก ได้โดยตรง คุณจําเป็นต้องพิมพ์อย่างถูกต้องโดยใช้คอนสตรักเตอร์ชนิดที่สอดคล้องกันหรือโดยการแปลงเป็นชนิดเฉพาะด้วยฟังก์ชัน AsType และ ParseJSON
ตัวอย่างต่อไปนี้แปลงค่าของตัวแปร แบบไดนามิก ที่ DynValueชื่อ
Text(DynValue)
Value(DynValue)
ตารางต่อไปนี้แสดงรายการชนิดข้อมูลและฟังก์ชันที่สอดคล้องกันเพื่อแปลง ไดนามิก เป็นชนิดข้อมูลนั้น
| ชนิดข้อมูล | Function | Description |
|---|---|---|
| แบบบูลีน | Boolean() | เมื่อแปลง ไดนามิก เป็น บูลีน ค่าพื้นฐานจะต้องเป็นตัวแทนบูลีนหรือชนิดที่สามารถแปลงได้โดยอัตโนมัติ (เช่น สตริง "true") |
| Color | ColorValue() หรือ RGBA() | สีสามารถแสดงในเครื่องหมายข้อกำหนดสีของแผ่นงานที่จัดรูปแบบเป็นลำดับ (CSS) เป็นสตริงหรือเป็นส่วนประกอบ RGBA แต่ละรายการ ไดนามิกสามารถแปลงได้โดยตรงจากสตริงนิยามสี Cascading Style Sheet (CSS) โดยใช้ฟังก์ชัน ColorValue() หรือจากตัวเลข RGBA แต่ละรายการเป็นสีโดยใช้ฟังก์ชัน RGBA() |
| สกุลเงิน, ตัวเลข | Value() | เมื่อแปลง Dynamic เป็น Number ค่าพื้นฐานจะต้องแสดงตัวเลขหรือชนิดที่สามารถแปลงได้โดยอัตโนมัติ (เช่น สตริง "123.456") |
| วันที่, วันที่เวลา, เวลา | DateValue(), TimeValue() หรือ DateTimeValue() | วันที่ เวลา และวันที่เวลา สามารถแปลงได้โดยตรงจาก ไดนามิก เป็นประเภทที่เกี่ยวข้อง เมื่อแสดงในรูปแบบ ISO 8601 รูปแบบอื่นๆ เป็นข้อความก่อนโดยใช้ฟังก์ชัน Text() แล้วส่งผ่านฟังก์ชัน DateValue(), TimeValue() หรือ DateTimeValue() ซึ่งโดยค่าเริ่มต้นจะใช้ภาษาของการตั้งค่าปัจจุบันของผู้ใช้ในการตีความวันที่และเวลา |
| GUID | GUID() | สามารถแปลงค่า ไดนามิก เป็น GUID โดยตรงถ้าวัตถุพื้นฐานแสดง GUID หรือหากแสดงสตริง |
| ไฮเปอร์ลิงก์, รูปภาพ, สื่อ | Text() | ชนิดข้อมูลเหล่านี้เป็นชนิดข้อมูลข้อความและสามารถแปลงเป็นข้อความแล้วนำไปใช้ใน Power Fx |
| ตัวเลือก, สองตัวเลือก | Switch() หรือ If() | ตัวเลือก และ สองตัวเลือก นำเสนอเป็นสตริงที่แปลเป็นภาษาท้องถิ่นใน Power Fx ตัวเลือก มีการสนับสนุนด้วยตัวเลขและ สองตัวเลือก เป็นแบบบูลีน ไม่มีการแปลงโดยตรงจากแบบบูลีน ตัวเลข หรือสตริงเป็น ตัวเลือก หรือ สองตัวเลือก แต่ฟังก์ชัน Switch() หรือ If() สามารถใช้ฟังก์ชันกับค่าแบบบูลีน ข้อความ หรือตัวเลขเพื่อกำหนดค่า ตัวเลือก หรือ สองตัวเลือก ได้อย่างถูกต้อง |
| เรกคอร์ด | ไม่มีข้อมูล | ไม่มีการแปลงโดยตรงจาก Dynamic เป็นโครงสร้างเรกคอร์ด แต่สามารถดึงข้อมูลฟิลด์แต่ละรายการจาก Dynamic เพื่อสร้างเรกคอร์ดใหม่ได้ |
| การอ้างอิงเรกคอร์ด | ไม่มีข้อมูล | การอ้างอิงระเบียนไม่ซ้ํากันกับแหล่งข้อมูล และไม่มีการแสดงที่มีความหมายใน Dynamic |
| Table | Table() และ ForAll() | Dynamic สามารถแสดงอาร์เรย์ ซึ่งสามารถแปลงเป็นตารางได้ ออบเจ็กต์เหล่านี้อาจเป็นอาร์เรย์ของเรกคอร์ด หรืออาร์เรย์ของค่าที่เป็นตารางแบบคอลัมน์เดียวได้อย่างมีประสิทธิภาพ ForAll() สามารถใช้เพื่อสร้างตารางที่มีเรกคอร์ดที่ระบุชนิดครบถ้วน ตรวจสอบตัวอย่างเพิ่มเติมในบทความนี้สำหรับข้อมูลเพิ่มเติม |
| ข้อความ | Text() | ข้อความสามารถแปลงได้โดยตรง ถ้าค่า ไดนามิก แสดงตัวเลข คุณจําเป็นต้องแปลง ไดนามิก เป็นตัวเลขก่อนโดยใช้ Value() ก่อนที่จะแปลงเป็นข้อความ |
ชนิดของเรกคอร์ด
คุณสามารถเข้าถึงเขตข้อมูลบนตัวแปรที่แสดงเรกคอร์ด แบบไดนามิก ได้โดยใช้เครื่องหมายจุดปกติที่ใช้สําหรับเรกคอร์ดได้ อย่างไรก็ตาม การมีอยู่ของฟิลด์จะไม่ได้รับการตรวจสอบจนกว่าจะถึงรันไทม์ ด้วยเหตุนี้จึงไม่มี Intellisense ให้ใช้งานเช่นกัน หากไม่มีฟิลด์หรือมีค่า null พื้นฐาน การเข้าถึงจะแสดงผลลัพธ์เป็นค่า Blank()
แต่ละเขตข้อมูลบนเรกคอร์ดเป็นชนิด แบบไดนามิกและจําเป็นต้องพิมพ์อย่างถูกต้อง ฟิลด์ สามารถเป็นเรกคอร์ดแบบไดนามิกของชนิดง่าย ในกรณีที่เป็นเรกคอร์ด คุณสามารถเชื่อมโยงเครื่องหมายจุดได้ หากไม่มีฟิลด์ใดๆ ในห่วงโซ่ จะมีการส่งคืนเป็น Blank()
ตัวอย่างต่อไปนี้ใช้เขตข้อมูลจากตัวแปร แบบไดนามิก ที่ DynRecordชื่อ
Text(DynRecord.StringField)
Value(DynRecord.Field.ChildField)
ในกรณีที่ชื่อฟิลด์ประกอบด้วยชื่อตัวระบุที่ไม่ถูกต้อง ตัวอย่างเช่น เมื่อชื่อฟิลด์เริ่มต้นด้วยตัวเลขหรือมีอักขระที่ไม่ถูกต้อง เช่น ยัติภังค์ คุณสามารถใส่ชื่อฟิลด์ในเครื่องหมายคำพูดเดี่ยว:
dynamic.'01'
dynamic.'my-field'
การเข้าถึงคอลัมน์แบบไดนามิก
บางครั้งชื่อของคอลัมน์ในเรกคอร์ดจะเป็นแบบไดนามิก ใช้ฟังก์ชัน ColumnNames เพื่อกำหนดชื่อคอลัมน์ที่พร้อมใช้งานในเรกคอร์ด แล้วใช้ฟังก์ชัน Column เพื่อดึงค่าของคอลัมน์ที่มีชื่อ
ตัวอย่าง
LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );
Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"
Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5
อาร์เรย์
ตัวแปร แบบไดนามิก สามารถมีอาร์เรย์ได้ แม้ว่าอาร์เรย์อาจเป็นอาร์เรย์ของเรกคอร์ดหรืออาร์เรย์ของชนิดง่าย แต่การแปลงอาร์เรย์ แบบไดนามิก เป็นตารางโดยใช้ฟังก์ชัน Table() จะส่งผลให้มีตารางแบบคอลัมน์เดียวของ Dynamic เสมอ ฟังก์ชั่น เช่น ForAll() และ Index() ไม่ต้องการให้คุณสร้าง Table() และด้วยเหตุนี้คุณจึงไม่ต้องการให้คุณใช้ฟิลด์ Value คอลัมน์เดียว
ตัวอย่างเช่น เมื่อต้องการรับตัวเลขที่สองในอาร์เรย์ของ Dynamic ที่มีค่าตัวเลข ( [1, 2, 3] ) คุณสามารถใช้สูตรต่อไปนี้เพื่อดึงข้อมูลแถวที่สองในตาราง และแปลงคอลัมน์เป็นตัวเลข:
Value( Index( UOArray, 2 ) )
ถ้า Dynamic ถูกแปลงเป็น Table() ก่อน แถวที่สองในตารางผลลัพธ์แบบคอลัมน์เดียวคือ Value คอลัมน์ที่มี Dynamic:
Value( Index( Table( UOArray ), 2 ).Value )
สำหรับอาร์เรย์ของเรกคอร์ดที่มีคอลัมน์ข้อความที่เรียกว่า Field ใช้ตรรกะเดียวกัน สามารถเข้าถึงไดนามิกได้โดยตรง หรือถ้าใช้ฟังก์ชัน Table() จะส่งผลให้มีตารางแบบคอลัมน์เดียวของ Dynamic
คอลัมน์Fieldสามารถเข้าถึงได้โดยตรงจากฟังก์ชัน Dynamic ที่ส่งกลับโดยฟังก์ชัน Index()
Text( Index( UORecordArray, 2 ).Field )
เมื่อใช้ฟังก์ชัน Table() ก่อนอื่นจะดึงข้อมูลคอลัมน์เดียว Value เพื่อรับ Dynamic จากนั้นเข้าถึง Field คอลัมน์:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
หากต้องการแปลงอาร์เรย์ของเรกคอร์ดเป็นตารางระบุชนิด คุณสามารถใช้ฟังก์ชัน ForAll() และแปลงแต่ละฟิลด์
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
ถ้า Dynamic ถูกแปลงเป็นตารางอีกครั้ง ตารางแบบคอลัมน์เดียวที่เป็นผลลัพธ์ของ Dynamic จะกําหนดให้คุณใช้ Value คอลัมน์เพื่อรับเขตข้อมูล
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )
การแปลงเป็นเรกคอร์ดและตารางที่ระบุชนิด
สําคัญ
- การใช้ AsType และ IsType กับค่า ไดนามิก คือคุณลักษณะการทดลอง
- คุณลักษณะการทดลองไม่ได้มีไว้สําหรับการใช้งานด้านการผลิตและอาจไม่เสร็จสมบูรณ์ คุณลักษณะเหล่านี้สามารถใช้ได้ก่อนการเปิดตัวอย่างเป็นทางการเพื่อให้คุณสามารถเข้าใช้งานได้ก่อนเวลาและให้ข้อคิดเห็น ข้อมูลเพิ่มเติม: ทำความเข้าใจคุณลักษณะทดลอง แสดงตัวอย่าง และเลิกใช้แล้วในแอปพื้นที่ทำงาน
- ลักษณะการทำงานที่อธิบายในบทความนี้ใช้ได้เฉพาะเมื่อคุณเปิดคุณลักษณะทดลอง ชนิดที่ผู้ใช้กำหนด ใน การตั้งค่า > คุณลักษณะที่กำลังจะมา > การทดลอง (ปิดอยู่โดยค่าเริ่มต้น)
- ความคิดเห็นของคุณมีค่าสำหรับเรา บอกให้เราทราบว่าคุณคิดอย่างไรใน ฟอรัมชุมชนของคุณลักษณะทดลอง Power Apps
แทนที่จะแปลงค่าอย่างง่ายแต่ละรายการ คุณสามารถใช้ฟังก์ชัน ParseJSON, IsType และ AsType เพื่อแปลง Dynamic เป็นวัตถุชนิดเป็นกลุ่มได้ ใช้ฟังก์ชัน ชนิด เพื่อสร้างชนิดที่จะแม็ปโครงสร้างแบบไดนามิกกับโครงสร้างที่พิมพ์
ตัวอย่างเช่น ที่นี่เรากำลังตีความสตริง JSON เป็นค่าวันที่และเวลาโดยไม่จำเป็นต้องเรียกฟังก์ชัน DateTimeValue function:
Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
Type( { Start: DateTime, End: DateTime } ) );
DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7