Table.Unpivot แปลงคอลัมน์ที่ระบุให้กลายเป็นแถว (Unpivot) โดยสร้าง 2 คอลัมน์ใหม่ คอลัมน์แรกเก็บชื่อคอลัมน์เดิม (Attribute) และคอลัมน์ที่สองเก็บค่า (Value) ฟังก์ชันนี้จะข้ามค่า null โดยอัตโนมัติ เหมาะสำหรับเตรียมข้อมูลแบบ Wide Format ให้กลายเป็น Long Format สำหรับใช้ใน Power BI หรือ Pivot Table
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| table | table | ตารางต้นทางที่ต้องการแปลงข้อมูล |
| pivotColumns | list | List ของชื่อคอลัมน์ที่ต้องการ unpivot (แปลงเป็นแถว) เช่น {“Jan”, “Feb”, “Mar”} |
| attributeColumn | text | ชื่อคอลัมน์ใหม่ที่จะเก็บชื่อคอลัมน์เดิม (Attribute) |
| valueColumn | text | ชื่อคอลัมน์ใหม่ที่จะเก็บค่าข้อมูล (Value) |
Table.Unpivot ใช้สำหรับแปลงข้อมูลจากรูปแบบ Wide (หลายคอลัมน์) ให้เป็นรูปแบบ Long (หลายแถว) โดยจะนำชื่อคอลัมน์ที่ระบุมาเก็บไว้ใน Attribute Column และนำค่าในคอลัมน์เหล่านั้นมาเก็บไว้ใน Value Column
.
ที่เจ๋งคือฟังก์ชันนี้จะ skip ค่า null ออกไปโดยอัตโนมัติ ทำให้ข้อมูลที่ได้สะอาดและพร้อมใช้งานทันที ไม่ต้องมา filter ค่าว่างทีหลังครับ
.
ส่วนตัวผมใช้ Table.Unpivot บ่อยมากตอนต้องเตรียมข้อมูลสำหรับ Power BI หรือทำ Pivot Table เพราะ Data Model ส่วนใหญ่ต้องการข้อมูลแบบ Long Format ถึงจะทำงานได้ดี 😎
แปลงข้อมูลยอดขายรายเดือนที่มีคอลัมน์ Jan, Feb, Mar… ให้กลายเป็นคอลัมน์ Month และ Sales เพื่อใช้ใน Data Model
แปลงข้อมูลที่ออกแบบมาให้อ่านง่าย (Wide Format) ให้อยู่ในรูปแบบที่เหมาะสำหรับ Database หรือ Analysis
แปลงข้อมูลให้อยู่ในรูปแบบ Long Format ก่อนนำไปสร้าง Pivot Table ใน Excel
ตารางเดิมมี 3 แถว 3 คอลัมน์ พอ unpivot แล้วจะได้ 6 แถว 3 คอลัมน์ โดย Region ยังคงอยู่ ส่วนคอลัมน์ Y2022 และ Y2023 ถูกแปลงเป็นแถวใน Year และค่าไปอยู่ใน Sales ครับ
สังเกตว่า Apple-Feb และ Banana-Mar หายไปเพราะเป็น null ที่เจ๋งคือ Table.Unpivot จะ filter ค่า null ออกให้อัตโนมัติ ไม่ต้องมาทำเองทีหลัง 💡
รูปแบบนี้เหมาะสำหรับ Power BI มากครับ เพราะสามารถสร้าง Date Table แยก แล้ว join กับคอลัมน์ Quarter ได้ ทำให้วิเคราะห์แนวโน้มรายไตรมาสได้ง่าย
ทั้ง 2 วิธีให้ผลลัพธ์เหมือนกัน แต่เลือกใช้ต่างกันตามสถานการณ์:
– ใช้ Table.Unpivot เมื่อรู้แน่ชัดว่าคอลัมน์ไหนจะ unpivot (เช่น Jan, Feb, Mar)
– ใช้ Table.UnpivotOtherColumns เมื่อคอลัมน์อาจเพิ่มขึ้นในอนาคต (เช่น มี Apr, May เพิ่มมา) 😎
Table.Unpivot ต้องระบุคอลัมน์ที่จะ unpivot โดยตรง ส่วน Table.UnpivotOtherColumns ต้องระบุคอลัมน์ที่จะ keep ไว้แทน ถ้าข้อมูลมีคอลัมน์เพิ่มมาใหม่บ่อยๆ (เช่น เดือนใหม่) แนะนำใช้ UnpivotOtherColumns ครับ เพราะไม่ต้องมาแก้ code ทุกครั้ง
Table.Unpivot จะข้ามค่า null โดยอัตโนมัติครับ ถ้าต้องการเก็บ null ไว้ด้วย ให้เปลี่ยนค่า null เป็นค่าอื่นก่อน (เช่น 0 หรือ "N/A") ด้วย Table.ReplaceValue แล้วค่อย unpivot
ใช้ฟังก์ชัน Table.Pivot ครับ โดยระบุ Attribute Column เป็นคอลัมน์ที่จะกระจายเป็น header และ Value Column เป็นค่าที่จะใส่ในตาราง ถ้าต้องการ aggregate ค่า ให้ใส่ aggregation function เป็น argument สุดท้าย
ใช้ Table.ReorderColumns หลัง unpivot เพื่อจัดลำดับคอลัมน์ใหม่ได้ครับ เช่น Table.ReorderColumns(Unpivoted, {"ID", "Name", "Attribute", "Value"})
ได้ครับ แต่ค่าใน Value Column จะถูกแปลงเป็น type any ทำให้ต้องมา cast type ใหม่ทีหลัง แนะนำให้ unpivot คอลัมน์ที่มี type เดียวกันจะดีกว่า
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.Unpivot จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.ColumnNames ดึงชื่อคอลัมน์ทั้งหมดจากตาราง และส่งกลับมาเป็นลิสต์ข้อความ ซึ่งจำเป็นสำหรับการตรวจสอบ schema แบบ dynamic
Table.FromRows สร้างตารางจาก List ของ List โดยแต่ละ List ย่อยแทนข้อมูลในแถวหนึ่ง คล้ายกับการ transpose ข้อมูลแบบแถว-คอลัมน์ แต่ทำให้เป็นตารางจริงในทันที
Table.Pivot แปลงข้อมูล long format (แนวตั้ง) เป็น wide format (แนวนอน) โดยหมุนค่า attribute ให้เป็นคอลัมน์ใหม่
Table.Transpose จะกลับด้านตาราง คล้ายกับการ Copy > Paste Special > Transpose ใน Excel โดยข้อมูลในแถวที่ 1 จะกลายเป็นคอลัมน์ที่ 1 แถวที่ 2 เป็นคอลัมน์ที่ 2 ไปเรื่อยๆ
Table.UnpivotOtherColumns แปลงคอลัมน์ที่ไม่ได้ระบุทั้งหมดให้กลายเป็นแถว (Unpivot) โดยระบุเฉพาะคอลัมน์ที่ต้องการคงไว้ ข้อดีคือเป็น Dynamic ถ้ามีคอลัมน์ใหม่เพิ่มเข้ามาในอนาคตก็จะถูก Unpivot ให้อัตโนมัติ เหมาะสำหรับแปลงข้อมูลจาก Wide Format (หลายคอลัมน์) ให้เป็น Long Format (หลายแถว) สำหรับ PivotTable และ Database
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่