Table.ConformToPageReader ปรับโครงสร้างตารางให้เข้ากับกลไก page reader โดยรับฟังก์ชันสำหรับการจัดรูปแบบ เป็นฟังก์ชันภายในของ Power Query ไม่แนะนำให้ใช้ในโค้ดทั่วไป
=Table.ConformToPageReader(table as table, shapingFunction as function) as table
=Table.ConformToPageReader(table as table, shapingFunction as function) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตารางต้นทางที่ต้องการปรับรูปแบบเพื่อการอ่านแบบแบ่งหน้า | |
| shapingFunction | function | Yes | ฟังก์ชันที่รับตารางเป็น input แล้วคืนค่าตารางที่ปรับรูปแบบแล้ว สามารถใช้ Table.* functions ต่างๆ ในฟังก์ชันนี้ |
ใช้ shapingFunction เพื่อทำให้ตารางมีรูปแบบที่กลไก page reader ต้องการ เช่น เลือกเฉพาะคอลัมน์ที่จำเป็น หรือเพิ่มคอลัมน์ลำดับ
let Source = Table.FromRecords({[Name="Alice",Age=25],[Name="Bob",Age=30]}), Result = Table.ConformToPageReader(Source, (t) => t) in Resultlet Source = Table.FromRecords({[Name="Alice",Age=25],[Name="Bob",Age=30]}), Result = Table.ConformToPageReader(Source, (t) => t) in Result
ตารางเหมือนเดิม
let Source = Table.FromRecords({[Name="Alice",Age=25,Dept="Sales"],[Name="Bob",Age=30,Dept="IT"]}), Result = Table.ConformToPageReader(Source, (t) => Table.Sele…let Source = Table.FromRecords({[Name="Alice",Age=25,Dept="Sales"],[Name="Bob",Age=30,Dept="IT"]}), Result = Table.ConformToPageReader(Source, (t) => Table.SelectColumns(t, {"Name", "Age"})) in Result
ตารางที่เหลือเพียง Name และ Age (ลบ Dept ออกไป)
let Source = Table.FromRecords({[Name="Alice"],[Name="Bob"],[Name="Charlie"]}), Result = Table.ConformToPageReader(Source, (t) => Table.AddIndexColumn(t, "RowNu…let Source = Table.FromRecords({[Name="Alice"],[Name="Bob"],[Name="Charlie"]}), Result = Table.ConformToPageReader(Source, (t) => Table.AddIndexColumn(t, "RowNumber", 1, 1)) in Result
ตารางที่เพิ่ม RowNumber เริ่มตั้งแต่ 1
let Source = Table.FromRecords({[Name="Alice",Age=25,Status="Active"],[Name="Bob",Age=30,Status="Inactive"]}), Result = Table.ConformToPageReader(Source, (t) =>…let Source = Table.FromRecords({[Name="Alice",Age=25,Status="Active"],[Name="Bob",Age=30,Status="Inactive"]}), Result = Table.ConformToPageReader(Source, (t) => Table.AddIndexColumn(Table.SelectColumns(t, {"Name", "Age"}), "ID", 1, 1)) in Result
ตารางมี 3 คอลัมน์: ID (ลำดับ), Name, Age
ผมเข้าใจว่า Table.ConformToPageReader ออกแบบมาเพื่องานภายใน Power Query เท่านั้น Microsoft ไม่ได้ให้ commitments เกี่ยวกับความเสถียรหรือ API ของมันได้ เนื่องจาก internal functions มักเปลี่ยนแปลงไปตามเวอร์ชัน ดังนั้น Microsoft จึงห้ามผู้ใช้ใช้ในโค้ด production
ผลลัพธ์ออกมาคล้ายกัน แต่ตัว ConformToPageReader มีการล้างหรือเตรียมตารางเพิ่มเติมให้เข้ากับกลไก page reader ของตัวเชื่อมต่อบางประเภท ส่วนใหญ่ถ้าเราใช้ Table.SelectColumns หรือฟังก์ชัน public อื่นๆ โดยตรง ก็ใช้ได้ดีแล้วโดยไม่ต้องเรียก ConformToPageReader
ได้ทีเดียว แต่ไม่มีประโยชน์นะ เพราะมันออกแบบมาสำหรับตัวเชื่อมต่อที่ support paging เมื่อใช้กับ data source ธรรมชาติ (เช่น Excel Table หรือ CSV) อาจไม่มีเอฟเฟกต์อะไร
Table.ConformToPageReader เป็นฟังก์ชัน internal use ที่ Power Query ใช้เวลาการเชื่อมต่อ data source บางประเภท (โดยเฉพาะตัวเชื่อมต่อที่สนับสนุน paging หรือการโหลดข้อมูลแบบแบ่งหน้า) เพื่อปรับโครงสร้างตารางให้เข้ากับกระบวนการอ่านแบบแบ่งหน้า
ที่เจ๋งคือถ้าคุณเข้าใจว่า shapingFunction มันคือฟังก์ชันที่รับ table แล้วคืน table กลับมา คุณสามารถสร้าง custom logic ที่ซับซ้อนได้ เช่น เลือกคอลัมน์ เพิ่มลำดับแถว ฟิลเตอร์ข้อมูล หรือแปลง data type ทั้งหมดนี้ก่อนที่ page reader จะเข้ามาทำการ paginate
ส่วนตัวผม ไม่แนะนำให้ใช้ฟังก์ชันนี้หรือก็เพราะมันเป็น internal function และเอกสารไม่มีรายละเอียด ตัวจริงในโครงการส่วนใหญ่ เราจะจัดการตารางด้วยฟังก์ชัน public API เช่น Table.SelectColumns Table.AddIndexColumn หรือ Table.SelectRows แทน ดังนั้นไม่ต้องยุ่งกับ ConformToPageReader 😎