Table.FromRows สร้างตารางจาก List ของ List โดยแต่ละ List ย่อยแทนข้อมูลในแถวหนึ่ง คล้ายกับการ transpose ข้อมูลแบบแถว-คอลัมน์ แต่ทำให้เป็นตารางจริงในทันที
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| rows | List of Lists | รายการแถวข้อมูล โดยแต่ละแถวเป็น List ของค่าต่างๆ เช่น {{1, “A”}, {2, “B”}} หรือ {{1, “Alice”, true}, {2, “Bob”, false}} | |
| [columns]ไม่บังคับ | List of Text, Table Type, หรือ Number | null – ตั้งชื่ออัตโนมัติเป็น Column1, Column2, … ตามลำดับ | สามารถเป็น List ของชื่อคอลัมน์ (เช่น {“ID”, “Name”, “Sales”}) หรือ Table Type ที่ระบุชื่อและชนิดข้อมูล (เช่น type table [ID = number, Name = text]) หรือตัวเลขแทนจำนวนคอลัมน์ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
Table.FromRows(rows, columns) ใช้สร้างตารางจากข้อมูลที่มีโครงสร้างแบบ nested list โดยจะแปลงแต่ละ list ย่อยให้เป็นแถวหนึ่งของตาราง เหมาะมากสำหรับข้อมูลจาก API หรือแหล่งภายนอกที่มาในรูปแบบ {{val1, val2}, {val3, val4}} แล้วต้องการแปลงเป็นตารางสำหรับการวิเคราะห์ต่อ
ที่เจ๋งคือสามารถระบุชื่อคอลัมน์ได้อย่างชัดเจน หรือแม้แต่ระบุ Type definition เพื่อให้ Power Query เข้าใจชนิดข้อมูลแต่ละคอลัมน์ตั้งแต่ต้น ต่างจาก Table.FromRecords ที่ต้องการ List ของ Record แบบ [ID=1, Name=”Bob”]
ส่วนตัวผมใช้ Table.FromRows คู่กับ List.Transform บ่อยมากเมื่อต้องสร้างตารางแบบไดนามิก โดยเฉพาะตอนทำงานกับข้อมูลจากเว็บเซอร์วิส JSON ที่ได้มาเป็น nested array ก่อน แล้วใช้ Table.FromRows เพื่อแปลงให้เป็นตารางสะอาดๆ ผ่านครั้งเดียว โค้ดจึงอ่านง่ายขึ้นเยอะครับ
Table.FromRows แปลง nested list {{1, "Bob", 100}, …} เป็นตารางพร้อมกำหนดชื่อคอลัมน์ที่มีความหมาย ทำให้อ่านแล้วเข้าใจได้ทันที
ถ้าไม่ระบุชื่อคอลัมน์ Power Query จะตั้งชื่ออัตโนมัติเป็น Column1, Column2, … สะดวกสำหรับข้อมูลชั่วคราว แต่ควรกำหนดชื่อที่มีความหมายเสมอถ้าสามารถทำได้
ใช้ type table เพื่อระบุชื่อคอลัมน์พร้อมชนิดข้อมูล ทำให้ Power Query ตรวจสอบและจัดการชนิดข้อมูลได้อย่างแม่นยำตั้งแต่ต้น โดยไม่ต้องกังวลเรื่อง Type Error ภายหลัง
นี่คือสถานการณ์ที่พบบ่อยมาก เมื่อดึงข้อมูลจาก API ที่ return JSON ใน nested array format สามารถใช้ Table.FromRows เพื่อแปลงเป็นตารางสำเร็จรูปได้เลย
ปัญหานี้เจอบ่อยมากครับ 😅 Table.FromRecords ต้องการข้อมูลเป็น List ของ Record เช่น {[ID=1, Name="Bob"], [ID=2, Name="Jim"]} ส่วน Table.FromRows ต้องการเป็น List ของ List เช่น {{1, "Bob"}, {2, "Jim"}} ถ้าคุณมี nested list แต่ต้องการ Record ให้ใช้ Table.FromRecords แทน แต่ถ้าข้อมูลมาเป็น List of Lists ให้ใช้ Table.FromRows โดยตรง ผมแนะนำให้ตรวจเช็คโครงสร้างข้อมูลต้นฉบับก่อน เพื่อเลือกใช้ฟังก์ชันที่เหมาะสม
ไม่จำเป็นครับ หากไม่ระบุ Power Query จะตั้งชื่ออัตโนมัติเป็น Column1, Column2, … แต่ผมแนะนำให้ระบุเสมอถ้าเป็นไปได้ เพราะชื่อที่มีความหมายจะช่วยให้เข้าใจข้อมูลได้ง่ายขึ้น และเมื่อต้องอ้างอิงคอลัมน์ในขั้นตอนถัดไป ชื่อที่ชัดเจนจะลดความสับสน
คำถามเจ๋งครับ! ถ้าโครงสร้าง JSON ไม่แน่นอน คุณสามารถสร้าง function ที่ตรวจสอบและปรับขนาด columns parameter แบบไดนามิก โดยใช้ List.Transform และ List.Range เพื่อกำหนดจำนวนคอลัมน์จากแถวแรก อีกวิธีหนึ่งคือปล่อยให้ Power Query ตั้งชื่ออัตโนมัติก่อน แล้วใช้ Table.RenameColumns หลังจากนั้น
ใช้ได้ครับ แต่ประสิทธิภาพขึ้นอยู่กับขนาดข้อมูล ผมแนะนำให้ตรวจสอบกับข้อมูลจริง บางครั้งถ้าข้อมูลมีขนาดใหญ่มาก อาจต้องใช้การ stream หรือ batch processing แทน แต่สำหรับข้อมูลทั่วไป (นับแสน record) Table.FromRows ก็ใช้ได้ปกติดีครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.FromRows จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์
Table.FromColumns สร้างตารางจากลิสต์ของลิสต์ โดยแต่ละลิสต์จะเป็นคอลัมน์หนึ่ง เหมาะกับข้อมูล column-oriented จาก API หรือ JSON
แปลง List เป็น Table โดยใช้ฟังก์ชัน Splitter เพื่อแยกข้อมูลเป็นคอลัมน์
แปลง List ของ Record เป็นตาราง โดยแต่ละ Record กลายเป็นหนึ่งแถว เหมาะสำหรับข้อมูลจาก API หรือ JSON
Table.ToColumns แปลงตาราง (Table) ให้เป็น List ของ List โดยแต่ละ List ย่อยแทนข้อมูลจากคอลัมน์เดียว เรียงตามลำดับคอลัมน์จากซ้ายไปขวา ส่วนกลับกันของ Table.FromColumns
Table.Transpose จะกลับด้านตาราง คล้ายกับการ Copy > Paste Special > Transpose ใน Excel โดยข้อมูลในแถวที่ 1 จะกลายเป็นคอลัมน์ที่ 1 แถวที่ 2 เป็นคอลัมน์ที่ 2 ไปเรื่อยๆ
Table.Unpivot แปลงคอลัมน์ที่ระบุให้กลายเป็นแถว (Unpivot) โดยสร้าง 2 คอลัมน์ใหม่ คอลัมน์แรกเก็บชื่อคอลัมน์เดิม (Attribute) และคอลัมน์ที่สองเก็บค่า (Value) ฟังก์ชันนี้จะข้ามค่า null โดยอัตโนมัติ เหมาะสำหรับเตรียมข้อมูลแบบ Wide Format ให้กลายเป็น Long Format สำหรับใช้ใน Power BI หรือ Pivot Table
Table.UnpivotOtherColumns แปลงคอลัมน์ที่ไม่ได้ระบุทั้งหมดให้กลายเป็นแถว (Unpivot) โดยระบุเฉพาะคอลัมน์ที่ต้องการคงไว้ ข้อดีคือเป็น Dynamic ถ้ามีคอลัมน์ใหม่เพิ่มเข้ามาในอนาคตก็จะถูก Unpivot ให้อัตโนมัติ เหมาะสำหรับแปลงข้อมูลจาก Wide Format (หลายคอลัมน์) ให้เป็น Long Format (หลายแถว) สำหรับ PivotTable และ Database
สร้างหรือแก้ไขพฤติกรรมของตาราง สำหรับการพัฒนา Custom Connector และการจัดการ Query Folding
Tables.GetRelationships ดึงข้อมูลความสัมพันธ์ (Relationships) ระหว่างตารางต่างๆ จาก Navigation Table เพื่อวิเคราะห์โครงสร้างข้อมูล
Csv.Document แปลงข้อมูลรูปแบบ CSV (Comma-Separated Values) ให้เป็นตารางข้อมูล (table) ใน Power Query โดยรองรับการกำหนดตัวแบ่งข้อมูล (delimiter), รหัสภาษา (encoding) และโครงสร้างคอลัมน์ (column structure) แบบต่างๆ ได้ตามความต้องการ function นี้สามารถแยกวิเคราะห์ทั้งข้อมูลแบบ binary content ที่ได้จาก File.Contents และข้อความแบบ text string ที่ได้จาก Web.Contents พร้อมจัดการข้อความที่ครอบด้วย quote ตามมาตรฐานสากล CSV standard เหมาะสมสำหรับการนำเข้าไฟล์ CSV จากระบบไฟล์ในเครื่อง (local), ที่อยู่เว็บไซต์ (URL) หรือการตอบกลับจาก API (API response) ที่มีตัวแบ่งข้อมูลแบบกำหนดเอง (custom delimiter), เนื้อหาภาษาต่างประเทศ หรือโครงสร้างพิเศษที่ต้องการการควบคุมเฉพาะ คืนค่าออกมาเป็นตารางที่ทุกคอลัมน์มีประเภทข้อมูลเป็นข้อความ (text type) ควรใช้ร่วมกับ Table.PromoteHeaders เพื่อยกแถวแรกขึ้นเป็นหัวตาราง และ Table.TransformColumnTypes เพื่อแปลงประเภทข้อมูลให้เหมาะสมกับการใช้งาน
Json.Document ใช้สำหรับแปลง JSON text หรือ binary data ให้เป็น Power Query record ทำให้คุณสามารถเข้าถึง field แต่ละตัวได้อย่างง่ายดาย
List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม
Value.ReplaceType แทนที่ประเภทข้อมูล (type) ของค่าด้วยประเภทใหม่ที่กำหนด โดยไม่เปลี่ยนข้อมูลจริง
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่