Table.Transpose จะกลับด้านตาราง คล้ายกับการ Copy > Paste Special > Transpose ใน Excel โดยข้อมูลในแถวที่ 1 จะกลายเป็นคอลัมน์ที่ 1 แถวที่ 2 เป็นคอลัมน์ที่ 2 ไปเรื่อยๆ
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| table | table | ตารางที่ต้องการสลับแกน (ต้องส่งเป็น table type) | |
| [columns]ไม่บังคับ | any | null | พารามิเตอร์ทางเลือก (ไม่ค่อยได้ใช้) ใช้เพื่อกำหนดว่าจะ Transpose เฉพาะคอลัมน์บางตัวหรือไม่ ส่วนใหญ่ปล่อยไว้เป็น null |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
Table.Transpose (table, optional columns) ใช้สำหรับสลับแกนตาราง โดยแถวกลายเป็นคอลัมน์ และคอลัมน์กลายเป็นแถว เหมือน Copy > Paste Special > Transpose ใน Excel นั่นแหละ
ที่เจ๋งคือ Transpose มีประโยชน์มากเวลาข้อมูลมาผิดโครงสร้าง เช่นชื่อข้อมูลอยู่คอลัมน์แรก แต่มันควรจะเป็นแถว หรือค่า Key-Value ที่ต้องการแสดงตามคอลัมน์แทนแถว ก็ Transpose เลย แล้วปรับ Header ด้วย PromoteHeaders ตามมา จบเรื่องนั้น!
ส่วนตัวผม Transpose นี่ใช้น้อยมากในโปรเจคจริง แต่มันมีความสุข (joy of BI) ที่เมื่อเจอข้อมูลผิดรูป แล้ว Transpose ได้อย่างแม่นยำ พอขาดแบบนี้นะ จำได้ไหมตอนมี Excel ต้องใช้เมาส์โยนแถวปะคอลัมน์ 555 😎
เมื่อข้อมูลถูกเก็บในแนวนอน (เช่น เดือนเป็นคอลัมน์) ต้องการหมุนกลับมาเป็นแนวตั้งเพื่อ Unpivot หรือใช้งานต่อ
บางรายงานมี Header อยู่ในคอลัมน์แรก (Row Header) ต้อง Transpose เพื่อให้ไปอยู่แถวบนสุดก่อน Promote Headers
ข้อมูลตั้งแต่ 2 แถว 3 คอลัมน์ เปลี่ยนเป็น 3 แถว 3 คอลัมน์ เมืองและค่า Q1 Q2 เดิมกลายเป็นแถวแรกของผลลัพธ์
หลังจาก Transpose เลื่อนแถวแรกขึ้นเป็น Header ทำให้ข้อมูลอ่านง่ายขึ้นเยอะ ตอนนี้เมืองเป็นชื่อคอลัมน์แล้ว
ทีแรก Demote เพื่อให้ Header (Name, Age) กลายเป็นข้อมูลแถวแรก แล้วค่อย Transpose จะได้เก็บข้อมูลชื่อเดิมไว้ในผลลัพธ์
ตัวอย่างนี้คล้ายการแปลง Pivot Table ที่มา Rotated (ต้อง Unpivot) ข้อมูลกลับเป็นรูปแบบยาวเพื่อให้ Power BI อ่านถูก ทดแทนที่ต้องใช้ Unpivot Column ด้วย
ใช่ครับ เมื่อ Transpose ชื่อคอลัมน์เดิมจะหายไป และ Power Query จะสร้างชื่อคอลัมน์ใหม่ (Column1, Column2…) ให้แทน ถ้าต้องการเก็บชื่อคอลัมน์เดิมเป็นข้อมูล ต้องใช้ Table.DemoteHeaders ก่อน Transpose จากนั้นค่อย Table.PromoteHeaders เพื่อยกแถวแรกขึ้นเป็น Header ใหม่
ส่วนใหญ่ใช้เมื่อข้อมูลมาในรูปแบบ Key-Value หรือ Wide Format ที่ต้องแปลงเป็น Long Format ให้อ่านง่ายขึ้น หรือเวลาได้ข้อมูลแล้วแถวกับคอลัมน์สลับกัน ก็ Transpose เลย มันช่วยอะไรก็ไม่มีแต่ใช้น้อย เพราะส่วนใหญ่ข้อมูลประมาณนี้อยู่แล้ว
เพราะ Transpose เมื่อสลับแถวกับคอลัมน์ Header เดิมจะหายไป ถ้าต้องการเก็บข้อมูล Header ต้องลดระดับเป็นข้อมูลแถวก่อนด้วย DemoteHeaders ทำให้สามารถ Transpose ได้สมบูรณ์
พารามิเตอร์ columns นี่เป็นทางเลือกขั้นสูง ใช้เพื่อระบุคอลัมน์ที่ต้องการ Transpose โดยปล่อยคอลัมน์อื่นไว้ ในทางปฏิบัติ 99% คนใช้ Table.Transpose โดยส่งแค่ parameter แรก (table) ตัว columns มักจะ null หรือไม่ส่ง
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.Transpose จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.FromRows สร้างตารางจาก List ของ List โดยแต่ละ List ย่อยแทนข้อมูลในแถวหนึ่ง คล้ายกับการ transpose ข้อมูลแบบแถว-คอลัมน์ แต่ทำให้เป็นตารางจริงในทันที
Table.Pivot แปลงข้อมูล long format (แนวตั้ง) เป็น wide format (แนวนอน) โดยหมุนค่า attribute ให้เป็นคอลัมน์ใหม่
Table.PromoteHeaders เลื่อนข้อมูลในแถวแรกของตารางขึ้นมาเป็นชื่อคอลัมน์ และลบแถวนั้นออกจากส่วนข้อมูล รองรับพารามิเตอร์เสริม options เป็น record ที่มีฟิลด์ PromoteAllScalars สำหรับอนุญาตให้ค่าที่ไม่ใช่ข้อความ เช่น ตัวเลขและวันที่ ถูกแปลงเป็นชื่อคอลัมน์ได้ และ Culture สำหรับกำหนดรูปแบบการแปลงค่าตามภูมิภาค
.
ที่เจ๋งคือ PromoteAllScalars=true ช่วยให้หัวตารางที่เป็นตัวเลขหรือวันที่ก็ใช้ได้ ไม่ติดว่าต้องเป็นข้อความอย่างเดียว
Table.Unpivot แปลงคอลัมน์ที่ระบุให้กลายเป็นแถว (Unpivot) โดยสร้าง 2 คอลัมน์ใหม่ คอลัมน์แรกเก็บชื่อคอลัมน์เดิม (Attribute) และคอลัมน์ที่สองเก็บค่า (Value) ฟังก์ชันนี้จะข้ามค่า null โดยอัตโนมัติ เหมาะสำหรับเตรียมข้อมูลแบบ Wide Format ให้กลายเป็น Long Format สำหรับใช้ใน Power BI หรือ Pivot Table
Table.UnpivotOtherColumns แปลงคอลัมน์ที่ไม่ได้ระบุทั้งหมดให้กลายเป็นแถว (Unpivot) โดยระบุเฉพาะคอลัมน์ที่ต้องการคงไว้ ข้อดีคือเป็น Dynamic ถ้ามีคอลัมน์ใหม่เพิ่มเข้ามาในอนาคตก็จะถูก Unpivot ให้อัตโนมัติ เหมาะสำหรับแปลงข้อมูลจาก Wide Format (หลายคอลัมน์) ให้เป็น Long Format (หลายแถว) สำหรับ PivotTable และ Database
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่