ชนิดข้อมูลออบเจ็กต์ที่ไม่ได้ระบุชนิด
ออบเจ็กต์ที่ไม่ได้ระบุชนิด เป็นประเภทข้อมูลใน Power Fx ที่สามารถเก็บโครงสร้างข้อมูลใดๆ ไม่ว่าจะซับซ้อนหรือเรียบง่ายก็ตาม ไม่สามารถใช้งานได้โดยตรงและต้องมีการแปลงเป็นชนิดข้อมูลอย่างชัดเจน ฟิลด์ในเรกคอร์ดใน ออบเจ็กต์ไม่ระบุชนิด สามารถเข้าถึงได้โดยใช้เครื่องหมายจุดและการมีอยู่ของฟิลด์จะได้รับการยืนยันเมื่อรันไทม์เท่านั้น
ออบเจ็กต์ที่ไม่ได้ระบุชนิด คือประเภทการส่งคืนของผู้ให้บริการที่ไม่ได้ระบุประเภทเฉพาะ ปัจจุบันมีเพียงฟังก์ชัน ParseJSON() เท่านั้นที่ส่งคืน ออบเจ็กต์ไม่ระบุชนิด
ชนิดอย่างง่าย
ค่าของตัวแปรชนิด ออบเจ็กต์ไม่ระบุชนิด ไม่สามารถใช้งานได้โดยตรง คุณต้องพิมพ์อย่างถูกต้องเสมอโดยใช้ตัวสร้างชนิดที่เกี่ยวข้อง
ตัวอย่างต่อไปนี้แปลงค่าของตัวแปร ออบเจ็กต์ไม่ระบุชนิด ที่ชื่อ UOValue
Text(UOValue)
Value(UOValue)
ตารางต่อไปนี้แสดงรายการชนิดข้อมูลและฟังก์ชันที่เกี่ยวข้องในการแปลง ออบเจ็กต์ไม่ระบุชนิด เป็นชนิดข้อมูลนั้น
ชนิดข้อมูล | Function | Description |
---|---|---|
Boolean | แบบบูลีน() | เมื่อแปลง ออบเจ็กต์ที่ไม่ได้ระบุชนิด เป็น บูลีน ค่าพื้นฐานต้องแสดงบูลีนหรือชนิดที่สามารถแปลงได้โดยอัตโนมัติ (เช่น สตริง "จริง") |
Color | ColorValue() หรือ RGBA() | สีสามารถแสดงในเครื่องหมายข้อกำหนดสีของแผ่นงานที่จัดรูปแบบเป็นลำดับ (CSS) เป็นสตริงหรือเป็นส่วนประกอบ RGBA แต่ละรายการ ออบเจ็กต์ไม่ระบุชนิด สามารถแปลงได้โดยตรงจากสตริงข้อกำหนดสีของแผ่นงานที่จัดรูปแบบเป็นลำดับ (CSS) โดยใช้ฟังก์ชัน ColorValue() หรือจาก หมายเลข RGBA แต่ละรายการเป็นสีโดยใช้ฟังก์ชัน RGBA() |
สกุลเงิน, ตัวเลข | ค่า() | เมื่อแปลง ออบเจ็กต์ที่ไม่ได้ระบุชนิด เป็น ตัวเลข ค่าพื้นฐานต้องแสดงตัวเลขหรือชนิดที่สามารถแปลงได้โดยอัตโนมัติ (เช่น สตริง "123.456") |
วันที่, วันที่เวลา, เวลา | DateValue(), TimeValue() หรือ DateTimeValue() | วันที่ เวลา และวันที่เวลาสามารถแปลงจาก ออบเจ็กต์ไม่ระบุชนิด ไปเป็นชนิดที่เกี่ยวข้องได้โดยตรงเมื่อแสดงในรูปแบบ ISO 8601 รูปแบบอื่นๆ เป็นข้อความก่อนโดยใช้ฟังก์ชัน Text() แล้วส่งผ่านฟังก์ชัน DateValue(), TimeValue() หรือ DateTimeValue() ซึ่งโดยค่าเริ่มต้นจะใช้ภาษาของการตั้งค่าปัจจุบันของผู้ใช้ในการตีความวันที่และเวลา |
GUID | GUID() | ออบเจ็กต์ที่ไม่ได้ระบุชนิด สามารถแปลงเป็น GUID ได้โดยตรงหากออบเจ็กต์พื้นฐานแสดงถึง GUID หรือหากเป็นสตริง |
ไฮเปอร์ลิงก์, รูปภาพ, สื่อ | ข้อความ() | ชนิดข้อมูลเหล่านี้เป็นชนิดข้อมูลข้อความและสามารถแปลงเป็นข้อความแล้วนำไปใช้ใน Power Fx |
ตัวเลือก, สองตัวเลือก | Switch() หรือ If() | ตัวเลือก และ ตัวเลือกสองตัว จะถูกนำเสนอเป็นสตริงที่แปลเป็นภาษาท้องถิ่นใน Power Fx ตัวเลือก ได้รับการสนับสนุนโดยตัวเลขและ ตัวเลือกสองตัว เป็นค่าบูลีน ไม่มีการแปลงโดยตรงจากแบบบูลีน ตัวเลข หรือสตริงเป็น ตัวเลือก หรือ สองตัวเลือก แต่ฟังก์ชัน Switch() หรือ If() สามารถใช้ฟังก์ชันกับค่าแบบบูลีน ข้อความ หรือตัวเลขเพื่อกำหนดค่า ตัวเลือก หรือ สองตัวเลือก ได้อย่างถูกต้อง |
เรกคอร์ด | ไม่มีข้อมูล | ไม่มีการแปลงโดยตรงจาก ออบเจ็กต์ไม่ระบุชนิด เป็นโครงสร้างเรกคอร์ด แต่สามารถดึงข้อมูลแต่ละฟิลด์ได้จาก ออบเจ็กต์ไม่ระบุชนิด เพื่อสร้างเรกคอร์ดใหม่ |
การอ้างอิงเรกคอร์ด | ไม่มีข้อมูล | การอ้างอิงเรกคอร์ดนั้นไม่ซ้ำกับแหล่งข้อมูลและไม่มีการแสดงที่มีความหมายใน ออบเจ็กต์ไม่ระบุชนิด |
Table | ตาราง() และ สำหรับทั้งหมด() | ออบเจ็กต์ไม่ระบุชนิด สามารถแสดงอาร์เรย์ซึ่งสามารถแปลงเป็นตารางได้ ออบเจ็กต์เหล่านี้อาจเป็นอาร์เรย์ของเรกคอร์ด หรืออาร์เรย์ของค่าที่เป็นตารางแบบคอลัมน์เดียวได้อย่างมีประสิทธิภาพ ForAll() สามารถใช้สร้างตารางที่มีเรคคอร์ดที่มีการระบุชนิดครบถ้วนได้ ตรวจสอบตัวอย่างเพิ่มเติมในบทความนี้สำหรับข้อมูลเพิ่มเติม |
ข้อความ | ข้อความ() | ข้อความสามารถแปลงได้โดยตรง หาก ออบเจ็กต์ไม่ระบุชนิด แสดงตัวเลข คุณต้องแปลง ออบเจ็กต์ไม่ระบุชนิด เป็นตัวเลขก่อนโดยใช้ Value() ก่อนที่จะแปลงเป็นข้อความ |
ชนิดของเรกคอร์ด
คุณสามารถเข้าถึงฟิลด์ของตัวแปรที่แสดงเรกคอร์ด ออบเจ็กต์ไม่ระบุชนิด โดยใช้เครื่องหมายจุดปกติที่ใช้สำหรับเรกคอร์ดได้ อย่างไรก็ตาม การมีอยู่ของฟิลด์จะไม่ได้รับการตรวจสอบจนกว่าจะถึงรันไทม์ ด้วยเหตุนี้จึงไม่มี Intellisense ให้ใช้งานเช่นกัน หากไม่มีฟิลด์หรือมีค่า null พื้นฐาน การเข้าถึงจะแสดงผลลัพธ์เป็นค่า Blank()
แต่ละฟิลด์ในเรกคอร์ดยังเป็นชนิด ออบเจ็กต์ไม่ระบุชนิด และต้องพิมพ์ให้ถูกต้อง ฟิลด์นี้สามารถเป็นเรกคอร์ดไม่ระบุชนิดแบบง่าย ในกรณีที่เป็นเรกคอร์ด คุณสามารถเชื่อมโยงเครื่องหมายจุดได้ หากไม่มีฟิลด์ใดๆ ในห่วงโซ่ จะมีการส่งคืนเป็น Blank()
ตัวอย่างต่อไปนี้ใช้ฟิลด์จากตัวแปร ออบเจ็กต์ไม่ระบุชนิด ที่ชื่อ UORecord
Text(UORecord.StringField)
Value(UORecord.Field.ChildField)
ในกรณีที่ชื่อฟิลด์ประกอบด้วยชื่อตัวระบุที่ไม่ถูกต้อง ตัวอย่างเช่น เมื่อชื่อฟิลด์เริ่มต้นด้วยตัวเลขหรือมีอักขระที่ไม่ถูกต้อง เช่น ยัติภังค์ คุณสามารถใส่ชื่อฟิลด์ในเครื่องหมายคำพูดเดี่ยว:
untyped.'01'
untyped.'my-field'
อาร์เรย์
ตัวแปร ออบเจ็กต์ไม่ระบุชนิด สามารถมีอาร์เรย์ได้ แม้ว่าอาร์เรย์อาจเป็นอาร์เรย์ของเรคคอร์ดหรืออาร์เรย์ชนิดแบบง่าย แต่การแปลงอาร์เรย์ ออบเจ็กต์ไม่ระบุชนิด เป็นตารางโดยใช้ฟังก์ชัน Table() จะแสดงผลลัพธ์เป็นตารางแบบคอลัมน์เดียวของ ออบเจ็กต์ไม่ระบุชนิด ฟังก์ชั่น เช่น ForAll() และ Index() ไม่ต้องการให้คุณสร้าง Table() และด้วยเหตุนี้คุณจึงไม่ต้องการให้คุณใช้ฟิลด์ Value
คอลัมน์เดียว
ตัวอย่างเช่น หากต้องการรับตัวเลขที่สองในอาร์เรย์ของ ออบเจ็กต์ไม่ระบุชนิด ที่มีค่าตัวเลข ( [1, 2, 3]
) สูตรต่อไปนี้สามารถใช้เรียกแถวที่สองในตารางและแปลงคอลัมน์เป็นตัวเลข:
Value( Index( UOArray, 2 ) )
ถ้า ออบเจ็กต์ไม่ระบุชนิด ถูกแปลงเป็น Table() อันดับแรก แถวที่สองในตารางผลลัพธ์แบบคอลัมน์เดียวคือคอลัมน์ Value
ที่มี ออบเจ็กต์ไม่ระบุชนิด:
Value( Index( Table( UOArray ), 2 ).Value )
สำหรับอาร์เรย์ของเรกคอร์ดที่มีคอลัมน์ข้อความที่เรียกว่า Field
ใช้ตรรกะเดียวกัน ออบเจ็กต์ไม่ระบุชนิด สามารถเข้าถึงได้โดยตรง หรือหากใช้ฟังก์ชัน Table() จะส่งผลให้ตารางแบบคอลัมน์เดียวของ ออบเจ็กต์ไม่ระบุชนิด
คอลัมน์ Field
สามารถเข้าถึงได้โดยตรงจาก ออบเจ็กต์ไม่ระบุชนิด คืนโดยฟังก์ชัน Index()
Text( Index( UORecordArray, 2 ).Field )
เมื่อใช้ฟังก์ชัน Table() ก่อนอื่นรับคอลัมน์ Value
แบบคอลัมน์เดียว เพื่อรับ ออบเจ็กต์ไม่ระบุชนิด แล้วจึงเข้าถึงคอลัมน์ Field
:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
หากต้องการแปลงอาร์เรย์ของเรกคอร์ดเป็นตารางระบุชนิด คุณสามารถใช้ฟังก์ชัน ForAll() และแปลงแต่ละฟิลด์
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
ถ้า ออบเจ็กต์ไม่ระบุชนิด อันดับแรกจะถูกแปลงเป็นตาราง อีกครั้ง ผลลัพธ์คือตารางแบบคอลัมน์เดียวของ ออบเจ็กต์ไม่ระบุชนิด จะทำให้คุณต้องใช้คอลัมน์ Value
เพื่อรับฟิลด์
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )