Thep Excel

Table.ExpandListColumnขยาย List เป็นหลายแถว

Table.ExpandListColumn ใช้สำหรับขยายคอลัมน์ที่เก็บข้อมูลแบบ List ให้เป็นแถวแยก โดยแต่ละรายการใน List จะกลายเป็นแถวใหม่ ส่วนข้อมูลในคอลัมน์อื่นจะถูกทำซ้ำตามจำนวน

fx
=Table.ExpandListColumn(table, column) as table

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

อัปเดต 6 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางที่ต้องการขยายคอลัมน์ที่เป็น List
column text ชื่อคอลัมน์ (ในรูป Text) ที่เก็บข้อมูลแบบ List ที่ต้องการขยาย

Additional Notes

Table.ExpandListColumn ใช้สำหรับขยายคอลัมน์ที่มีข้อมูลแบบ List ให้เป็นหลายแถว โดยแต่ละรายการใน List จะกลายเป็นแถวแยก ข้อมูลในคอลัมน์อื่นๆ จะถูกทำซ้ำตามจำนวนรายการในแต่ละ List

ที่เจ๋งคือถ้าเจอ null หรือ List ว่าง มันจะ convert เป็น null แถวเดียว ไม่ใช่ลบทิ้ง ซึ่งช่วยให้เราไม่สูญเสียข้อมูล

ส่วนตัวผมใช้ฟังก์ชันนี้บ่อยมากตอนต้องจัดการ JSON หรือ API response ที่มีข้อมูล List ซ้อนอยู่ โดยปกติจะใช้คู่กับ Table.ExpandRecordColumn เพื่อ”ระเบิด”ข้อมูลซ้อนกันหลายชั้น 😎

How it works

จัดการข้อมูล JSON Array ที่ Import เข้ามา

จัดการข้อมูล JSON Array ที่ Import เข้ามา

แตกข้อมูล Tags หรือ Categories ที่อยู่ในช่องเดียวกัน

แตกข้อมูล Tags หรือ Categories ที่อยู่ในช่องเดียวกัน

เตรียมข้อมูลสำหรับการวิเคราะห์รายรายการย่อย

เตรียมข้อมูลสำหรับการวิเคราะห์รายรายการย่อย

Examples

ขยาย List พื้นฐานlet Source = #table( {"ProductID", "Tags"}, {{1, {"Electronics", "Gadgets"}}, {2, {"Home"}}, {3, {"Kitchen", "Appliances", "Useful"}}} ), Expanded = Table.Expan…

แต่ละ Tag จาก List จะกลายเป็นแถวใหม่ โดย ProductID จะถูกทำซ้ำให้ตรงกับจำนวน Tag ในแต่ละแถว

fx
let
Source = #table(
{"ProductID", "Tags"},
{{1, {"Electronics", "Gadgets"}}, {2, {"Home"}}, {3, {"Kitchen", "Appliances", "Useful"}}}
),
Expanded = Table.ExpandListColumn(Source, "Tags")
in
Expanded

ผลลัพธ์ProductID | Tags
1 | Electronics
1 | Gadgets
2 | Home
3 | Kitchen
3 | Appliances
3 | Useful
จัดการกับ null และ Empty Listlet Source = #table( {"Name", "Hobbies"}, {{"Alice", {"Reading", "Gaming"}}, {"Bob", null}, {"Charlie", {}}} ), Expanded = Table.ExpandListColumn(Source, "Hobbi…

ค่า null จะยังคงอยู่ (ไม่หายไป) ส่วน List ว่าง {} จะกลายเป็น null หนึ่งแถว หลีกเลี่ยงการสูญเสียแถวข้อมูล

fx
let
Source = #table(
{"Name", "Hobbies"},
{{"Alice", {"Reading", "Gaming"}}, {"Bob", null}, {"Charlie", {}}}
),
Expanded = Table.ExpandListColumn(Source, "Hobbies")
in
Expanded

ผลลัพธ์Name | Hobbies
Alice | Reading
Alice | Gaming
Bob | null
Charlie | null
ขยาย List of Records พร้อม ExpandRecordColumnlet Source = #table( {"OrderID", "Items"}, {{ 1, {[ProductName = "Laptop", Qty = 1], [ProductName = "Mouse", Qty = 2]} }} ), ExpandList = Table.ExpandListColumn…

ก่อนอื่นขยาย List ให้เป็นแถว จากนั้นขยาย Record ซ้อนอยู่ด้านใน สำหรับจัดการข้อมูลแบบ Nested ที่มีหลายชั้น

fx
let
Source = #table(
{"OrderID", "Items"},
{{
1,
{[ProductName = "Laptop", Qty = 1], [ProductName = "Mouse", Qty = 2]}
}}
),
ExpandList = Table.ExpandListColumn(Source, "Items"),
ExpandRecord = Table.ExpandRecordColumn(ExpandList, "Items", {"ProductName", "Qty"})
in
ExpandRecord

ผลลัพธ์OrderID | ProductName | Qty
1 | Laptop | 1
1 | Mouse | 2
ขยายหลายคอลัมน์แบบ Sequentiallet Source = #table( {"ID", "Colors", "Sizes"}, {{ 1, {"Red", "Blue"}, {"S", "M", "L"} }} ), ExpandColors = Table.ExpandListColumn(Source, "Colors"), ExpandSize…

ขยายคอลัมน์ Colors ก่อน จากนั้นขยาย Sizes ทำให้ได้ Cartesian Product ของ Color × Size Combination

fx
let
Source = #table(
{"ID", "Colors", "Sizes"},
{{
1,
{"Red", "Blue"},
{"S", "M", "L"}
}}
),
ExpandColors = Table.ExpandListColumn(Source, "Colors"),
ExpandSizes = Table.ExpandListColumn(ExpandColors, "Sizes")
in
ExpandSizes

ผลลัพธ์ID | Colors | Sizes
1 | Red | S
1 | Red | M
1 | Red | L
1 | Blue | S
1 | Blue | M
1 | Blue | L

FAQs

ทำไมถึงมี null แถวเพิ่มเติมตอนมี empty list?+

นี่เป็นการป้องกันการสูญเสียแถว ถ้า List ว่าง ฟังก์ชันจะสร้าง null แถวหนึ่ง เพื่อไม่ให้หายไปทั้งแถว ส่วนตัวผมชอบจุดนี้เพราะไม่ต้องกังวลว่าจะหาที่ไปของข้อมูล 😎

ถ้าต้องการขยายหลายคอลัมน์พร้อมกันทำไง?+

ต้องทำแบบ Sequential (ทีละคอลัมน์) ไม่มีวิธีขยายหลายคอลัมน์พร้อมกันในครั้งเดียว ส่วนตัวผมแนะนำให้สร้าง Step แยกสำหรับแต่ละการขยาย ทำให้อ่านและ Debug ง่ายขึ้น

ใช้กับ Table.ExpandRecordColumn ยังไง?+

ใช้ Table.ExpandListColumn ก่อน (เพื่อขยาย List) แล้วตามด้วย Table.ExpandRecordColumn (เพื่อแตกผ้าของ Record) นี่คือเทคนิคทั่วไปสำหรับจัดการ Nested Data

ถ้า List มีค่าเดียวจะแตกออกไหม?+

ไม่แตก เพราะมีค่าเดียวอยู่แล้ว หากต้องการเพิ่มแถว ต้องให้ List มี 2 รายการขึ้นไป

Resources & Related

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

ฟังก์ชันนี้Table.ExpandListColumnTable functions
Table functions (4)
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.ExpandTableColumn

Table.ExpandTableColumn ใช้แตกข้อมูลจากคอลัมน์ที่เป็น nested table ออกมาเป็นคอลัมน์และแถวปกติในตารางหลัก โดยรักษาข้อมูลคอลัมน์อื่นไว้ และทำซ้ำแถวหลักสำหรับแต่ละแถวในตารางซ้อน มักใช้คู่กับ Table.NestedJoin หลัง join ตาราง หรือใช้ขยายข้อมูลจากแหล่งที่มีโครงสร้างแบบ hierarchical เช่น JSON หรือ API

Table.NestedJoin

Table.NestedJoin เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด และสร้างคอลัมน์ใหม่ที่เก็บตารางย่อยของแถวที่จับคู่ได้ เหมาะกับงาน Merge ที่ต้องการเก็บรายละเอียดฝั่งขวาไว้เป็น nested table ก่อนจะ Expand หรือทำขั้นตอนต่อ

Table.SelectRows

Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่

List functions (1)
List.TransformMany

List.TransformMany ประมวลผลข้อมูลและคืนค่าผลลัพธ์ ใช้สำหรับการจัดการข้อมูล การแปลงข้อมูล และการวิเคราะห์

Comments

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