Table.PromoteHeaders เลื่อนข้อมูลในแถวแรกของตารางขึ้นมาเป็นชื่อคอลัมน์ และลบแถวนั้นออกจากส่วนข้อมูล รองรับพารามิเตอร์เสริม options เป็น record ที่มีฟิลด์ PromoteAllScalars สำหรับอนุญาตให้ค่าที่ไม่ใช่ข้อความ เช่น ตัวเลขและวันที่ ถูกแปลงเป็นชื่อคอลัมน์ได้ และ Culture สำหรับกำหนดรูปแบบการแปลงค่าตามภูมิภาค
.
ที่เจ๋งคือ PromoteAllScalars=true ช่วยให้หัวตารางที่เป็นตัวเลขหรือวันที่ก็ใช้ได้ ไม่ติดว่าต้องเป็นข้อความอย่างเดียว
=Table.PromoteHeaders(table as table, optional options as nullable record) as table
=Table.PromoteHeaders(table as table, optional options as nullable record) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตารางข้อมูลที่ต้องการเลื่อนแถวแรกขึ้นเป็นส่วนหัว | |
| options | nullable record | Optional | null | Record ที่มีฟิลด์ PromoteAllScalars (true/false) สำหรับอนุญาตทุกประเภทข้อมูล และ Culture (เช่น “en-US”) สำหรับกำหนดรูปแบบการแปลง |
เมื่อนำเข้าไฟล์ข้อมูล แถวแรกมักเป็นชื่อคอลัมน์ แต่ Power Query อาจมองเป็นข้อมูลธรรมดา ใช้ฟังก์ชันนี้เพื่อเลื่อนแถวแรกขึ้นเป็นหัวตารางอย่างถูกต้อง
เมื่อใช้ Table.Transpose สลับแถวเป็นคอลัมน์ แถวแรกของผลลัพธ์มักจะเป็นส่วนหัวที่ต้องการ ใช้ Table.PromoteHeaders ตามหลังเพื่อจัดรูปแบบให้ถูกต้อง
เมื่อหัวตารางเป็นปี ค.ศ. (2020, 2021, 2022) หรือวันที่ ใช้ [PromoteAllScalars=true] เพื่อให้ Power Query แปลงค่าเหล่านี้เป็นชื่อคอลัมน์ได้
let Source = Table.FromRecords({ [Column1 = "CustomerID", Column2 = "Name", Column3 = "Age"], [Column1 = 1, Column2 = "Bob", Column3 = 25], [Column1 = 2, Column…let
Source = Table.FromRecords({
[Column1 = "CustomerID", Column2 = "Name", Column3 = "Age"],
[Column1 = 1, Column2 = "Bob", Column3 = 25],
[Column1 = 2, Column2 = "Alice", Column3 = 30]
}),
Promoted = Table.PromoteHeaders(Source)
in
Promoted
Table: {[CustomerID=1, Name="Bob", Age=25], [CustomerID=2, Name="Alice", Age=30]}
let Source = Table.FromRecords({ [Column1 = 1, Column2 = "Name", Column3 = #date(2024, 1, 1)], [Column1 = 101, Column2 = "Bob", Column3 = #date(2024, 6, 15)], […let
Source = Table.FromRecords({
[Column1 = 1, Column2 = "Name", Column3 = #date(2024, 1, 1)],
[Column1 = 101, Column2 = "Bob", Column3 = #date(2024, 6, 15)],
[Column1 = 102, Column2 = "Alice", Column3 = #date(2024, 7, 20)]
}),
Promoted = Table.PromoteHeaders(Source, [PromoteAllScalars = true])
in
Promoted
Table: {[1=101, Name="Bob", #"1/1/2024"=#date(2024,6,15)], ...}
let Source = Table.FromRecords({ [Rank = 1, Name = "Name", StartDate = #date(2024, 3, 15)], [Rank = 1, Name = "Bob", StartDate = #date(2024, 6, 20)] }), Promote…let
Source = Table.FromRecords({
[Rank = 1, Name = "Name", StartDate = #date(2024, 3, 15)],
[Rank = 1, Name = "Bob", StartDate = #date(2024, 6, 20)]
}),
Promoted = Table.PromoteHeaders(Source, [PromoteAllScalars = true, Culture = "en-US"])
in
Promoted
Table: {[1=1, Name="Bob", #"3/15/2024"=#date(2024,6,20)]}
let Source = Table.FromRecords({ [Metric = "Revenue", Q1 = 1000, Q2 = 1200], [Metric = "Cost", Q1 = 800, Q2 = 900] }), Transposed = Table.Transpose(Source), Pro…let
Source = Table.FromRecords({
[Metric = "Revenue", Q1 = 1000, Q2 = 1200],
[Metric = "Cost", Q1 = 800, Q2 = 900]
}),
Transposed = Table.Transpose(Source),
Promoted = Table.PromoteHeaders(Transposed)
in
Promoted
Table: {[Revenue=1000, Cost=800], [Revenue=1200, Cost=900]}
เป็นฟังก์ชันเดียวกัน เมื่อคลิกปุ่ม Use First Row as Headers ใน Power Query Editor จะสร้าง step ที่เรียกใช้ฟังก์ชัน Table.PromoteHeaders โดยอัตโนมัติ
คอลัมน์ที่มีค่าว่างในแถวแรกจะได้ชื่อเป็น Column1, Column2, Column3 ฯลฯ แทน ไม่ใช้ค่าว่างเป็นชื่อคอลัมน์
.
ถ้าต้องการเปลี่ยนชื่อคอลัมน์ ให้ใช้ Table.RenameColumns ตามหลังครับ
ใช้เมื่อหัวตารางมีค่าที่ไม่ใช่ข้อความ เช่น ปี ค.ศ. (2020, 2021, 2022) หรือวันที่ครับ
.
โดย default Table.PromoteHeaders จะ promote เฉพาะข้อความและตัวเลขเท่านั้น ถ้าต้องการให้ทุกประเภทข้อมูลถูกแปลงเป็นชื่อคอลัมน์ ต้องตั้ง PromoteAllScalars=true
ทำได้ แต่ไม่แนะนำครับ เพราะแต่ละครั้งจะเลื่อนแถวแรกขึ้นเป็น header ทำให้ข้อมูลหายไป 😭
.
ควรใช้ครั้งเดียวหลังจากนำเข้าข้อมูลหรือ transform ให้ได้รูปแบบที่ต้องการแล้ว
Excel.Workbook useHeaders ทำงานตอนนำเข้าไฟล์ Excel โดยอัตโนมัติ ส่วน Table.PromoteHeaders เป็น transformation step ที่ทำกับตารางใดก็ได้ใน Power Query
.
ส่วนตัวผมแนะนำให้ใช้ Table.PromoteHeaders แทน useHeaders เพราะปลอดภัยกว่า (ไม่มีปัญหา culture conversion) และควบคุมได้มากกว่าครับ 💡
Table.PromoteHeaders ใน Power Query ใช้สำหรับเลื่อนข้อมูลในแถวแรกของตารางขึ้นไปเป็นหัวคอลัมน์
.
เคยเจอมั้ยครับว่า… พอนำเข้าไฟล์ Excel หรือ CSV แล้วหัวตารางมันยังอยู่ในส่วนข้อมูล? ฟังก์ชันนี้มันเกิดมาแก้ปัญหานี้แหละครับ 😎