Thep Excel

Table.PromoteHeadersเลื่อนแถวแรกเป็นหัวตาราง

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

fx
=Table.PromoteHeaders(table, [options]) as table

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

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table table ตารางข้อมูลที่ต้องการเลื่อนแถวแรกขึ้นเป็นส่วนหัว
[options]ไม่บังคับ nullable record null Record ที่มีฟิลด์ PromoteAllScalars (true/false) สำหรับอนุญาตทุกประเภทข้อมูล และ Culture (เช่น “en-US”) สำหรับกำหนดรูปแบบการแปลง

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

Table.PromoteHeaders ใน Power Query ใช้สำหรับเลื่อนข้อมูลในแถวแรกของตารางขึ้นไปเป็นหัวคอลัมน์
.
เคยเจอมั้ยครับว่า… พอนำเข้าไฟล์ Excel หรือ CSV แล้วหัวตารางมันยังอยู่ในส่วนข้อมูล? ฟังก์ชันนี้มันเกิดมาแก้ปัญหานี้แหละครับ 😎

How it works

จัดการไฟล์ Excel และ CSV ที่นำเข้า

เมื่อนำเข้าไฟล์ข้อมูล แถวแรกมักเป็นชื่อคอลัมน์ แต่ Power Query อาจมองเป็นข้อมูลธรรมดา ใช้ฟังก์ชันนี้เพื่อเลื่อนแถวแรกขึ้นเป็นหัวตารางอย่างถูกต้อง

ใช้หลังจากการสลับแกนตาราง (Transpose)

เมื่อใช้ Table.Transpose สลับแถวเป็นคอลัมน์ แถวแรกของผลลัพธ์มักจะเป็นส่วนหัวที่ต้องการ ใช้ Table.PromoteHeaders ตามหลังเพื่อจัดรูปแบบให้ถูกต้อง

จัดการข้อมูลที่มีหัวตารางเป็นตัวเลขหรือวันที่

เมื่อหัวตารางเป็นปี ค.ศ. (2020, 2021, 2022) หรือวันที่ ใช้ [PromoteAllScalars=true] เพื่อให้ Power Query แปลงค่าเหล่านี้เป็นชื่อคอลัมน์ได้

Examples

ตัวอย่างที่ 1: เลื่อน Header พื้นฐาน (ข้อความและตัวเลข)let Source = Table.FromRecords({ [Column1 = "CustomerID", Column2 = "Name", Column3 = "Age"], [Column1 = 1, Column2 = "Bob", Column3 = 25], [Column1 = 2, Column…

เลื่อนแถวแรก (CustomerID, Name, Age) ขึ้นเป็นชื่อคอลัมน์ และลบแถวนั้นออกจากข้อมูล

ค่าที่เป็นข้อความและตัวเลขจะถูก promote โดยอัตโนมัติครับ ไม่ต้องทำอะไรเพิ่ม 😎

fx
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]}
ตัวอย่างที่ 2: Promote ทุกประเภทข้อมูล (PromoteAllScalars)let Source = Table.FromRecords({ [Column1 = 1, Column2 = "Name", Column3 = #date(2024, 1, 1)], [Column1 = 101, Column2 = "Bob", Column3 = #date(2024, 6, 15)], […

ใช้ PromoteAllScalars=true เพื่ออนุญาตให้ทุกประเภทข้อมูล (รวมตัวเลข 1 และวันที่) ถูกแปลงเป็นชื่อคอลัมน์

วันที่จะแปลงเป็นข้อความในรูปแบบ default culture ซึ่งขึ้นอยู่กับการตั้งค่าระบบครับ

fx
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)], …}
ตัวอย่างที่ 3: ระบุ Culture สำหรับ format วันที่let Source = Table.FromRecords({ [Rank = 1, Name = "Name", StartDate = #date(2024, 3, 15)], [Rank = 1, Name = "Bob", StartDate = #date(2024, 6, 20)] }), Promote…

ระบุ Culture="en-US" เพื่อให้วันที่ในหัวตารางถูก format เป็น MM/DD/YYYY (รูปแบบอเมริกัน) แทนรูปแบบ default ของระบบ

เหมาะสำหรับควบคุม format ให้สอดคล้องกับข้อมูลครับ ไม่งั้นบางทีรูปแบบมันอาจจะไม่ตรงกับที่คาดหวังไว้ 😅

fx
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)]}
ตัวอย่างที่ 4: หลังจาก Transpose ตารางlet Source = Table.FromRecords({ [Metric = "Revenue", Q1 = 1000, Q2 = 1200], [Metric = "Cost", Q1 = 800, Q2 = 900] }), Transposed = Table.Transpose(Source), Pro…

หลังจาก Transpose สลับแถวเป็นคอลัมน์ แถวแรกของผลลัพธ์จะเป็น "Revenue", "Cost" ใช้ Table.PromoteHeaders เพื่อเลื่อนขึ้นเป็นชื่อคอลัมน์

Pattern นี้ใช้บ่อยมากในการ pivot ข้อมูลครับ คู่หูกันไปเลย 😎

fx
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]}

FAQs

Table.PromoteHeaders ต่างจากปุ่ม "Use First Row as Headers" ในเมนูอย่างไร?+

เป็นฟังก์ชันเดียวกัน เมื่อคลิกปุ่ม Use First Row as Headers ใน Power Query Editor จะสร้าง step ที่เรียกใช้ฟังก์ชัน Table.PromoteHeaders โดยอัตโนมัติ

ถ้าแถวแรกมีค่าว่าง (null) จะเกิดอะไรขึ้น?+

คอลัมน์ที่มีค่าว่างในแถวแรกจะได้ชื่อเป็น Column1, Column2, Column3 ฯลฯ แทน ไม่ใช้ค่าว่างเป็นชื่อคอลัมน์

ถ้าต้องการเปลี่ยนชื่อคอลัมน์ ให้ใช้ Table.RenameColumns ตามหลังครับ

PromoteAllScalars ใช้เมื่อไร?+

ใช้เมื่อหัวตารางมีค่าที่ไม่ใช่ข้อความ เช่น ปี ค.ศ. (2020, 2021, 2022) หรือวันที่ครับ

โดย default Table.PromoteHeaders จะ promote เฉพาะข้อความและตัวเลขเท่านั้น ถ้าต้องการให้ทุกประเภทข้อมูลถูกแปลงเป็นชื่อคอลัมน์ ต้องตั้ง PromoteAllScalars=true

สามารถใช้ Table.PromoteHeaders หลายครั้งได้ไหม?+

ทำได้ แต่ไม่แนะนำครับ เพราะแต่ละครั้งจะเลื่อนแถวแรกขึ้นเป็น header ทำให้ข้อมูลหายไป 😭

ควรใช้ครั้งเดียวหลังจากนำเข้าข้อมูลหรือ transform ให้ได้รูปแบบที่ต้องการแล้ว

ต่างจาก Excel.Workbook useHeaders parameter อย่างไร?+

Excel.Workbook useHeaders ทำงานตอนนำเข้าไฟล์ Excel โดยอัตโนมัติ ส่วน Table.PromoteHeaders เป็น transformation step ที่ทำกับตารางใดก็ได้ใน Power Query

ส่วนตัวผมแนะนำให้ใช้ Table.PromoteHeaders แทน useHeaders เพราะปลอดภัยกว่า (ไม่มีปัญหา culture conversion) และควบคุมได้มากกว่าครับ 💡

Resources & Related

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

ฟังก์ชันนี้Table.PromoteHeadersTable functions
Table functions (3)
Table.ColumnNames

Table.ColumnNames ดึงชื่อคอลัมน์ทั้งหมดจากตาราง และส่งกลับมาเป็นลิสต์ข้อความ ซึ่งจำเป็นสำหรับการตรวจสอบ schema แบบ dynamic

Table.RenameColumns

Table.RenameColumns ใช้สำหรับเปลี่ยนชื่อคอลัมน์หนึ่งหรือหลายคอลัมน์ในตารางพร้อมกัน โดยส่งผ่าน list ของ rename pairs {ชื่อเก่า, ชื่อใหม่}

Table.Transpose

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

Accessing data functions (1)
Csv.Document

Csv.Document แปลงข้อมูลรูปแบบ CSV (Comma-Separated Values) ให้เป็นตารางข้อมูล (table) ใน Power Query โดยรองรับการกำหนดตัวแบ่งข้อมูล (delimiter), รหัสภาษา (encoding) และโครงสร้างคอลัมน์ (column structure) แบบต่างๆ ได้ตามความต้องการ function นี้สามารถแยกวิเคราะห์ทั้งข้อมูลแบบ binary content ที่ได้จาก File.Contents และข้อความแบบ text string ที่ได้จาก Web.Contents พร้อมจัดการข้อความที่ครอบด้วย quote ตามมาตรฐานสากล CSV standard เหมาะสมสำหรับการนำเข้าไฟล์ CSV จากระบบไฟล์ในเครื่อง (local), ที่อยู่เว็บไซต์ (URL) หรือการตอบกลับจาก API (API response) ที่มีตัวแบ่งข้อมูลแบบกำหนดเอง (custom delimiter), เนื้อหาภาษาต่างประเทศ หรือโครงสร้างพิเศษที่ต้องการการควบคุมเฉพาะ คืนค่าออกมาเป็นตารางที่ทุกคอลัมน์มีประเภทข้อมูลเป็นข้อความ (text type) ควรใช้ร่วมกับ Table.PromoteHeaders เพื่อยกแถวแรกขึ้นเป็นหัวตาราง และ Table.TransformColumnTypes เพื่อแปลงประเภทข้อมูลให้เหมาะสมกับการใช้งาน

Comments

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