Thep Excel

Table.ConformToPageReaderปรับตารางสำหรับ Page Reader (Internal)

Table.ConformToPageReader ปรับโครงสร้างตารางให้เข้ากับกลไก page reader โดยรับฟังก์ชันสำหรับการจัดรูปแบบ เป็นฟังก์ชันภายในของ Power Query ไม่แนะนำให้ใช้ในโค้ดทั่วไป

fx
=Table.ConformToPageReader(table, shapingFunction) as table

ความนิยม5/10
ความยาก4/10
ประโยชน์6/10

อัปเดต 15 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางต้นทางที่ต้องการปรับรูปแบบเพื่อการอ่านแบบแบ่งหน้า
shapingFunction function ฟังก์ชันที่รับตารางเป็น input แล้วคืนค่าตารางที่ปรับรูปแบบแล้ว สามารถใช้ Table.* functions ต่างๆ ในฟังก์ชันนี้

Additional Notes

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 😎

How it works

ปรับตารางก่อนส่งต่อให้กลไกอ่านแบบแบ่งหน้า

ใช้ shapingFunction เพื่อทำให้ตารางมีรูปแบบที่กลไก page reader ต้องการ เช่น เลือกเฉพาะคอลัมน์ที่จำเป็น หรือเพิ่มคอลัมน์ลำดับ

Examples

ตัวอย่างที่ 1: ใช้ Identity Function (ไม่เปลี่ยนตารางเลย)let Source = Table.FromRecords({[Name="Alice",Age=25],[Name="Bob",Age=30]}), Result = Table.ConformToPageReader(Source, (t) => t) in Result

ใช้ lambda function (t) => t ซึ่งเป็น identity function ที่รับตารางและคืนตารางเดิมอย่างไม่เปลี่ยนแปลง ตรงนี้ฝั่ง page reader ยังคงได้รับตารางเดิม แต่ผ่านขั้นตอน ConformToPageReader ตามลำดับ

fx
let Source = Table.FromRecords({[Name="Alice",Age=25],[Name="Bob",Age=30]}), Result = Table.ConformToPageReader(Source, (t) => t) in Result

ผลลัพธ์ตารางเหมือนเดิม
ตัวอย่างที่ 2: เลือกเฉพาะคอลัมน์ที่ต้องการlet Source = Table.FromRecords({[Name="Alice",Age=25,Dept="Sales"],[Name="Bob",Age=30,Dept="IT"]}), Result = Table.ConformToPageReader(Source, (t) => Table.Sele…

shapingFunction ใช้ Table.SelectColumns เพื่อเลือกคอลัมน์ที่ต้องการ เมื่อ page reader ทำการอ่านแบบแบ่งหน้า มันจะได้รับตารางที่มีเฉพาะคอลัมน์ที่สำคัญเท่านั้น ช่วยลดปริมาณข้อมูลที่ต้องส่งต่อ

fx
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 ออกไป)
ตัวอย่างที่ 3: เพิ่มคอลัมน์ลำดับแถวlet Source = Table.FromRecords({[Name="Alice"],[Name="Bob"],[Name="Charlie"]}), Result = Table.ConformToPageReader(Source, (t) => Table.AddIndexColumn(t, "RowNu…

shapingFunction ใช้ Table.AddIndexColumn เพื่อเพิ่มคอลัมน์ลำดับแถว ซึ่งในบางตัวเชื่อมต่อที่ทำงานแบบแบ่งหน้า อาจจำเป็นต้องมีตัวระบุแถว (row identifier) เพื่อติดตามตำแหน่งของข้อมูลในแต่ละหน้า

fx
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
ตัวอย่างที่ 4: รวมหลาย transformation ใน shapingFunctionlet Source = Table.FromRecords({[Name="Alice",Age=25,Status="Active"],[Name="Bob",Age=30,Status="Inactive"]}), Result = Table.ConformToPageReader(Source, (t) =>…

ใส่ Table.SelectColumns เข้าไปใน Table.AddIndexColumn เพื่อทำ chaining transformations ก่อนที่ page reader จะเข้ามาจัดการ ลำดับการทำงาน: เลือกคอลัมน์ → เพิ่มตัวระบุแถว → ส่งไปให้ page reader

fx
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

FAQs

ทำไมเอกสาร Microsoft ถึงบอกว่าเป็น internal function?+

ผมเข้าใจว่า Table.ConformToPageReader ออกแบบมาเพื่องานภายใน Power Query เท่านั้น Microsoft ไม่ได้ให้ commitments เกี่ยวกับความเสถียรหรือ API ของมันได้ เนื่องจาก internal functions มักเปลี่ยนแปลงไปตามเวอร์ชัน ดังนั้น Microsoft จึงห้ามผู้ใช้ใช้ในโค้ด production

ความต่างระหว่าง Table.ConformToPageReader กับการใช้ฟังก์ชัน public เลย (เช่น Table.SelectColumns) คืออะไร?+

ผลลัพธ์ออกมาคล้ายกัน แต่ตัว ConformToPageReader มีการล้างหรือเตรียมตารางเพิ่มเติมให้เข้ากับกลไก page reader ของตัวเชื่อมต่อบางประเภท ส่วนใหญ่ถ้าเราใช้ Table.SelectColumns หรือฟังก์ชัน public อื่นๆ โดยตรง ก็ใช้ได้ดีแล้วโดยไม่ต้องเรียก ConformToPageReader

ใช้ Table.ConformToPageReader ในแบบโปรแกรม custom (non-paging data source) ได้มั้ย?+

ได้ทีเดียว แต่ไม่มีประโยชน์นะ เพราะมันออกแบบมาสำหรับตัวเชื่อมต่อที่ support paging เมื่อใช้กับ data source ธรรมชาติ (เช่น Excel Table หรือ CSV) อาจไม่มีเอฟเฟกต์อะไร

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.ConformToPageReader จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้Table.ConformToPageReaderTable functions
Table functions (5)
Table.AddIndexColumn

Table.AddIndexColumn ใช้สำหรับเพิ่มคอลัมน์ที่มีลำดับเลขให้กับตาราง ช่วยให้สามารถกำหนดหมายเลขแถวตามลำดับได้

Table.FromRecords

แปลง List ของ Record เป็นตาราง โดยแต่ละ Record กลายเป็นหนึ่งแถว เหมาะสำหรับข้อมูลจาก API หรือ JSON

Table.SelectColumns

Table.SelectColumns ใช้สำหรับเลือกคอลัมน์เฉพาะจากตารางและสร้างตารางใหม่ที่มีเฉพาะคอลัมน์เหล่านั้น

Table.SelectRows

Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่

Table.TransformColumns

Table.TransformColumns ใช้สำหรับแปลงข้อมูลในคอลัมน์โดยใช้ฟังก์ชันที่กำหนดไว้ แต่ละคอลัมน์สามารถมีการแปลงแตกต่างกันได้ รองรับการเปลี่ยนแปลงประเภทข้อมูลในเวลาเดียวกัน

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่