กลับไปหน้า Power Query
ทริคPower Query

Pivot กับ Unpivot

พลิกตารางที่หัวเป็นเดือนให้กลายเป็นตารางยาวที่ Power BI ชอบ และพลิกกลับได้

เริ่มอ่านตรงนี้ก่อน

อธิบายแบบง่าย

Pivot กับ Unpivot คือเรื่องที่ช่วยให้เราใช้เชื่อมต่อและทำความสะอาดข้อมูลซ้ำๆ ให้เป็นขั้นตอนก่อนเอาไปทำรายงานได้ถูกทางขึ้น

ระดับ

เหมาะกับคนที่เริ่มลงมือทำแล้ว

ใช้เมื่อไหร่

ไฟล์ที่ได้มาเอาเดือนหรือปีไปเป็นหัวคอลัมน์ ทำให้สร้าง measure ลำบาก

อ่านแล้วทำอะไรต่อ

ตารางมีคอลัมน์ Product, Jan, Feb, Mar เลือก Product ไว้แล้ว Unpivot Other Columns ได้คอลัมน์ Month กับ Amount

เห็นภาพ: ทริคนี้เป็นยังไง

ก่อน: ตารางกว้าง เดือนเป็นหัวคอลัมน์ (สร้าง measure ลำบาก)
Product   Jan    Feb    Mar
--------  -----  -----  -----
A         100    120    90
B         80     75     110
หลัง: Unpivot Other Columns ได้ตารางยาว
= Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount")

Product   Month   Amount
--------  ------  ------
A         Jan     100
A         Feb     120
A         Mar     90
B         Jan     80
B         Feb     75
B         Mar     110
ตารางกว้างที่เอาเดือนเป็นหัวคอลัมน์ พลิกเป็นตารางยาวที่ Power BI และ PivotTable ชอบ

ใช้ตอนไหน?

  • ไฟล์ที่ได้มาเอาเดือนหรือปีไปเป็นหัวคอลัมน์ ทำให้สร้าง measure ลำบาก
  • ต้องการรูปตารางยาว (long format) ก่อนสร้างโมเดลใน Power BI
  • ต้องการพลิกตารางยาวกลับเป็นตารางสรุปแบบกางออกเพื่อนำเสนอ

ความหมาย

Unpivot คือการพลิกตารางที่กางออกกว้าง (เช่น คอลัมน์เป็น ม.ค. ก.พ. มี.ค.) ให้กลายเป็นตารางยาวที่มีคอลัมน์ Attribute และ Value ซึ่งเป็นรูปแบบที่ Power BI และ PivotTable ทำงานด้วยได้ดี ส่วน Pivot คือการพลิกกลับ จากตารางยาวให้กางออกเป็นคอลัมน์

เลือกคอลัมน์ที่จะพลิก

เลือกคอลัมน์ที่เป็น 'มิติ' ไว้ (เช่น Product) แล้วเลือกคอลัมน์เดือนทั้งหมด คลิกขวา > Unpivot Columns เคล็ดลับ: ใช้ Unpivot Other Columns จะทนทานกว่าเมื่อมีคอลัมน์เดือนเพิ่มเข้ามาใหม่

Transform > Unpivot Columns > Unpivot Other Columns
// M ที่ได้:
= Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount")
// พลิกกลับ:
= Table.Pivot(Source, List.Distinct(Source[Month]), "Month", "Amount")

ตัวอย่างการใช้

พลิกตารางยอดขายรายเดือน

ตารางมีคอลัมน์ Product, Jan, Feb, Mar เลือก Product ไว้แล้ว Unpivot Other Columns ได้คอลัมน์ Month กับ Amount

= Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount")