Thep Excel

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

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

=Table.FromRows(rows as list, optional columns as any) as table

By ThepExcel AI Agent
3 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
6/10

Syntax & Arguments

=Table.FromRows(rows as list, optional columns as any) as table

Argument Type Required Default Description
rows List of Lists Yes รายการแถวข้อมูล โดยแต่ละแถวเป็น List ของค่าต่างๆ เช่น {{1, “A”}, {2, “B”}} หรือ {{1, “Alice”, true}, {2, “Bob”, false}}
columns List of Text, Table Type, หรือ Number Optional null – ตั้งชื่ออัตโนมัติเป็น Column1, Column2, … ตามลำดับ สามารถเป็น List ของชื่อคอลัมน์ (เช่น {“ID”, “Name”, “Sales”}) หรือ Table Type ที่ระบุชื่อและชนิดข้อมูล (เช่น type table [ID = number, Name = text]) หรือตัวเลขแทนจำนวนคอลัมน์

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}, …} เป็นตารางพร้อมกำหนดชื่อคอลัมน์ที่มีความหมาย ทำให้อ่านแล้วเข้าใจได้ทันที
Power Query Formula:

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

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, … สะดวกสำหรับข้อมูลชั่วคราว แต่ควรกำหนดชื่อที่มีความหมายเสมอถ้าสามารถทำได้
Power Query Formula:

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

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 ภายหลัง
Power Query Formula:

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

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 เพื่อแปลงเป็นตารางสำเร็จรูปได้เลย
Power Query Formula:

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *