Thep Excel

Table.TransformColumnNamesแปลงชื่อคอลัมน์ด้วยฟังก์ชัน

Table.TransformColumnNames ใช้ฟังก์ชันแปลงชื่อ (Name Generator) เพื่อเปลี่ยนชื่อคอลัมน์ทั้งหมดในตาราง เหมาะสำหรับจัดรูปแบบชื่อคอลัมน์เป็นแบบเดียวกัน เช่น ตัวพิมพ์ใหญ่ ลบช่องว่าง หรือเพิ่ม Prefix

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

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

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table table ตารางที่ต้องการแปลงชื่อคอลัมน์
nameGenerator function ฟังก์ชันที่รับชื่อคอลัมน์เก่า (แทนด้วย _ หรือตัวแปรอื่น) และส่งคืนชื่อใหม่
[options]ไม่บังคับ record null ตัวเลือก (optional) เช่น MaxLength สำหรับจำกัดความยาวชื่อคอลัมน์ หรือ Comparer สำหรับการเปรียบเทียบ

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

Additional Notes

Table.TransformColumnNames คือฟังก์ชันจัดรูปแบบชื่อคอลัมน์ที่ใช้ฟังก์ชัน nameGenerator เพื่อแปลงชื่อแต่ละชื่อ ซึ่งแตกต่างจาก Table.RenameColumns ตรงที่มันแปลงชื่อ ‘ทั้งหมด’ โดยใช้ฟังก์ชัน เหมาะกับการจัดรูปแบบแบบเป็นไปทั่วทั้งตาราง

ที่เจ๋งคือสามารถใช้ฟังก์ชันใดก็ได้ตราบเท่าที่รับชื่อเดิมและส่งคืนชื่อใหม่ เช่น Text.Upper, Text.Lower, Text.Replace, หรือแม้แต่ฟังก์ชันที่สร้างเอง ทำให้มีความยืดหยุ่นสูง

ส่วนตัวผมใช้บ่อยมากเวลาข้อมูลเข้ามาจากหลายแหล่ง (API, CSV, Excel) ที่ชื่อคอลัมน์ไม่สม่ำเสมอ – บางที่เป็น UPPERCASE บางที่ mIxEdCasE บางที่มีช่องว่าง ประมาณนี้ต้องใช้ Table.TransformColumnNames เลย 😎

How it works

แปลงชื่อคอลัมน์เป็นตัวพิมพ์ใหญ่ทั้งหมด

เพื่อสร้างมาตรฐานชื่อคอลัมน์ที่ชัดเจนและสอดคล้องกัน

ลบอักขระพิเศษออกจากชื่อคอลัมน์

เช่น ลบเครื่องหมายวรรคตอน หรือสัญลักษณ์ที่ไม่ต้องการออกจากชื่อคอลัมน์

เพิ่ม Prefix/Suffix ให้ชื่อคอลัมน์

เช่น เพิ่ม 'Data_' นำหน้าชื่อคอลัมน์ทั้งหมด

Examples

ตัวอย่างที่ 1: แปลงชื่อคอลัมน์เป็นตัวพิมพ์ใหญ่ทั้งหมดlet Source = Table.FromRecords({{"firstName", "lastName", "email"}}, {"First Name", "Last Name", "Email"}), Transformed = Table.TransformColumnNames(Source, eac…

ใช้ Text.Upper กับชื่อคอลัมน์แต่ละชื่อ (แทนด้วย _) เพื่อแปลงเป็นตัวพิมพ์ใหญ่ทั้งหมด เมื่อไปทำ Report ต้องให้หน้าตาเหมือน 'OFFICIAL' แบบนี้

fx
let
Source = Table.FromRecords({{"firstName", "lastName", "email"}}, {"First Name", "Last Name", "Email"}),
Transformed = Table.TransformColumnNames(Source, each Text.Upper(_))
in
Transformed

ผลลัพธ์[First Name, Last Name, Email] → [FIRST NAME, LAST NAME, EMAIL]
ตัวอย่างที่ 2: ลบช่องว่างในชื่อคอลัมน์let Source = Table.FromRecords({{1, 2}}, {"First Name", "Last Name"}), Transformed = Table.TransformColumnNames(Source, each Text.Replace(_, " ", "")) in Transf…

ใช้ Text.Replace เพื่อลบช่องว่างทั้งหมด มีประโยชน์มากเวลาต้อง Merge กับข้อมูลอื่นที่ชื่อคอลัมน์ไม่มีช่องว่าง

fx
let
Source = Table.FromRecords({{1, 2}}, {"First Name", "Last Name"}),
Transformed = Table.TransformColumnNames(Source, each Text.Replace(_, " ", ""))
in
Transformed

ผลลัพธ์[First Name, Last Name] → [FirstName, LastName]
ตัวอย่างที่ 3: เพิ่ม Prefix ให้กับชื่อคอลัมน์let Source = Table.FromRecords({{1, 2}}, {"Amount", "Date"}), Transformed = Table.TransformColumnNames(Source, each "DIM_" & _) in Transformed

เพิ่มคำว่า "DIM_" นำหน้าชื่อคอลัมน์ทั้งหมด เนื่องจากต้อง Follow ชื่อตามมาตรฐาน Star Schema หรือ Naming Convention บางที่ 555

fx
let
Source = Table.FromRecords({{1, 2}}, {"Amount", "Date"}),
Transformed = Table.TransformColumnNames(Source, each "DIM_" & _)
in
Transformed

ผลลัพธ์[Amount, Date] → [DIM_Amount, DIM_Date]
ตัวอย่างที่ 4: ลบอักขระพิเศษและแปลงเป็น PascalCaselet Source = Table.FromRecords({{1, 2}}, {"Order-ID_123", "Customer@Name"}), Transformed = Table.TransformColumnNames(Source, each Text.Replace(Text.Replace(Tex…

ลบอักขระพิเศษ (-_@) เพื่อให้ชื่อคอลัมน์เป็นตัวอักษรและตัวเลขเท่านั้น ก่อนที่จะใช้ในการเขียน DAX หรือ M Code

fx
let
Source = Table.FromRecords({{1, 2}}, {"Order-ID_123", "Customer@Name"}),
Transformed = Table.TransformColumnNames(Source,
each Text.Replace(Text.Replace(Text.Replace(_, "-", ""), "_", ""), "@", ""))
in
Transformed

ผลลัพธ์[Order-ID_123, Customer@Name] → [OrderID123, CustomerName]

FAQs

Table.TransformColumnNames ต่างจาก Table.RenameColumns อย่างไร?+

Table.TransformColumnNames แปลงชื่อ 'ทั้งหมด' ด้วยฟังก์ชัน เหมาะงาน Mass Transformation เช่น ลบช่องว่างหรือแปลงเป็นตัวพิมพ์ใหญ่ทั้งตาราง ส่วน Table.RenameColumns เปลี่ยนชื่อเฉพาะคอลัมน์ที่ระบุชื่อเก่า-ใหม่เท่านั้น ผมแนะนำให้ใช้ TransformColumnNames เวลาต้องจัดรูปแบบเป็นแบบเดียวกัน แต่ RenameColumns ตอนเปลี่ยนชื่อคอลัมน์เฉพาะ 1-2 คอลัมน์

_ (underscore) มีความหมายอย่างไร?+

_ คือ 'ตัวแทน' (placeholder) สำหรับชื่อคอลัมน์เดิม ตอนเขียน each Text.Upper(_) มันจะเอาชื่อแต่ละคอลัมน์มา Replace ตัว _ แล้วส่งไปให้ Text.Upper ทำงาน ผมเคยนึกว่า _ มีความหมายตรงนั้นไม่ได้ เลยสับสนสำหรับตอนแรก 😅 แต่พอเข้าใจแล้ว มันก็ง่ายมาก

ถ้า nameGenerator ฟังก์ชันให้ชื่อซ้ำกันหรือเหมือนชื่อเดิม จะเกิดอะไร?+

ถ้าชื่อซ้ำกันแล้ว Power Query จะโยน Error เพราะคอลัมน์ต้องมีชื่อไม่ซ้ำกัน ถ้าให้ชื่อเหมือนเดิม มันก็จะผ่านนะ (ไม่มีการเปลี่ยนแปลง) ผมแนะนำให้เทสด้วย Table.ColumnNames(Source) ก่อน เพื่อดูว่าชื่อใหม่จะออกมาแบบไหน

ใช้ฟังก์ชันแบบซ้อนกันได้มั้ย?+

ได้สิครับ! เช่น each Text.Upper(Text.Trim(Text.Replace(_, " ", "_"))) ก็ได้ แต่ถ้ามันเยอะเกินไป ผมแนะนำให้เขียน Custom Function ทำไว้ก่อน แล้วใช้ function นั้นใน nameGenerator แทน จะดูสะอาดและ Maintainable ขึ้นเยอะ

Resources & Related

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

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

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

Table.RenameColumns

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

Table.SelectColumns

Table.SelectColumns ใช้สำหรับเลือกคอลัมน์เฉพาะจากตารางและสร้างตารางใหม่ที่มีเฉพาะคอลัมน์เหล่านั้น

Text functions (3)
Text.Lower

Text.Lower ใช้แปลงอักขระทั้งหมดในข้อความให้เป็นตัวพิมพ์เล็ก (lowercase) ช่วยให้ข้อมูลมีรูปแบบสอดคล้องกัน สามารถกำหนด Culture เพื่อให้การแปลงเป็นไปตามกฎของภาษาและภูมิภาคที่ต้องการ

Text.Replace

Text.Replace ใช้สำหรับแทนที่ทุกส่วนของข้อความเก่าในข้อความหลักด้วยข้อความใหม่ เป็น Case Sensitive และแทนที่ทีละครั้งที่เจอในข้อความทั้งหมด

Text.Upper

Text.Upper แปลงอักขระทั้งหมดในข้อความเป็นตัวอักษรใหญ่ โดยรองรับการตั้งค่า culture ต่างๆ เพื่อจัดการการแปลงที่ถูกต้องตามภาษา

Comments

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