Thep Excel

Table.Transposeสลับแกนตาราง (Transpose)

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

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

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

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table table ตารางที่ต้องการสลับแกน (ต้องส่งเป็น table type)
[columns]ไม่บังคับ any null พารามิเตอร์ทางเลือก (ไม่ค่อยได้ใช้) ใช้เพื่อกำหนดว่าจะ Transpose เฉพาะคอลัมน์บางตัวหรือไม่ ส่วนใหญ่ปล่อยไว้เป็น null

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

Additional Notes

Table.Transpose (table, optional columns) ใช้สำหรับสลับแกนตาราง โดยแถวกลายเป็นคอลัมน์ และคอลัมน์กลายเป็นแถว เหมือน Copy > Paste Special > Transpose ใน Excel นั่นแหละ

ที่เจ๋งคือ Transpose มีประโยชน์มากเวลาข้อมูลมาผิดโครงสร้าง เช่นชื่อข้อมูลอยู่คอลัมน์แรก แต่มันควรจะเป็นแถว หรือค่า Key-Value ที่ต้องการแสดงตามคอลัมน์แทนแถว ก็ Transpose เลย แล้วปรับ Header ด้วย PromoteHeaders ตามมา จบเรื่องนั้น!

ส่วนตัวผม Transpose นี่ใช้น้อยมากในโปรเจคจริง แต่มันมีความสุข (joy of BI) ที่เมื่อเจอข้อมูลผิดรูป แล้ว Transpose ได้อย่างแม่นยำ พอขาดแบบนี้นะ จำได้ไหมตอนมี Excel ต้องใช้เมาส์โยนแถวปะคอลัมน์ 555 😎

How it works

แก้ปัญหาตารางแนวขวาง

เมื่อข้อมูลถูกเก็บในแนวนอน (เช่น เดือนเป็นคอลัมน์) ต้องการหมุนกลับมาเป็นแนวตั้งเพื่อ Unpivot หรือใช้งานต่อ

ย้าย Header ที่อยู่ในแนวตั้ง

บางรายงานมี Header อยู่ในคอลัมน์แรก (Row Header) ต้อง Transpose เพื่อให้ไปอยู่แถวบนสุดก่อน Promote Headers

Examples

ตัวอย่างที่ 1: Transpose ข้อมูลแนวนอน (สลับแถวและคอลัมน์)let Sales = Table.FromRows( {{"Bangkok", 100, 200}, {"Chiang Mai", 150, 250}}, {"City", "Q1", "Q2"} ), Transposed = Table.Transpose(Sales) in Transposed

ข้อมูลตั้งแต่ 2 แถว 3 คอลัมน์ เปลี่ยนเป็น 3 แถว 3 คอลัมน์ เมืองและค่า Q1 Q2 เดิมกลายเป็นแถวแรกของผลลัพธ์

fx
let
Sales = Table.FromRows(
{{"Bangkok", 100, 200}, {"Chiang Mai", 150, 250}},
{"City", "Q1", "Q2"}
),
Transposed = Table.Transpose(Sales)
in
Transposed

ผลลัพธ์ตารางที่มี 3 แถว 2 คอลัมน์ (Column1 และ Column2)
– แถวที่ 1: [Column1 = "City", Column2 = "Bangkok", Column3 = "Chiang Mai"]
– แถวที่ 2: [Column1 = "Q1", Column2 = 100, Column3 = 150]
– แถวที่ 3: [Column1 = "Q2", Column2 = 200, Column3 = 250]
ตัวอย่างที่ 2: Transpose + PromoteHeaders (สลับแล้วตั้งชื่อคอลัมน์)let Sales = Table.FromRows( {{"Bangkok", 100, 200}, {"Chiang Mai", 150, 250}}, {"City", "Q1", "Q2"} ), Transposed = Table.Transpose(Sales), WithHeaders = Table.…

หลังจาก Transpose เลื่อนแถวแรกขึ้นเป็น Header ทำให้ข้อมูลอ่านง่ายขึ้นเยอะ ตอนนี้เมืองเป็นชื่อคอลัมน์แล้ว

fx
let
Sales = Table.FromRows(
{{"Bangkok", 100, 200}, {"Chiang Mai", 150, 250}},
{"City", "Q1", "Q2"}
),
Transposed = Table.Transpose(Sales),
WithHeaders = Table.PromoteHeaders(Transposed)
in
WithHeaders

ผลลัพธ์ตารางมี Header: City, Bangkok, Chiang Mai (ชื่อคอลัมน์ใหม่)
– แถวที่ 1: [City = "Q1", Bangkok = 100, Chiang Mai = 150]
– แถวที่ 2: [City = "Q2", Bangkok = 200, Chiang Mai = 250]
ตัวอย่างที่ 3: DemoteHeaders → Transpose → PromoteHeaders (เก็บ Header เดิม)let Source = Table.FromRows( {{"Fred", 30}, {"Alice", 28}}, {"Name", "Age"} ), Demoted = Table.DemoteHeaders(Source), Transposed = Table.Transpose(Demoted), Res…

ทีแรก Demote เพื่อให้ Header (Name, Age) กลายเป็นข้อมูลแถวแรก แล้วค่อย Transpose จะได้เก็บข้อมูลชื่อเดิมไว้ในผลลัพธ์

fx
let
Source = Table.FromRows(
{{"Fred", 30}, {"Alice", 28}},
{"Name", "Age"}
),
Demoted = Table.DemoteHeaders(Source),
Transposed = Table.Transpose(Demoted),
Restored = Table.PromoteHeaders(Transposed)
in
Restored

ผลลัพธ์ตารางที่มี Header: Fred, Alice
– แถวที่ 1: [Fred = "Name", Alice = "Name"]
– แถวที่ 2: [Fred = 30, Alice = 28]
ตัวอย่างที่ 4: เมนเชน Key-Value Pairs (ใช้ชีวิตจริง)let Attributes = Table.FromRecords({ [Attribute = "Product", January = "Laptop", February = "Laptop", March = "Tablet"], [Attribute = "Price", January = 50000,…

ตัวอย่างนี้คล้ายการแปลง Pivot Table ที่มา Rotated (ต้อง Unpivot) ข้อมูลกลับเป็นรูปแบบยาวเพื่อให้ Power BI อ่านถูก ทดแทนที่ต้องใช้ Unpivot Column ด้วย

fx
let
Attributes = Table.FromRecords({
[Attribute = "Product", January = "Laptop", February = "Laptop", March = "Tablet"],
[Attribute = "Price", January = 50000, February = 45000, March = 15000],
[Attribute = "Stock", January = 10, February = 8, March = 25]
}),
Transposed = Table.Transpose(Attributes),
WithHeaders = Table.PromoteHeaders(Transposed)
in
WithHeaders

ผลลัพธ์ตารางแสดงข้อมูล Product, Price, Stock สำหรับแต่ละเดือน (January, February, March เป็นแถว)
– แถวที่ 1: [Attribute = "Product", Month = "Laptop"]
– แถวที่ 2: [Attribute = "Price", Month = 50000]
– แถวที่ 3: [Attribute = "Stock", Month = 10]

FAQs

ชื่อคอลัมน์จะหายไปไหม?+

ใช่ครับ เมื่อ Transpose ชื่อคอลัมน์เดิมจะหายไป และ Power Query จะสร้างชื่อคอลัมน์ใหม่ (Column1, Column2…) ให้แทน ถ้าต้องการเก็บชื่อคอลัมน์เดิมเป็นข้อมูล ต้องใช้ Table.DemoteHeaders ก่อน Transpose จากนั้นค่อย Table.PromoteHeaders เพื่อยกแถวแรกขึ้นเป็น Header ใหม่

ใช้ Transpose ตรงไหนบ้าง?+

ส่วนใหญ่ใช้เมื่อข้อมูลมาในรูปแบบ Key-Value หรือ Wide Format ที่ต้องแปลงเป็น Long Format ให้อ่านง่ายขึ้น หรือเวลาได้ข้อมูลแล้วแถวกับคอลัมน์สลับกัน ก็ Transpose เลย มันช่วยอะไรก็ไม่มีแต่ใช้น้อย เพราะส่วนใหญ่ข้อมูลประมาณนี้อยู่แล้ว

ทำไมถึงต้อง DemoteHeaders ก่อน Transpose?+

เพราะ Transpose เมื่อสลับแถวกับคอลัมน์ Header เดิมจะหายไป ถ้าต้องการเก็บข้อมูล Header ต้องลดระดับเป็นข้อมูลแถวก่อนด้วย DemoteHeaders ทำให้สามารถ Transpose ได้สมบูรณ์

ตัวอย่าง columns parameter คืออะไร?+

พารามิเตอร์ columns นี่เป็นทางเลือกขั้นสูง ใช้เพื่อระบุคอลัมน์ที่ต้องการ Transpose โดยปล่อยคอลัมน์อื่นไว้ ในทางปฏิบัติ 99% คนใช้ Table.Transpose โดยส่งแค่ parameter แรก (table) ตัว columns มักจะ null หรือไม่ส่ง

Resources & Related

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

ฟังก์ชันนี้Table.TransposeTable functions
Table functions (5)
Table.FromRows

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

Table.Pivot

Table.Pivot แปลงข้อมูล long format (แนวตั้ง) เป็น wide format (แนวนอน) โดยหมุนค่า attribute ให้เป็นคอลัมน์ใหม่

Table.PromoteHeaders

Table.PromoteHeaders เลื่อนข้อมูลในแถวแรกของตารางขึ้นมาเป็นชื่อคอลัมน์ และลบแถวนั้นออกจากส่วนข้อมูล รองรับพารามิเตอร์เสริม options เป็น record ที่มีฟิลด์ PromoteAllScalars สำหรับอนุญาตให้ค่าที่ไม่ใช่ข้อความ เช่น ตัวเลขและวันที่ ถูกแปลงเป็นชื่อคอลัมน์ได้ และ Culture สำหรับกำหนดรูปแบบการแปลงค่าตามภูมิภาค
.
ที่เจ๋งคือ PromoteAllScalars=true ช่วยให้หัวตารางที่เป็นตัวเลขหรือวันที่ก็ใช้ได้ ไม่ติดว่าต้องเป็นข้อความอย่างเดียว

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

Comments

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