Thep Excel

Table.ReplacePartitionKeyแทนที่คีย์แบ่งพาร์ทิชันของตาราง

Table.ReplacePartitionKey แทนที่ partition key ของตาราง ซึ่งเป็น metadata สำหรับการแบ่งพาร์ทิชันและการจัดการข้อมูลภายใน เอาไว้ควบคุมวิธีการแบ่งพาร์ทิชันของข้อมูลในตารางนั้น

fx
=Table.ReplacePartitionKey(table, partitionKey) as table

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

อัปเดต 15 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางที่ต้องการแทนที่ partition key
partitionKey nullable list รายการ (list) ของชื่อคอลัมน์ที่จะใช้เป็นคีย์ใหม่ หรือ null เพื่อเอาคีย์ออก

Additional Notes

Table.ReplacePartitionKey ใช้แทนที่ partition key ของตาราง ซึ่ง partition key คือ metadata ที่บอก Power Query ว่าตารางนี้มีการแบ่งพาร์ทิชันแบบไหน โดยที่ partition key มักจะเป็นรายการของชื่อคอลัมน์ที่ใช้เป็นตัวแบ่งข้อมูล

ที่เจ๋งคือ partition key ไม่ใช่แค่ metadata ง่ายๆ มันบอก Power Query ว่า แยกข้อมูลตามคีย์นี้เพื่อให้สามารถจัดการข้อมูลได้มีประสิทธิภาพมากขึ้น ถ้าคุณทำงานกับ partitioned data sources หรือ incremental refresh ใน Power BI เรื่องนี้สำคัญมากครับ

ส่วนตัวผมเจอเรื่องนี้เมื่อทำการซิงค์ข้อมูลขนาดใหญ่ใน Power BI – การตั้ง partition key ให้ถูก ต่อหลังจากนั้น refresh ก็เร็วขึ้นตั้งเยอะเลยครับ 😎

How it works

ปรับ metadata ของตารางสำหรับการแบ่งพาร์ทิชัน

ใช้เมื่อจำเป็นต้องแก้ไข partition key ของตารางในบริบทขั้นสูง/ภายใน เช่น การจัดการตารางที่ถูกแบ่งพาร์ทิชัน

Examples

ตัวอย่างที่ 1: ตั้งคีย์เป็นคอลัมน์เดียวlet SourceTable = Table.FromRecords({ [CustomerID=1, Region="TH", Amount=1000], [CustomerID=2, Region="TH", Amount=2000] }), UpdatedTable = Table.ReplacePartiti…

สร้างตารางตัวอย่างที่มี CustomerID, Region, Amount จากนั้นใช้ Table.ReplacePartitionKey เพื่อตั้ง partition key ให้เป็น CustomerID เท่านั้น ตอนท้ายตรวจสอบด้วย Table.PartitionKey

fx
let
SourceTable = Table.FromRecords({
[CustomerID=1, Region="TH", Amount=1000],
[CustomerID=2, Region="TH", Amount=2000]
}),
UpdatedTable = Table.ReplacePartitionKey(SourceTable, {"CustomerID"})
in
Table.PartitionKey(UpdatedTable)

ผลลัพธ์{"CustomerID"}
ตัวอย่างที่ 2: ตั้งคีย์หลายคอลัมน์let SourceTable = Table.FromRecords({ [CustomerID=1, Region="TH", Year=2024], [CustomerID=2, Region="US", Year=2024], [CustomerID=1, Region="TH", Year=2025] }),…

ถ้าต้องการให้ partition key ประกอบด้วยหลายคอลัมน์ ก็ส่ง list ของชื่อคอลัมน์ เช่น {"Region", "Year"} ซึ่งมีประโยชน์เมื่อต้องแบ่งพาร์ทิชันตามหลายเกณฑ์พร้อมกัน

fx
let
SourceTable = Table.FromRecords({
[CustomerID=1, Region="TH", Year=2024],
[CustomerID=2, Region="US", Year=2024],
[CustomerID=1, Region="TH", Year=2025]
}),
UpdatedTable = Table.ReplacePartitionKey(SourceTable, {"Region", "Year"})
in
Table.PartitionKey(UpdatedTable)

ผลลัพธ์{"Region", "Year"}
ตัวอย่างที่ 3: เอาคีย์ออกด้วย nulllet SourceTable = Table.FromRecords({ [ID=1, Name="John"], [ID=2, Name="Jane"] }), ClearedTable = Table.ReplacePartitionKey(SourceTable, null) in Table.Partitio…

partitionKey มีค่า nullable ดังนั้นสามารถส่ง null เพื่อลบ/รีเซ็ต partition key ของตาราง ผลลัพธ์จะเป็น null แสดงว่าตารางนี้ไม่มี partition key

fx
let
SourceTable = Table.FromRecords({
[ID=1, Name="John"],
[ID=2, Name="Jane"]
}),
ClearedTable = Table.ReplacePartitionKey(SourceTable, null)
in
Table.PartitionKey(ClearedTable)

ผลลัพธ์null
ตัวอย่างที่ 4: Partition key ในบริบท Incremental Refreshlet SourceData = Table.FromRecords({ [InvoiceID=1001, LastModified="2024-01-15", Amount=500], [InvoiceID=1002, LastModified="2024-01-20", Amount=750] }), Optimi…

ในสถานการณ์จริงเวลาใช้ Incremental Refresh ใน Power BI เรามักตั้ง partition key ให้เป็นคอลัมน์วันที่ (เช่น LastModified) เพื่อให้ Power Query แบ่งข้อมูลตามช่วงเวลา ทำให้ refresh เร็วขึ้น

fx
let
SourceData = Table.FromRecords({
[InvoiceID=1001, LastModified="2024-01-15", Amount=500],
[InvoiceID=1002, LastModified="2024-01-20", Amount=750]
}),
OptimizedTable = Table.ReplacePartitionKey(SourceData, {"LastModified"})
in
OptimizedTable

ผลลัพธ์ตารางที่มี partition key เป็น LastModified

FAQs

Partition key ต่างจากคีย์หลักของฐานข้อมูลอย่างไรครับ?+

ผม มักสงสัยเรื่องนี้ตอนแรกเหมือนกัน 😅 partition key คือ metadata ของ Power Query ใช้บอก Power Query ว่า 'แบ่งพาร์ทิชันตามคอลัมน์นี้' เพื่อให้ refresh และการจัดการข้อมูลเร็วขึ้น ส่วนคีย์หลัก (Primary Key) คือข้อบังคับของฐานข้อมูล บอก 'แต่ละแถวต้องมีค่าไม่ซ้ำในคอลัมน์นี้' สองอย่างต่างกันโลก

ใช้ Table.ReplacePartitionKey ตอนไหนครับ?+

ส่วนตัวผมพบประโยชน์ตอนทำ Power BI ที่มี incremental refresh หรือจำนวนข้อมูลมากมาย การตั้ง partition key ให้ถูกช่วย optimize refresh time ได้เยอะ นอกจากนั้น ถ้าข้อมูลมาจากหลายแหล่งและต้องรวมกันแล้วเซ็ต partition key ก็จะช่วยให้ Power BI จัดการข้อมูลได้ดีขึ้น

ค่า null หมายความว่าอะไรครับ?+

ถ้าส่ง null แล้วมันจะเอา partition key ออก (รีเซ็ต) คือบอก Power Query ว่า 'ตารางนี้ไม่มี partition key' แต่ขึ้นอยู่กับแหล่งข้อมูลว่าจะรองรับ null เหมือนกันไหม บางครั้งระบบอาจไม่ยอมรับ null

Resources & Related

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

ฟังก์ชันนี้Table.ReplacePartitionKeyTable functions
Table functions (4)
Table.FromRecords

แปลง List ของ Record เป็นตาราง โดยแต่ละ Record กลายเป็นหนึ่งแถว เหมาะสำหรับข้อมูลจาก API หรือ JSON

Table.Partition

แบ่งตารางออกเป็นรายการของตารางย่อย (List of Tables) โดยใช้ hash function กำหนดการกระจายข้อมูล

Table.SelectColumns

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

Table.SelectRows

Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่

Comments

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