Table.TransformColumnNames ใช้ฟังก์ชันแปลงชื่อ (Name Generator) เพื่อเปลี่ยนชื่อคอลัมน์ทั้งหมดในตาราง เหมาะสำหรับจัดรูปแบบชื่อคอลัมน์เป็นแบบเดียวกัน เช่น ตัวพิมพ์ใหญ่ ลบช่องว่าง หรือเพิ่ม Prefix
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| table | table | ตารางที่ต้องการแปลงชื่อคอลัมน์ | |
| nameGenerator | function | ฟังก์ชันที่รับชื่อคอลัมน์เก่า (แทนด้วย _ หรือตัวแปรอื่น) และส่งคืนชื่อใหม่ | |
| [options]ไม่บังคับ | record | null | ตัวเลือก (optional) เช่น MaxLength สำหรับจำกัดความยาวชื่อคอลัมน์ หรือ Comparer สำหรับการเปรียบเทียบ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
Table.TransformColumnNames คือฟังก์ชันจัดรูปแบบชื่อคอลัมน์ที่ใช้ฟังก์ชัน nameGenerator เพื่อแปลงชื่อแต่ละชื่อ ซึ่งแตกต่างจาก Table.RenameColumns ตรงที่มันแปลงชื่อ ‘ทั้งหมด’ โดยใช้ฟังก์ชัน เหมาะกับการจัดรูปแบบแบบเป็นไปทั่วทั้งตาราง
ที่เจ๋งคือสามารถใช้ฟังก์ชันใดก็ได้ตราบเท่าที่รับชื่อเดิมและส่งคืนชื่อใหม่ เช่น Text.Upper, Text.Lower, Text.Replace, หรือแม้แต่ฟังก์ชันที่สร้างเอง ทำให้มีความยืดหยุ่นสูง
ส่วนตัวผมใช้บ่อยมากเวลาข้อมูลเข้ามาจากหลายแหล่ง (API, CSV, Excel) ที่ชื่อคอลัมน์ไม่สม่ำเสมอ – บางที่เป็น UPPERCASE บางที่ mIxEdCasE บางที่มีช่องว่าง ประมาณนี้ต้องใช้ Table.TransformColumnNames เลย 😎
เพื่อสร้างมาตรฐานชื่อคอลัมน์ที่ชัดเจนและสอดคล้องกัน
เช่น ลบเครื่องหมายวรรคตอน หรือสัญลักษณ์ที่ไม่ต้องการออกจากชื่อคอลัมน์
เช่น เพิ่ม 'Data_' นำหน้าชื่อคอลัมน์ทั้งหมด
ใช้ Text.Upper กับชื่อคอลัมน์แต่ละชื่อ (แทนด้วย _) เพื่อแปลงเป็นตัวพิมพ์ใหญ่ทั้งหมด เมื่อไปทำ Report ต้องให้หน้าตาเหมือน 'OFFICIAL' แบบนี้
ใช้ Text.Replace เพื่อลบช่องว่างทั้งหมด มีประโยชน์มากเวลาต้อง Merge กับข้อมูลอื่นที่ชื่อคอลัมน์ไม่มีช่องว่าง
เพิ่มคำว่า "DIM_" นำหน้าชื่อคอลัมน์ทั้งหมด เนื่องจากต้อง Follow ชื่อตามมาตรฐาน Star Schema หรือ Naming Convention บางที่ 555
ลบอักขระพิเศษ (-_@) เพื่อให้ชื่อคอลัมน์เป็นตัวอักษรและตัวเลขเท่านั้น ก่อนที่จะใช้ในการเขียน DAX หรือ M Code
Table.TransformColumnNames แปลงชื่อ 'ทั้งหมด' ด้วยฟังก์ชัน เหมาะงาน Mass Transformation เช่น ลบช่องว่างหรือแปลงเป็นตัวพิมพ์ใหญ่ทั้งตาราง ส่วน Table.RenameColumns เปลี่ยนชื่อเฉพาะคอลัมน์ที่ระบุชื่อเก่า-ใหม่เท่านั้น ผมแนะนำให้ใช้ TransformColumnNames เวลาต้องจัดรูปแบบเป็นแบบเดียวกัน แต่ RenameColumns ตอนเปลี่ยนชื่อคอลัมน์เฉพาะ 1-2 คอลัมน์
_ คือ 'ตัวแทน' (placeholder) สำหรับชื่อคอลัมน์เดิม ตอนเขียน each Text.Upper(_) มันจะเอาชื่อแต่ละคอลัมน์มา Replace ตัว _ แล้วส่งไปให้ Text.Upper ทำงาน ผมเคยนึกว่า _ มีความหมายตรงนั้นไม่ได้ เลยสับสนสำหรับตอนแรก 😅 แต่พอเข้าใจแล้ว มันก็ง่ายมาก
ถ้าชื่อซ้ำกันแล้ว Power Query จะโยน Error เพราะคอลัมน์ต้องมีชื่อไม่ซ้ำกัน ถ้าให้ชื่อเหมือนเดิม มันก็จะผ่านนะ (ไม่มีการเปลี่ยนแปลง) ผมแนะนำให้เทสด้วย Table.ColumnNames(Source) ก่อน เพื่อดูว่าชื่อใหม่จะออกมาแบบไหน
ได้สิครับ! เช่น each Text.Upper(Text.Trim(Text.Replace(_, " ", "_"))) ก็ได้ แต่ถ้ามันเยอะเกินไป ผมแนะนำให้เขียน Custom Function ทำไว้ก่อน แล้วใช้ function นั้นใน nameGenerator แทน จะดูสะอาดและ Maintainable ขึ้นเยอะ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.TransformColumnNames จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.ColumnNames ดึงชื่อคอลัมน์ทั้งหมดจากตาราง และส่งกลับมาเป็นลิสต์ข้อความ ซึ่งจำเป็นสำหรับการตรวจสอบ schema แบบ dynamic
Table.RenameColumns ใช้สำหรับเปลี่ยนชื่อคอลัมน์หนึ่งหรือหลายคอลัมน์ในตารางพร้อมกัน โดยส่งผ่าน list ของ rename pairs {ชื่อเก่า, ชื่อใหม่}
Table.SelectColumns ใช้สำหรับเลือกคอลัมน์เฉพาะจากตารางและสร้างตารางใหม่ที่มีเฉพาะคอลัมน์เหล่านั้น
Text.Lower ใช้แปลงอักขระทั้งหมดในข้อความให้เป็นตัวพิมพ์เล็ก (lowercase) ช่วยให้ข้อมูลมีรูปแบบสอดคล้องกัน สามารถกำหนด Culture เพื่อให้การแปลงเป็นไปตามกฎของภาษาและภูมิภาคที่ต้องการ
Text.Replace ใช้สำหรับแทนที่ทุกส่วนของข้อความเก่าในข้อความหลักด้วยข้อความใหม่ เป็น Case Sensitive และแทนที่ทีละครั้งที่เจอในข้อความทั้งหมด
Text.Upper แปลงอักขระทั้งหมดในข้อความเป็นตัวอักษรใหญ่ โดยรองรับการตั้งค่า culture ต่างๆ เพื่อจัดการการแปลงที่ถูกต้องตามภาษา
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่