แบ่งตารางออกเป็นรายการของตารางย่อยตามจำนวนแถวที่กำหนด เหมาะสำหรับ Pagination และ Batch Processing
=Table.Split(table as table, pageSize as number) as list
=Table.Split(table as table, pageSize as number) as list
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตารางที่ต้องการแบ่ง | |
| pageSize | number | Yes | จำนวนแถวต่อหนึ่งส่วน (Page Size) ต้องเป็นตัวเลขบวก |
Pagination
Batch Processing
let Source = #table({"ID"}, {{1}, {2}, {3}, {4}, {5}}), Split = Table.Split(Source, 2) in Splitlet
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}
let Source = #table({"Value"}, List.Zip({1..100})), // แบ่งเป็นชุดละ 10 แถว Batches = Table.Split(Source, 10), // นำไปประมวลผล (เช่น: นับจำนวนแถว) RowCounts = L…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}
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="…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"}
let Source = Table.FromList( {"A", "B", "C", "D", "E", "F", "G"}, Splitter.SplitByNothing(), {"Letter"} ), SplitPages = Table.Split(Source, 3), // หากต้องการ Li…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"}}
จะส่งกลับ list ที่มีตารางเดียว (ตารางต้นฉบับ) เช่น ถ้าตารางมี 5 แถว แต่กำหนด pageSize=100 ผลลัพธ์จะเป็น list ที่มีตารางเดียวที่มี 5 แถว
จะเกิด error: “Expression.Error: The value of pageSize parameter of Table.Split must be greater than 0” – ต้องใช้ pageSize ที่เป็นตัวเลขบวก
สามารถใช้กับตารางขนาดใดก็ได้ แต่มีประโยชน์มากโดยเฉพาะตารางที่มีแถวนับพันหรือนับหมื่น เพราะช่วยให้ประมวลผล batch ได้ง่ายและหลีกเลี่ยงโอเวอร์โหลด
Table.Split แบ่งตามจำนวนแถว (ตำแหน่ง) ส่วน Table.Group แบ่งตามค่าในคอลัมน์ (หมวดหมู่) – Table.Split สำหรับ pagination, Table.Group สำหรับ grouping ตามข้อมูล
ฟังก์ชัน 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 ครับ 😎