Table.ToColumns แปลงตาราง (Table) ให้เป็น List ของ List โดยแต่ละ List ย่อยแทนข้อมูลจากคอลัมน์เดียว เรียงตามลำดับคอลัมน์จากซ้ายไปขวา ส่วนกลับกันของ Table.FromColumns
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| table | table | ตารางที่ต้องการแปลงให้เป็น List ของ List |
ฟังก์ชัน Table.ToColumns ใช้สำหรับแปลงตารางให้เป็น List ของ List โดยคอลัมน์แต่ละคอลัมน์จะกลายเป็น List ย่อยหนึ่งตัว บ่อยครั้งใช้เมื่อต้องการประมวลผลข้อมูลแบบรายคอลัมน์ หรือต้องการเปลี่ยนโครงสร้างข้อมูลให้เป็นรูปแบบ List เพื่อใช้กับฟังก์ชัน List อื่นๆ
ที่เจ๋งคือ Table.ToColumns เป็นการผกผันของ Table.FromColumns ถ้าคุณแปลงตาราง → List ของ List แล้วแปลงกลับ ก็ได้ตารางเดิมคืนมา ซึ่งมีประโยชน์มากในการจัดการข้อมูลที่ต้องเปลี่ยนรูปแบบไปมา
ส่วนตัวผมชอบใช้ Table.ToColumns เวลาต้องทำ dynamic formula บน List ของคอลัมน์ หรือต้องดึง metadata เกี่ยวกับคอลัมน์ต่างๆ มันให้ความยืดหยุ่นมากขึ้น
ใช้ร่วมกับ List.Transform เพื่อแปลงค่าในแต่ละคอลัมน์ทีละคอลัมน์
ใช้เตรียมข้อมูลสำหรับ List.Zip เพื่อรวมคอลัมน์ต่างๆ เข้าด้วยกัน
ตาราง 2 แถว 3 คอลัมน์ ถูกแปลงเป็น List ของ 3 Lists ย่อย คอลัมน์ที่ 1 คือ {1, 2}, คอลัมน์ที่ 2 คือ {"Bob", "Jim"}, คอลัมน์ที่ 3 คือ {100, 200}
แปลง Source ทั้งหมดเป็น List ของ Lists จากนั้นสามารถเข้าถึง List แต่ละรายการด้วย index {0}, {1} เป็นต้น เหมือนกับการใช้ array indexing
ดึงคอลัมน์ที่ 2 จาก List ของ Lists แล้วคูณแต่ละค่าด้วย 2 โดยใช้ List.Transform กับ each keyword เพื่อสร้าง dynamic transformation
นับจำนวนคอลัมน์ด้วย List.Count ของผลลัพธ์ทั้งหมด (3 Lists = 3 คอลัมน์) และนับจำนวนแถวด้วย List.Count ของคอลัมน์แรก (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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.ColumnNames ดึงชื่อคอลัมน์ทั้งหมดจากตารางและคืนค่าเป็นลิสต์ของข้อความ เหมาะสำหรับการทำงานแบบไดนามิกกับโครงสร้างตารางที่ไม่แน่นอน
Table.FromColumns สร้างตารางจากลิสต์ของลิสต์ โดยแต่ละลิสต์จะเป็นคอลัมน์หนึ่ง เหมาะกับข้อมูล column-oriented จาก API หรือ JSON
Table.FromRows สร้างตารางจาก List ของ List โดยแต่ละ List ย่อยแทนข้อมูลในแถวหนึ่ง คล้ายกับการ transpose ข้อมูลแบบแถว-คอลัมน์ แต่ทำให้เป็นตารางจริงในทันที
Table.ToRows แปลงตารางให้เป็น List ของ List โดยแต่ละ List ย่อยแทนข้อมูล 1 แถว ไม่มีชื่อคอลัมน์ เหมาะสำหรับส่งออกข้อมูลเป็น JSON/CSV หรือประมวลผลแถวโดยไม่สนใจชื่อฟิลด์
List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่