Record.Field ดึงค่าของฟิลด์ที่ระบุจากบันทึก (record) โดยใช้ชื่อฟิลด์เป็นข้อความ ต่างจาก Record.FieldOrDefault ตรงที่จะเกิดข้อผิดพลาดหากฟิลด์ไม่พบ
=Record.Field(record as record, field as text) as any
=Record.Field(record as record, field as text) as any
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| record | record | Yes | Record ที่ต้องการดึงค่า | |
| field | text | Yes | ชื่อ Field ที่ต้องการดึงค่า (เป็น Text) |
เมื่อชื่อ Field ที่ต้องการดึงถูกเก็บอยู่ในตัวแปร หรือมาจากการคำนวณ (Dynamic Field Access)
ใช้ร่วมกับ List.Transform เพื่อดึงค่า Field จาก List ของ Record
Record.Field([CustomerID = 1, Name = "Bob"], "Name")=Record.Field([CustomerID = 1, Name = "Bob"], "Name")
"Bob"
Record.Field([ชื่อ = "สมชาย", อายุ = 30], "ชื่อ")=Record.Field([ชื่อ = "สมชาย", อายุ = 30], "ชื่อ")
"สมชาย"
let Source = [A=10, B=20, C=30], TargetField = "B", Result = Record.Field(Source, TargetField) in Resultlet
Source = [A=10, B=20, C=30],
TargetField = "B",
Result = Record.Field(Source, TargetField)
in
Result
20
let JsonData = Json.Document("{\"id\": 101, \"status\": \"Active\"}"), Status = Record.Field(JsonData, "status") in Statuslet
JsonData = Json.Document("{\"id\": 101, \"status\": \"Active\"}"),
Status = Record.Field(JsonData, "status")
in
Status
"Active"
ผมเห็นบ่อยที่คนสับสน Record.Field ยืดหยุ่นกว่าเพราะรับชื่อฟิลด์เป็นข้อความ (dynamic) ส่วน [FieldName] ต้องเขียนชื่อตายตัวในสูตร ถ้าต้องการเปลี่ยนชื่อฟิลด์ตามเงื่อนไข Record.Field จึงเหมาะกว่า
โปรแกรมจะโยน Error ชื่อ ‘The field … of the record wasn’t found.’ ออกมา ผมเลยแนะนำให้ใช้ try-catch หรือเปลี่ยนมาใช้ Record.FieldOrDefault ถ้าไม่แน่ใจว่าฟิลด์มีหรือไม่
Record.Field โยน Error ถ้าฟิลด์หายไป ส่วน Record.FieldOrDefault ส่งกลับค่า null หรือค่าตัวอักษร (default) แทน ผมแนะนำให้ใช้ Record.FieldOrDefault เมื่อข้อมูลมาจากแหล่งที่ไม่แน่ใจว่ามีฟิลด์ครบหรือไม่
ได้แต่ต้องเรียก Record.Field หลายครั้ง ผมแนะนำให้ใช้ Record.ToList ถ้าต้องการค่าทั้งหมด หรือใช้ let…in เพื่อเก็บค่าแต่ละ Field ไว้ตัวแปรแต่ละอัน
Record.Field ดึงค่าจากระเบียนเมื่อคุณรู้ชื่อฟิลด์แน่นอน ต่างจาก Record.FieldOrDefault ตรงที่จะโยนข้อผิดพลาดหากฟิลด์หายไป มีประโยชน์มากในงานจริงเมื่อต้องการดึงข้อมูลจาก JSON หรือแปลงข้อมูลจากแหล่งอื่น
ที่เจ๋งคือ Record.Field ยืดหยุ่นที่สุดเพราะรับชื่อฟิลด์เป็นข้อความ (dynamic) ได้ ทำให้คุณสามารถเปลี่ยนชื่อฟิลด์ตามต้องการผ่านตัวแปร แล้วไม่ต้องเขียนโค้ดใหม่ ประโยชน์สูงสุดเมื่อข้อมูลมาจากอินพุตแบบไดนามิก
ส่วนตัวผม Record.Field เป็นตัวช่วยหลักในการตรวจสอบข้อมูลจาก API หรือการรวมข้อมูลจากหลายแหล่ง เหมือนกับการอ้างอิงคนตรงเวลา ทำให้ debug ได้ง่าย