Thep Excel

Table.ExpandRecordColumn – ขยาย Record Column เป็นหลายคอลัมน์

Table.ExpandRecordColumn ขยายคอลัมน์ที่เก็บ Record values ออกเป็นคอลัมน์แยกกัน โดยแต่ละฟิลด์ใน Record จะกลายเป็นคอลัมน์ใหม่ สามารถระบุว่าต้องการขยายฟิลด์ใดบ้างผ่าน fieldNames parameter และสามารถกำหนดชื่อคอลัมน์ใหม่ผ่าน newColumnNames เพื่อป้องกันชื่อซ้ำ มักใช้หลังจาก API calls หรือการ parse JSON ที่ได้ข้อมูลแบบ nested

=Table.ExpandRecordColumn(table as table, column as text, fieldNames as list, optional newColumnNames as nullable list) as table

By ThepExcel AI Agent
17 December 2025

Function Metrics


Popularity
8/10

Difficulty
4/10

Usefulness
8/10

Syntax & Arguments

=Table.ExpandRecordColumn(table as table, column as text, fieldNames as list, optional newColumnNames as nullable list) as table

Argument Type Required Default Description
table table Yes ตารางข้อมูลที่มีคอลัมน์ประเภท Record ที่ต้องการขยาย
column text Yes ชื่อคอลัมน์ที่เก็บ Record values ที่ต้องการขยาย
fieldNames list Yes List ของชื่อฟิลด์ที่ต้องการดึงออกมาจาก Record เช่น {“name”, “age”, “email”}
newColumnNames nullable list Optional null List ของชื่อคอลัมน์ใหม่ที่ต้องการใช้แทนชื่อฟิลด์เดิม เพื่อป้องกันชื่อซ้ำกับคอลัมน์อื่นในตาราง

How it works

ขยายข้อมูลจาก API Response

เมื่อเรียก API แล้วได้ JSON response ที่มีโครงสร้างซ้อนกัน ใช้ฟังก์ชันนี้เพื่อขยาย Record fields ออกเป็นคอลัมน์แยกเพื่อความสะดวกในการวิเคราะห์

แปลง Nested JSON เป็น Flat Table

แปลงข้อมูล JSON ที่มีโครงสร้างซ้อนกันหลายชั้นให้เป็นตารางแบน (flat table) เพื่อให้ง่ายต่อการประมวลผลและการสร้างรายงาน

ดึงข้อมูลจาก Nested Columns

ดึงฟิลด์ที่ต้องการออกจากคอลัมน์ที่เก็บข้อมูลหลายฟิลด์รวมกัน เช่น คอลัมน์ Address ที่มี street, city, zipcode

Examples

ตัวอย่างที่ 1: ขยาย Record Column พื้นฐาน
let Source = Table.FromRecords({ [ a = [aa = 1, bb = 2, cc = 3], b = 2 ] }), Expanded = Table.ExpandRecordColumn(Source, "a", {"aa", "bb", "cc"}) in Expanded
ขยายคอลัมน์ a ซึ่งเป็น Record ที่มี 3 ฟิลด์ (aa, bb, cc) ออกเป็น 3 คอลัมน์แยกกัน คอลัมน์ b ยังคงอยู่ในตารางเหมือนเดิม
Power Query Formula:

let
    Source = Table.FromRecords({
        [
            a = [aa = 1, bb = 2, cc = 3],
            b = 2
        ]
    }),
    Expanded = Table.ExpandRecordColumn(Source, "a", {"aa", "bb", "cc"})
in
    Expanded

Result:

Table: {[aa=1, bb=2, cc=3, b=2]}

ตัวอย่างที่ 2: ขยายพร้อมเปลี่ยนชื่อคอลัมน์
let Source = Table.FromRecords({ [ ID = 1, Details = [Name = "John", Age = 30, City = "Bangkok"] ], [ ID = 2, Details = [Name = "Jane", Age = 25, City = "Chiang…
ขยาย Record column Details และเปลี่ยนชื่อคอลัมน์ใหม่เป็น CustomerName, CustomerAge, CustomerCity เพื่อให้ชัดเจนและป้องกันชื่อซ้ำ
Power Query Formula:

let
    Source = Table.FromRecords({
        [
            ID = 1,
            Details = [Name = "John", Age = 30, City = "Bangkok"]
        ],
        [
            ID = 2,
            Details = [Name = "Jane", Age = 25, City = "Chiang Mai"]
        ]
    }),
    Expanded = Table.ExpandRecordColumn(
        Source,
        "Details",
        {"Name", "Age", "City"},
        {"CustomerName", "CustomerAge", "CustomerCity"}
    )
in
    Expanded

Result:

Table: {[ID=1, CustomerName="John", CustomerAge=30, CustomerCity="Bangkok"], [ID=2, ...]}

ตัวอย่างที่ 3: ขยายเฉพาะฟิลด์ที่ต้องการ
let Source = Table.FromRecords({ [ OrderID = 101, Customer = [Name = "Bob", Email = "bob@email.com", Phone = "123-4567"] ] }), Expanded = Table.ExpandRecordColu…
ขยายเฉพาะ Name และ Email จาก Customer record โดยไม่เอา Phone field ออกมา เหมาะสำหรับเลือกข้อมูลที่จำเป็นเท่านั้น
Power Query Formula:

let
    Source = Table.FromRecords({
        [
            OrderID = 101,
            Customer = [Name = "Bob", Email = "bob@email.com", Phone = "123-4567"]
        ]
    }),
    Expanded = Table.ExpandRecordColumn(
        Source,
        "Customer",
        {"Name", "Email"}
    )
in
    Expanded

Result:

Table: {[OrderID=101, Name="Bob", Email="bob@email.com"]}

ตัวอย่างที่ 4: ขยายหลาย Records ในตาราง
let Source = Table.FromRecords({ [ID = 1, Data = [X = 10, Y = 20]], [ID = 2, Data = [X = 30, Y = 40]], [ID = 3, Data = [X = 50, Y = 60]] }), Expanded = Table.Ex…
ขยาย Record ในทุกแถวของตาราง ทำให้แต่ละแถวมีคอลัมน์ X และ Y แยกจาก Data record pattern นี้ใช้บ่อยในการทำงานกับข้อมูลจาก API
Power Query Formula:

let
    Source = Table.FromRecords({
        [ID = 1, Data = [X = 10, Y = 20]],
        [ID = 2, Data = [X = 30, Y = 40]],
        [ID = 3, Data = [X = 50, Y = 60]]
    }),
    Expanded = Table.ExpandRecordColumn(Source, "Data", {"X", "Y"})
in
    Expanded

Result:

Table: {[ID=1, X=10, Y=20], [ID=2, X=30, Y=40], [ID=3, X=50, Y=60]}

FAQs

ถ้าระบุฟิลด์ที่ไม่มีใน Record จะเกิดอะไรขึ้น?

จะเกิด error ทันที ต้องตรวจสอบให้แน่ใจว่าชื่อฟิลด์ใน fieldNames parameter ตรงกับฟิลด์ที่มีอยู่จริงใน Record หรือใช้ try…otherwise เพื่อจัดการ error

จำเป็นต้องขยายทุกฟิลด์ใน Record หรือไม่?

ไม่จำเป็น สามารถเลือกขยายเฉพาะฟิลด์ที่ต้องการได้โดยระบุเฉพาะชื่อฟิลด์นั้นใน fieldNames parameter ฟิลด์อื่นที่ไม่ระบุจะไม่ถูกขยายออกมา

ควรใช้ newColumnNames เมื่อไร?

ใช้เมื่อชื่อฟิลด์ใน Record ซ้ำกับชื่อคอลัมน์อื่นที่มีอยู่แล้วในตาราง หรือเมื่อต้องการให้ชื่อคอลัมน์ใหม่มีความหมายชัดเจนกว่า เช่น เปลี่ยนจาก “Name” เป็น “CustomerName”

ต่างจาก Table.ExpandTableColumn อย่างไร?

Table.ExpandRecordColumn ใช้ขยาย Record (single row of fields) ส่วน Table.ExpandTableColumn ใช้ขยาย Table (multiple rows) ถ้าคอลัมน์เก็บข้อมูลเป็น table ให้ใช้ Table.ExpandTableColumn แทน

สามารถขยาย Record ที่ซ้อนกันหลายชั้นได้ไหม?

ได้ แต่ต้องขยายทีละชั้น เช่น ขยายชั้นแรกก่อน จะได้คอลัมน์ที่เป็น Record ชั้นที่สอง จากนั้นใช้ Table.ExpandRecordColumn อีกครั้งเพื่อขยายชั้นที่สอง

Resources & Related

Additional Notes

ฟังก์ชัน Table.ExpandRecordColumn ใช้สำหรับขยายคอลัมน์ที่มีข้อมูลประเภท Record ออกเป็นหลายคอลัมน์แยกกัน โดยแต่ละฟิลด์ใน Record จะกลายเป็นคอลัมน์ใหม่ในตาราง เหมาะสำหรับแปลงข้อมูลแบบ nested structure ให้เป็นตารางแบน

Leave a Reply

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