แชร์ผ่าน


ชนิดข้อมูลออบเจ็กต์ที่ไม่ได้ระบุชนิด

ออบเจ็กต์ไม่ระบุชนิด เป็นชนิดข้อมูลใน Power Fx ที่สามารถเก็บโครงสร้างข้อมูลใดๆ ที่ซับซ้อนหรือเรียบง่ายได้ ไม่สามารถใช้งานได้โดยตรงและต้องมีการแปลงเป็นชนิดข้อมูลอย่างชัดเจน ฟิลด์ในเรกคอร์ดใน ออบเจ็กต์ไม่ระบุชนิด สามารถเข้าถึงได้โดยใช้เครื่องหมายจุดและการมีอยู่ของฟิลด์จะได้รับการยืนยันเมื่อรันไทม์เท่านั้น

ออบเจ็กต์ไม่ระบุชนิด เป็นชนิดที่ส่งคืนของตัวให้บริการไม่ระบุชนิดเฉพาะ ปัจจุบันมีเพียงฟังก์ชัน ParseJSON() เท่านั้นที่ส่งคืน ออบเจ็กต์ไม่ระบุชนิด

ชนิดอย่างง่าย

ค่าของตัวแปรชนิด ออบเจ็กต์ไม่ระบุชนิด ไม่สามารถใช้งานได้โดยตรง คุณต้องพิมพ์อย่างถูกต้องเสมอโดยใช้ตัวสร้างชนิดที่เกี่ยวข้อง

ตัวอย่างต่อไปนี้แปลงค่าของตัวแปร ออบเจ็กต์ไม่ระบุชนิด ที่ชื่อ UOValue

Text(UOValue)
Value(UOValue)

ตารางต่อไปนี้แสดงรายการชนิดข้อมูลและฟังก์ชันที่เกี่ยวข้องในการแปลง ออบเจ็กต์ไม่ระบุชนิด เป็นชนิดข้อมูลนั้น

ชนิดข้อมูล Function Description
Boolean Boolean() เมื่อแปลง ออบเจ็กต์ที่ไม่ได้ระบุชนิด เป็น บูลีน ค่าพื้นฐานต้องแสดงบูลีนหรือชนิดที่สามารถแปลงได้โดยอัตโนมัติ (เช่น สตริง "จริง")
Color ColorValue() หรือ RGBA() สีสามารถแสดงในเครื่องหมายข้อกำหนดสีของแผ่นงานที่จัดรูปแบบเป็นลำดับ (CSS) เป็นสตริงหรือเป็นส่วนประกอบ RGBA แต่ละรายการ ออบเจ็กต์ไม่ระบุชนิด สามารถแปลงได้โดยตรงจากสตริงข้อกำหนดสีของแผ่นงานที่จัดรูปแบบเป็นลำดับ (CSS) โดยใช้ฟังก์ชัน ColorValue() หรือจาก หมายเลข RGBA แต่ละรายการเป็นสีโดยใช้ฟังก์ชัน RGBA()
สกุลเงิน, ตัวเลข Value() เมื่อแปลง ออบเจ็กต์ที่ไม่ได้ระบุชนิด เป็น ตัวเลข ค่าพื้นฐานต้องแสดงตัวเลขหรือชนิดที่สามารถแปลงได้โดยอัตโนมัติ (เช่น สตริง "123.456")
วันที่, วันที่เวลา, เวลา DateValue(), TimeValue() หรือ DateTimeValue() วันที่ เวลา และวันที่เวลาสามารถแปลงจาก ออบเจ็กต์ไม่ระบุชนิด ไปเป็นชนิดที่เกี่ยวข้องได้โดยตรงเมื่อแสดงในรูปแบบ ISO 8601 รูปแบบอื่นๆ เป็นข้อความก่อนโดยใช้ฟังก์ชัน Text() แล้วส่งผ่านฟังก์ชัน DateValue(), TimeValue() หรือ DateTimeValue() ซึ่งโดยค่าเริ่มต้นจะใช้ภาษาของการตั้งค่าปัจจุบันของผู้ใช้ในการตีความวันที่และเวลา
GUID GUID() ออบเจ็กต์ที่ไม่ได้ระบุชนิด สามารถแปลงเป็น GUID ได้โดยตรงหากออบเจ็กต์พื้นฐานแสดงถึง GUID หรือหากเป็นสตริง
ไฮเปอร์ลิงก์, รูปภาพ, สื่อ Text() ชนิดข้อมูลเหล่านี้เป็นชนิดข้อมูลข้อความและสามารถแปลงเป็นข้อความแล้วนำไปใช้ใน Power Fx
ตัวเลือก, สองตัวเลือก Switch() หรือ If() ตัวเลือก และ สองตัวเลือก นำเสนอเป็นสตริงที่แปลเป็นภาษาท้องถิ่นใน Power Fx ตัวเลือก มีการสนับสนุนด้วยตัวเลขและ สองตัวเลือก เป็นแบบบูลีน ไม่มีการแปลงโดยตรงจากแบบบูลีน ตัวเลข หรือสตริงเป็น ตัวเลือก หรือ สองตัวเลือก แต่ฟังก์ชัน Switch() หรือ If() สามารถใช้ฟังก์ชันกับค่าแบบบูลีน ข้อความ หรือตัวเลขเพื่อกำหนดค่า ตัวเลือก หรือ สองตัวเลือก ได้อย่างถูกต้อง
เรกคอร์ด ไม่มีข้อมูล ไม่มีการแปลงโดยตรงจาก ออบเจ็กต์ไม่ระบุชนิด เป็นโครงสร้างเรกคอร์ด แต่สามารถดึงข้อมูลแต่ละฟิลด์ได้จาก ออบเจ็กต์ไม่ระบุชนิด เพื่อสร้างเรกคอร์ดใหม่
การอ้างอิงเรกคอร์ด ไม่มีข้อมูล การอ้างอิงเรกคอร์ดนั้นไม่ซ้ำกับแหล่งข้อมูลและไม่มีการแสดงที่มีความหมายใน ออบเจ็กต์ไม่ระบุชนิด
Table Table() และ ForAll() ออบเจ็กต์ไม่ระบุชนิด สามารถแสดงอาร์เรย์ซึ่งสามารถแปลงเป็นตารางได้ ออบเจ็กต์เหล่านี้อาจเป็นอาร์เรย์ของเรกคอร์ด หรืออาร์เรย์ของค่าที่เป็นตารางแบบคอลัมน์เดียวได้อย่างมีประสิทธิภาพ ForAll() สามารถใช้เพื่อสร้างตารางที่มีเรกคอร์ดที่ระบุชนิดครบถ้วน ตรวจสอบตัวอย่างเพิ่มเติมในบทความนี้สำหรับข้อมูลเพิ่มเติม
ข้อความ Text() ข้อความสามารถแปลงได้โดยตรง หาก ออบเจ็กต์ไม่ระบุชนิด แสดงตัวเลข คุณต้องแปลง ออบเจ็กต์ไม่ระบุชนิด เป็นตัวเลขก่อนโดยใช้ 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) } )