Thep Excel

Table.FromRowsสร้างตารางจากรายการแถว

Table.FromRows สร้างตารางจาก List ของ List โดยแต่ละ List ย่อยแทนข้อมูลในแถวหนึ่ง คล้ายกับการ transpose ข้อมูลแบบแถว-คอลัมน์ แต่ทำให้เป็นตารางจริงในทันที

fx
=Table.FromRows(rows, [columns]) as table

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

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
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]) หรือตัวเลขแทนจำนวนคอลัมน์

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

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 เพื่อแปลงให้เป็นตารางสะอาดๆ ผ่านครั้งเดียว โค้ดจึงอ่านง่ายขึ้นเยอะครับ

Examples

สร้างตารางพื้นฐานพร้อมชื่อคอลัมน์let Rows = { {1, "Bob", 100}, {2, "Jim", 200}, {3, "Alice", 150} }, Result = Table.FromRows(Rows, {"ID", "Name", "Sales"}) in Result

Table.FromRows แปลง nested list {{1, "Bob", 100}, …} เป็นตารางพร้อมกำหนดชื่อคอลัมน์ที่มีความหมาย ทำให้อ่านแล้วเข้าใจได้ทันที

fx
let
Rows = {
{1, "Bob", 100},
{2, "Jim", 200},
{3, "Alice", 150}
},
Result = Table.FromRows(Rows, {"ID", "Name", "Sales"})
in
Result

ผลลัพธ์ตารางมี 3 แถว 3 คอลัมน์ (ID, Name, Sales) โดยแต่ละแถวแสดงข้อมูลพนักงานและยอดขาย
ไม่ระบุชื่อคอลัมน์ (Auto-naming)let Rows = { {"Apple", 5}, {"Banana", 3}, {"Orange", 8} }, Result = Table.FromRows(Rows) in Result

ถ้าไม่ระบุชื่อคอลัมน์ Power Query จะตั้งชื่ออัตโนมัติเป็น Column1, Column2, … สะดวกสำหรับข้อมูลชั่วคราว แต่ควรกำหนดชื่อที่มีความหมายเสมอถ้าสามารถทำได้

fx
let
Rows = {
{"Apple", 5},
{"Banana", 3},
{"Orange", 8}
},
Result = Table.FromRows(Rows)
in
Result

ผลลัพธ์ตารางมี 3 แถว 2 คอลัมน์ โดยคอลัมน์ชื่อ Column1 และ Column2 ตามลำดับ
ระบุชนิดข้อมูล (Type Definition)let Rows = { {1, "Alice", true}, {2, "Bob", false}, {3, "Charlie", true} }, ColumnType = type table [UserID = number, Name = text, IsActive = logical], Result =…

ใช้ type table เพื่อระบุชื่อคอลัมน์พร้อมชนิดข้อมูล ทำให้ Power Query ตรวจสอบและจัดการชนิดข้อมูลได้อย่างแม่นยำตั้งแต่ต้น โดยไม่ต้องกังวลเรื่อง Type Error ภายหลัง

fx
let
Rows = {
{1, "Alice", true},
{2, "Bob", false},
{3, "Charlie", true}
},
ColumnType = type table [UserID = number, Name = text, IsActive = logical],
Result = Table.FromRows(Rows, ColumnType)
in
Result

ผลลัพธ์ตารางมี 3 แถว 3 คอลัมน์ โดยแต่ละคอลัมน์มีชนิดข้อมูลที่กำหนดไว้อย่างชัดเจน (number, text, logical)
สร้างตารางจากข้อมูล JSON (API Response)let JsonData = Json.Document( "{\"data\": [[1, \"John\", 2500], [2, \"Jane\", 3000]]}" ), DataList = JsonData[data], Result = Table.FromRows( DataList, {"Employ…

นี่คือสถานการณ์ที่พบบ่อยมาก เมื่อดึงข้อมูลจาก API ที่ return JSON ใน nested array format สามารถใช้ Table.FromRows เพื่อแปลงเป็นตารางสำเร็จรูปได้เลย

fx
let
JsonData = Json.Document(
"{\"data\": [[1, \"John\", 2500], [2, \"Jane\", 3000]]}"
),
DataList = JsonData[data],
Result = Table.FromRows(
DataList,
{"EmployeeID", "Name", "Salary"}
)
in
Result

ผลลัพธ์ตารางมี 2 แถว 3 คอลัมน์ โดยข้อมูลมาจาก JSON structure และได้ชื่อคอลัมน์ที่เหมาะสม

FAQs

Table.FromRows กับ Table.FromRecords ต่างกันอย่างไร?+

ปัญหานี้เจอบ่อยมากครับ 😅 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, … แต่ผมแนะนำให้ระบุเสมอถ้าเป็นไปได้ เพราะชื่อที่มีความหมายจะช่วยให้เข้าใจข้อมูลได้ง่ายขึ้น และเมื่อต้องอ้างอิงคอลัมน์ในขั้นตอนถัดไป ชื่อที่ชัดเจนจะลดความสับสน

จะทำไงถ้าข้อมูลมาจาก API เป็น nested array แต่ไม่รู้โครงสร้องล่วงหน้า?+

คำถามเจ๋งครับ! ถ้าโครงสร้าง JSON ไม่แน่นอน คุณสามารถสร้าง function ที่ตรวจสอบและปรับขนาด columns parameter แบบไดนามิก โดยใช้ List.Transform และ List.Range เพื่อกำหนดจำนวนคอลัมน์จากแถวแรก อีกวิธีหนึ่งคือปล่อยให้ Power Query ตั้งชื่ออัตโนมัติก่อน แล้วใช้ Table.RenameColumns หลังจากนั้น

Table.FromRows ใช้ได้กับข้อมูลขนาดใหญ่หรือ?+

ใช้ได้ครับ แต่ประสิทธิภาพขึ้นอยู่กับขนาดข้อมูล ผมแนะนำให้ตรวจสอบกับข้อมูลจริง บางครั้งถ้าข้อมูลมีขนาดใหญ่มาก อาจต้องใช้การ stream หรือ batch processing แทน แต่สำหรับข้อมูลทั่วไป (นับแสน record) Table.FromRows ก็ใช้ได้ปกติดีครับ

Resources & Related

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

ฟังก์ชันนี้Table.FromRowsTable functions
Table functions (10)
Table.AddColumn

Table.AddColumn เพิ่มคอลัมน์ใหม่ลงในตารางโดยคำนวณค่าจากฟังก์ชันที่กำหนด ใช้คำสั่ง each เพื่ออ้างอิงข้อมูลในแต่ละแถว เช่น each [Price] * [Quantity] สามารถระบุชนิดข้อมูลได้เพื่อเพิ่มประสิทธิภาพและป้องกันข้อผิดพลาดจากการคาดเดาชนิดข้อมูล ทำงานแบบทีละแถวและเหมาะสำหรับสร้างคอลัมน์คำนวณ รวมข้อมูล ใช้เงื่อนไข และการแปลงข้อมูลต่างๆ ใช้ร่วมกับฟังก์ชัน Table.TransformColumns สำหรับแก้ไขคอลัมน์เดิม Table.AddIndexColumn สำหรับเพิ่มหมายเลขลำดับ Table.SelectRows สำหรับกรองแถว Table.FromRecords สำหรับสร้างตารางจากข้อมูล Text.Combine สำหรับรวมข้อความ Number.Round สำหรับปัดเศษ Date.Year สำหรับดึงค่าปี และ Text.Upper สำหรับแปลงเป็นตัวพิมพ์ใหญ่ เพื่อสร้างกระบวนการแปลงข้อมูลที่สมบูรณ์

Table.FromColumns

Table.FromColumns สร้างตารางจากลิสต์ของลิสต์ โดยแต่ละลิสต์จะเป็นคอลัมน์หนึ่ง เหมาะกับข้อมูล column-oriented จาก API หรือ JSON

Table.FromList

แปลง List เป็น Table โดยใช้ฟังก์ชัน Splitter เพื่อแยกข้อมูลเป็นคอลัมน์

Table.FromRecords

แปลง List ของ Record เป็นตาราง โดยแต่ละ Record กลายเป็นหนึ่งแถว เหมาะสำหรับข้อมูลจาก API หรือ JSON

Table.ToColumns

Table.ToColumns แปลงตาราง (Table) ให้เป็น List ของ List โดยแต่ละ List ย่อยแทนข้อมูลจากคอลัมน์เดียว เรียงตามลำดับคอลัมน์จากซ้ายไปขวา ส่วนกลับกันของ Table.FromColumns

Table.Transpose

Table.Transpose จะกลับด้านตาราง คล้ายกับการ Copy > Paste Special > Transpose ใน Excel โดยข้อมูลในแถวที่ 1 จะกลายเป็นคอลัมน์ที่ 1 แถวที่ 2 เป็นคอลัมน์ที่ 2 ไปเรื่อยๆ

Table.Unpivot

Table.Unpivot แปลงคอลัมน์ที่ระบุให้กลายเป็นแถว (Unpivot) โดยสร้าง 2 คอลัมน์ใหม่ คอลัมน์แรกเก็บชื่อคอลัมน์เดิม (Attribute) และคอลัมน์ที่สองเก็บค่า (Value) ฟังก์ชันนี้จะข้ามค่า null โดยอัตโนมัติ เหมาะสำหรับเตรียมข้อมูลแบบ Wide Format ให้กลายเป็น Long Format สำหรับใช้ใน Power BI หรือ Pivot Table

Table.UnpivotOtherColumns

Table.UnpivotOtherColumns แปลงคอลัมน์ที่ไม่ได้ระบุทั้งหมดให้กลายเป็นแถว (Unpivot) โดยระบุเฉพาะคอลัมน์ที่ต้องการคงไว้ ข้อดีคือเป็น Dynamic ถ้ามีคอลัมน์ใหม่เพิ่มเข้ามาในอนาคตก็จะถูก Unpivot ให้อัตโนมัติ เหมาะสำหรับแปลงข้อมูลจาก Wide Format (หลายคอลัมน์) ให้เป็น Long Format (หลายแถว) สำหรับ PivotTable และ Database

Table.View

สร้างหรือแก้ไขพฤติกรรมของตาราง สำหรับการพัฒนา Custom Connector และการจัดการ Query Folding

Tables.GetRelationships

Tables.GetRelationships ดึงข้อมูลความสัมพันธ์ (Relationships) ระหว่างตารางต่างๆ จาก Navigation Table เพื่อวิเคราะห์โครงสร้างข้อมูล

Accessing data functions (2)
Csv.Document

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.Document ใช้สำหรับแปลง JSON text หรือ binary data ให้เป็น Power Query record ทำให้คุณสามารถเข้าถึง field แต่ละตัวได้อย่างง่ายดาย

List functions (1)
List.Transform

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

Value functions (1)
Value.ReplaceType

Value.ReplaceType แทนที่ประเภทข้อมูล (type) ของค่าด้วยประเภทใหม่ที่กำหนด โดยไม่เปลี่ยนข้อมูลจริง

Comments

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