Table.ToColumns แปลงตาราง (Table) ให้เป็น List ของ List โดยแต่ละ List ย่อยแทนข้อมูลจากคอลัมน์เดียว เรียงตามลำดับคอลัมน์จากซ้ายไปขวา ส่วนกลับกันของ Table.FromColumns
= Table.ToColumns(table as table) as list
= Table.ToColumns(table as table) as list
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตารางที่ต้องการแปลงให้เป็น List ของ List |
ใช้ร่วมกับ List.Transform เพื่อแปลงค่าในแต่ละคอลัมน์ทีละคอลัมน์
ใช้เตรียมข้อมูลสำหรับ List.Zip เพื่อรวมคอลัมน์ต่างๆ เข้าด้วยกัน
let SampleTable = Table.FromRecords({ [CustomerID = 1, Name = "Bob", Amount = 100], [CustomerID = 2, Name = "Jim", Amount = 200] }), Result = Table.ToColumns(Sa…let
SampleTable = Table.FromRecords({
[CustomerID = 1, Name = "Bob", Amount = 100],
[CustomerID = 2, Name = "Jim", Amount = 200]
}),
Result = Table.ToColumns(SampleTable)
in
Result
{{1, 2}, {"Bob", "Jim"}, {100, 200}}
let Source = Table.FromRows( {{"Alice", 1500}, {"Bob", 2000}, {"Charlie", 1800}}, {"Employee", "Salary"} ), ColumnsList = Table.ToColumns(Source), FirstColumn =…let
Source = Table.FromRows(
{{"Alice", 1500}, {"Bob", 2000}, {"Charlie", 1800}},
{"Employee", "Salary"}
),
ColumnsList = Table.ToColumns(Source),
FirstColumn = ColumnsList{0},
SecondColumn = ColumnsList{1}
in
ColumnsList
{{"Alice", "Bob", "Charlie"}, {1500, 2000, 1800}}
let Source = Table.FromRecords({ [ID = 1, Value = 10], [ID = 2, Value = 20], [ID = 3, Value = 30] }), ColumnsList = Table.ToColumns(Source), SecondColumnDoubled…let
Source = Table.FromRecords({
[ID = 1, Value = 10],
[ID = 2, Value = 20],
[ID = 3, Value = 30]
}),
ColumnsList = Table.ToColumns(Source),
SecondColumnDoubled = List.Transform(ColumnsList{1}, each _ * 2),
Result = {ColumnsList{0}, SecondColumnDoubled}
in
Result
{{1, 2, 3}, {20, 40, 60}}
let Source = Table.FromRecords({ [A = 1, B = 2, C = 3], [A = 4, B = 5, C = 6], [A = 7, B = 8, C = 9] }), ColumnsList = Table.ToColumns(Source), ColumnCount = Li…let
Source = Table.FromRecords({
[A = 1, B = 2, C = 3],
[A = 4, B = 5, C = 6],
[A = 7, B = 8, C = 9]
}),
ColumnsList = Table.ToColumns(Source),
ColumnCount = List.Count(ColumnsList),
RowCount = List.Count(ColumnsList{0})
in
{ColumnCount, RowCount}
{3, 3}
Table.ToColumns แปลงข้อมูลรายคอลัมน์ (ผลลัพธ์เป็น List ของคอลัมน์) ส่วน Table.ToRows แปลงข้อมูลรายแถว (ผลลัพธ์เป็น List ของแถว) ถ้าตาราง 3 แถว 2 คอลัมน์ ToColumns ให้ {2 Lists ของแถวละ 3 ค่า} แต่ ToRows ให้ {3 Lists ของแถวละ 2 ค่า}
ได้ครับ ใช้ Table.FromColumns เพื่อแปลง List ของ List กลับไปเป็นตาราง ผมมักจะใช้ workflow นี้เวลาต้องประมวลผลข้อมูลแบบ column-by-column แล้วแปลงกลับเป็นตารางเหมือนเดิม
ยังคงได้ List ของ Lists ที่ว่างเปล่า ตัวอย่าง: Table.ToColumns(Table.FromRecords({})) → {} ไม่มี List ย่อยเลยครับ เพราะไม่มีคอลัมน์ที่จะแปลง
ปัญหาคือถ้าตารางใหญ่มากๆ การแปลงเป็น List จะใช้ memory เยอะ ผมแนะนำให้กรอง (filter) ก่อนแปลง หรือใช้ List functions แบบ lazy evaluation ถ้าเป็นไปได้
ฟังก์ชัน Table.ToColumns ใช้สำหรับแปลงตารางให้เป็น List ของ List โดยคอลัมน์แต่ละคอลัมน์จะกลายเป็น List ย่อยหนึ่งตัว บ่อยครั้งใช้เมื่อต้องการประมวลผลข้อมูลแบบรายคอลัมน์ หรือต้องการเปลี่ยนโครงสร้างข้อมูลให้เป็นรูปแบบ List เพื่อใช้กับฟังก์ชัน List อื่นๆ
ที่เจ๋งคือ Table.ToColumns เป็นการผกผันของ Table.FromColumns ถ้าคุณแปลงตาราง → List ของ List แล้วแปลงกลับ ก็ได้ตารางเดิมคืนมา ซึ่งมีประโยชน์มากในการจัดการข้อมูลที่ต้องเปลี่ยนรูปแบบไปมา
ส่วนตัวผมชอบใช้ Table.ToColumns เวลาต้องทำ dynamic formula บน List ของคอลัมน์ หรือต้องดึง metadata เกี่ยวกับคอลัมน์ต่างๆ มันให้ความยืดหยุ่นมากขึ้น