Thep Excel

Table.Splitแบ่งตารางเป็น Page

แบ่งตารางออกเป็นรายการของตารางย่อยตามจำนวนแถวที่กำหนด เหมาะสำหรับ Pagination และ Batch Processing

fx
=Table.Split(table, pageSize) as list

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

อัปเดต 6 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางที่ต้องการแบ่ง
pageSize number จำนวนแถวต่อหนึ่งส่วน (Page Size) ต้องเป็นตัวเลขบวก

Additional Notes

ฟังก์ชัน Table.Split ใช้สำหรับแบ่งตารางออกเป็นรายการของตารางย่อย (List of Tables) ตามขนาด Page Size (จำนวนแถว) ที่กำหนด เหมาะสำหรับการทำ Pagination หรือแบ่งข้อมูลเพื่อประมวลผลทีละชุด (Batch Processing).

ที่เจ๋งของ Table.Split คือมันทำให้คุณไม่ต้องปวดหัวกับเรื่อง modulo หรือการคำนวณหน้าด้วยตัวเอง ถ้าตารางมี 100 แถวและคุณต้องการแบ่งทีละ 30 แถว มันจะสร้างตารางที่มี 30, 30, 30, 10 แถวให้โดยอัตโนมัติ

ส่วนตัวผมมักใช้มันตอน API มีข้อจำกัดจำนวนรายการต่อครั้ง (เช่น 1000 รายการ) และข้อมูลมีเยอะเกินไป ก็แบ่งด้วย Table.Split แล้วใช้ List.Transform ประมวลผลแต่ละ batch ครับ 😎

How it works

Pagination

Pagination

Batch Processing

Batch Processing

Examples

แบ่งทีละ 2 แถวlet Source = #table({"ID"}, {{1}, {2}, {3}, {4}, {5}}), Split = Table.Split(Source, 2) in Split

แบ่งข้อมูล 5 แถวออกเป็นชุดละ 2 แถว จะได้ 3 ตาราง (2, 2, 1 แถว) – ตารางสุดท้ายเหลือแถวน้อยเพราะหารไม่ลงตัว

fx
let
Source = #table({"ID"}, {{1}, {2}, {3}, {4}, {5}}),
Split = Table.Split(Source, 2)
in
Split

ผลลัพธ์List of 3 Tables: {2 rows}, {2 rows}, {1 row}
Batch Processing (ประมวลผลทีละชุด)let Source = #table({"Value"}, List.Zip({1..100})), // แบ่งเป็นชุดละ 10 แถว Batches = Table.Split(Source, 10), // นำไปประมวลผล (เช่น: นับจำนวนแถว) RowCounts = L…

แบ่งข้อมูล 100 แถว เป็น 10 ชุด (ชุดละ 10 แถว) แล้วนำไปประมวลผลต่อด้วย List.Transform

fx
let
Source = #table({"Value"}, List.Zip({1..100})),
// แบ่งเป็นชุดละ 10 แถว
Batches = Table.Split(Source, 10),
// นำไปประมวลผล (เช่น: นับจำนวนแถว)
RowCounts = List.Transform(Batches, each Table.RowCount(_))
in
RowCounts

ผลลัพธ์{10, 10, 10, 10, 10, 10, 10, 10, 10, 10}
แบ่งข้อมูลเพื่อส่ง APIlet CustomerData = Table.FromRecords({ [ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"], [ID=4, Name="David"], [ID=5, Name="Eve"], [ID=6, Name="…

ตัวอย่างการแบ่งข้อมูลเพื่อส่ง API ที่มีข้อจำกัดจำนวนรายการ – จะส่ง 3 ครั้ง ครั้งละ 2 รายการ

fx
let
CustomerData = Table.FromRecords({
[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"],
[ID=4, Name="David"], [ID=5, Name="Eve"], [ID=6, Name="Frank"]
}),
// API รับข้อมูลได้ทีละ 2 รายการ
Pages = Table.Split(CustomerData, 2),
// ส่งข้อมูลทีละหน้า (ตัวอย่าง)
BatchText = List.Transform(Pages, each "Batch: " & Text.From(Table.RowCount(_)) & " rows")
in
BatchText

ผลลัพธ์{"Batch: 2 rows", "Batch: 2 rows", "Batch: 2 rows"}
แบ่งข้อมูลแล้วแปลงเป็น Table Listlet Source = Table.FromList( {"A", "B", "C", "D", "E", "F", "G"}, Splitter.SplitByNothing(), {"Letter"} ), SplitPages = Table.Split(Source, 3), // หากต้องการ Li…

แบ่งตารางแล้วแปลง rows เป็น nested lists สำหรับการประมวลผลที่ต้องการ row-by-row structure

fx
let
Source = Table.FromList(
{"A", "B", "C", "D", "E", "F", "G"},
Splitter.SplitByNothing(),
{"Letter"}
),
SplitPages = Table.Split(Source, 3),
// หากต้องการ List of Lists เพื่อจัดการต่อไป
AsList = List.Transform(SplitPages, each Table.ToRows(_))
in
AsList

ผลลัพธ์List of lists: {{"A"}, {"B"}, {"C"}}, {{"D"}, {"E"}, {"F"}}, {{"G"}}

FAQs

ถ้า pageSize มากกว่าจำนวนแถวทั้งหมด จะเกิดอะไร?+

จะส่งกลับ list ที่มีตารางเดียว (ตารางต้นฉบับ) เช่น ถ้าตารางมี 5 แถว แต่กำหนด pageSize=100 ผลลัพธ์จะเป็น list ที่มีตารางเดียวที่มี 5 แถว

ถ้า pageSize เป็น 0 หรือจำนวนลบ จะเกิดอะไร?+

จะเกิด error: "Expression.Error: The value of pageSize parameter of Table.Split must be greater than 0" – ต้องใช้ pageSize ที่เป็นตัวเลขบวก

Table.Split เหมาะสำหรับตารางขนาดเท่าไหร่?+

สามารถใช้กับตารางขนาดใดก็ได้ แต่มีประโยชน์มากโดยเฉพาะตารางที่มีแถวนับพันหรือนับหมื่น เพราะช่วยให้ประมวลผล batch ได้ง่ายและหลีกเลี่ยงโอเวอร์โหลด

ความต่างระหว่าง Table.Split กับ Table.Group คืออะไร?+

Table.Split แบ่งตามจำนวนแถว (ตำแหน่ง) ส่วน Table.Group แบ่งตามค่าในคอลัมน์ (หมวดหมู่) – Table.Split สำหรับ pagination, Table.Group สำหรับ grouping ตามข้อมูล

Resources & Related

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

ฟังก์ชันนี้Table.SplitTable functions
Table functions (2)
Table.Group

Table.Group จัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนดและสรุปผลในแต่ละกลุ่มด้วย aggregation functions เช่น List.Sum, List.Count, List.Average คล้ายกับ GROUP BY ใน SQL แต่ทรงพลังกว่าเพราะสามารถจัดกลุ่มหลายคอลัมน์พร้อมกันและสร้างคอลัมน์สรุปผลหลายคอลัมน์ในคำสั่งเดียว รองรับ GroupKind.Local เพื่อเพิ่มประสิทธิภาพเมื่อข้อมูลเรียงลำดับแล้ว

Table.Partition

แบ่งตารางออกเป็นรายการของตารางย่อย (List of Tables) โดยใช้ hash function กำหนดการกระจายข้อมูล

List functions (1)
List.Transform

List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม

Comments

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