Thep Excel

SELECTCOLUMNSฟังก์ชัน DAX

สร้างตารางใหม่โดยเลือกเฉพาะคอลัมน์ที่ต้องการจากตารางต้นฉบับและเพิ่มคอลัมน์ที่คำนวณได้ ต่างจาก ADDCOLUMNS ตรงที่ SELECTCOLUMNS เริ่มจากตารางว่างแล้วเพิ่มเฉพาะคอลัมน์ที่ระบุ ทำให้สามารถปรับโครงสร้างตารางและเลือกข้อมูลที่จำเป็นได้อย่างยืดหยุ่น

fx
=SELECTCOLUMNS(<Table>, [<Name>], <Expression>, [<Name>], <Expression>, …)

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางต้นฉบับที่ต้องการเลือกข้อมูล สามารถเป็นนิพจน์ DAX ใดก็ได้ที่คืนค่าเป็นตาราง
name text ชื่อของคอลัมน์ใหม่ ต้องอยู่ในเครื่องหมายคำพูดคู่
expression expression นิพจน์ DAX ที่คืนค่าเป็น scalar value เช่น การอ้างอิงคอลัมน์ ตัวเลข หรือข้อความ นิพจน์จะถูกประเมินในบริบทของแต่ละแถวจากตารางต้นฉบับ

Additional Notes

ฟังก์ชัน SELECTCOLUMNS ใช้สำหรับสร้างตารางใหม่โดยเลือกเฉพาะคอลัมน์ที่ต้องการจากตารางต้นฉบับ และสามารถเพิ่มคอลัมน์ใหม่ที่คำนวณจากนิพจน์ DAX ได้ ต่างจาก ADDCOLUMNS ที่เริ่มต้นจากตารางเดิมและเพิ่มคอลัมน์เข้าไป SELECTCOLUMNS จะเริ่มจากตารางว่างแล้วค่อยเพิ่มเฉพาะคอลัมน์ที่กำหนด ทำให้เหมาะสำหรับการปรับโครงสร้างข้อมูลและเลือกเฉพาะข้อมูลที่จำเป็น

ฟังก์ชันนี้มักใช้ร่วมกับ ADDCOLUMNS, SUMMARIZE, CALCULATETABLE และ FILTER เพื่อจัดการและปรับแต่งตารางข้อมูล รวมถึงสร้าง calculated tables ที่มีโครงสร้างตามที่ต้องการ

How it works

ปรับโครงสร้างตารางให้เหลือคอลัมน์ที่จำเป็น

สร้างตารางใหม่จากตารางใหญ่โดยเลือกเฉพาะคอลัมน์หลัก เพื่อลดความซับซ้อนของโมเดลและเร่งประสิทธิภาพ

รวมหลายคอลัมน์เป็นคอลัมน์เดียว

ต่อข้อความจากหลายคอลัมน์ (เช่นชื่อ-สกุล หรือที่อยู่) เป็นคอลัมน์เดียวด้วยนิพจน์ใน SELECTCOLUMNS

สร้าง calculated table สำหรับการวิเคราะห์

เลือกและคำนวณคอลัมน์ใหม่เพื่อสร้างตารางวิเคราะห์เฉพาะ เช่น ตารางสรุปหรือ lookup พิเศษ

Examples

เลือกคอลัมน์เดียวจากตารางCustomerNames = SELECTCOLUMNS( Customer, "Name", [CustomerName] )

สร้างตาราง CustomerNames ที่มีเฉพาะคอลัมน์ชื่อลูกค้าจากตาราง Customer ผลลัพธ์จะเป็นตารางที่มีคอลัมน์เดียวชื่อ Name ซึ่งแตกต่างจาก ADDCOLUMNS ที่จะรักษาคอลัมน์เดิมทั้งหมดไว้

fx
CustomerNames = SELECTCOLUMNS(
Customer,
"Name", [CustomerName]
)

ผลลัพธ์ตารางที่มีคอลัมน์ Name เท่านั้น
รวมหลายคอลัมน์เป็นคอลัมน์เดียวLocationTable = SELECTCOLUMNS( Customer, "Location", [Country] & ", " & [State] )

สร้างตาราง LocationTable โดยรวมคอลัมน์ Country และ State เป็นคอลัมน์เดียวชื่อ Location ด้วยการต่อข้อความ ผลลัพธ์จะเป็น 'USA, CA' หรือ 'IND, MH' เป็นต้น

fx
LocationTable = SELECTCOLUMNS(
Customer,
"Location", [Country] & ", " & [State]
)

ผลลัพธ์ตารางที่มีคอลัมน์ Location แสดงประเทศและรัฐรวมกัน
เลือกหลายคอลัมน์พร้อมคำนวณข้อมูลใหม่SalesAnalysis = SELECTCOLUMNS( Sales, "Product", [ProductName], "Revenue", [Quantity] * [UnitPrice], "Year", YEAR([OrderDate]) )

สร้างตาราง SalesAnalysis ที่มี 3 คอลัมน์ โดยเลือกชื่อสินค้า คำนวณรายได้จากจำนวนคูณราคา และดึงปีจากวันที่สั่งซื้อ ตัวอย่างนี้แสดงให้เห็นการใช้ SELECTCOLUMNS ร่วมกับการคำนวณและฟังก์ชันอื่นๆ เช่น YEAR

fx
SalesAnalysis = SELECTCOLUMNS(
Sales,
"Product", [ProductName],
"Revenue", [Quantity] * [UnitPrice],
"Year", YEAR([OrderDate])
)

ผลลัพธ์ตารางที่มี Product, Revenue และ Year สำหรับวิเคราะห์ยอดขาย
ใช้ร่วมกับ FILTER เพื่อเลือกข้อมูลเฉพาะกลุ่มTopCustomers = SELECTCOLUMNS( FILTER(Customer, [TotalPurchase] > 10000), "Customer Name", [CustomerName], "Total", [TotalPurchase], "Tier", "Premium" )

สร้างตาราง TopCustomers โดยใช้ FILTER เพื่อกรองเฉพาะลูกค้าที่มียอดซื้อเกิน 10,000 จากนั้นใช้ SELECTCOLUMNS เพื่อเลือกคอลัมน์ชื่อและยอดซื้อ พร้อมเพิ่มคอลัมน์ Tier ที่มีค่าคงที่ 'Premium' ตัวอย่างนี้แสดงการใช้ SELECTCOLUMNS ร่วมกับ FILTER และ CALCULATETABLE เพื่อสร้างตารางที่มีข้อมูลเฉพาะกลุ่มที่ต้องการ

fx
TopCustomers = SELECTCOLUMNS(
FILTER(Customer, [TotalPurchase] > 10000),
"Customer Name", [CustomerName],
"Total", [TotalPurchase],
"Tier", "Premium"
)

ผลลัพธ์ตารางลูกค้า Premium ที่มียอดซื้อเกิน 10,000
สร้างตารางสรุปด้วยการจัดกลุ่มข้อมูลRegionSummary = SELECTCOLUMNS( SUMMARIZE(Sales, Sales[Region], Sales[Category]), "Region", [Region], "Category", [Category], "Total Sales", CALCULATE(SUM(Sales[…

สร้างตาราง RegionSummary โดยใช้ SUMMARIZE จัดกลุ่มข้อมูลตามภูมิภาคและหมวดหมู่ จากนั้นใช้ SELECTCOLUMNS เพื่อเลือกคอลัมน์และคำนวณยอดขายรวมในแต่ละกลุ่ม ตัวอย่างนี้แสดงการใช้งานร่วมกับ SUMMARIZE และ CALCULATE อย่างมีประสิทธิภาพในการวิเคราะห์ข้อมูล

fx
RegionSummary = SELECTCOLUMNS(
SUMMARIZE(Sales, Sales[Region], Sales[Category]),
"Region", [Region],
"Category", [Category],
"Total Sales", CALCULATE(SUM(Sales[Amount]))
)

ผลลัพธ์ตารางสรุปยอดขายแยกตามภูมิภาคและหมวดหมู่

FAQs

SELECTCOLUMNS ต่างจาก ADDCOLUMNS อย่างไร?+

SELECTCOLUMNS เริ่มจากตารางว่างแล้วเพิ่มเฉพาะคอลัมน์ที่ระบุ ในขณะที่ ADDCOLUMNS จะเริ่มจากตารางต้นฉบับที่มีคอลัมน์ทั้งหมดแล้วเพิ่มคอลัมน์ใหม่เข้าไป ใช้ SELECTCOLUMNS เมื่อต้องการควบคุมโครงสร้างตารางผลลัพธ์ และใช้ ADDCOLUMNS เมื่อต้องการเก็บคอลัมน์เดิมทั้งหมด

สามารถใช้ SELECTCOLUMNS ใน DirectQuery mode ได้หรือไม่?+

ไม่ได้ SELECTCOLUMNS ไม่รองรับการใช้งานใน DirectQuery mode เมื่อใช้ใน calculated columns หรือ row-level security (RLS) rules ควรใช้วิธีอื่นในกรณีที่จำเป็นต้องใช้ DirectQuery

ควรใช้ SELECTCOLUMNS หรือ SUMMARIZE ในการจัดกลุ่มข้อมูล?+

ใช้ SUMMARIZE สำหรับการจัดกลุ่มข้อมูล (grouping) โดยเฉพาะ และใช้ SELECTCOLUMNS เมื่อต้องการเลือกหรือแปลงคอลัมน์โดยไม่จัดกลุ่ม อย่างไรก็ตาม สามารถใช้ทั้งสองฟังก์ชันร่วมกันได้ เช่น ใช้ SUMMARIZE จัดกลุ่มก่อน แล้วใช้ SELECTCOLUMNS เลือกคอลัมน์จากผลลัพธ์

Resources & Related

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

ฟังก์ชันนี้SELECTCOLUMNSTable manipulation
Table manipulation (15)
ADDCOLUMNS

ADDCOLUMNS เป็นฟังก์ชัน table transformation ที่ใช้สำหรับเพิ่มคอลัมน์ใหม่ (Calculated Columns) เข้าไปในตารางที่มีอยู่เดิม โดยคำนวณค่าในแต่ละแถวผ่าน Row Context และส่งคืนตารางเดิมพร้อมคอลัมน์ใหม่ต่อท้าย

DATATABLE

DATATABLE สร้างตารางแบบ hardcode ด้วยข้อมูลคงที่ โดยระบุชื่อคอลัมน์ ชนิดข้อมูล และค่าของแต่ละแถว เหมาะสำหรับตารางอ้างอิงเล็กๆ เช่น lookup table หรือข้อมูลตัวอย่าง

DISTINCT

DISTINCT คืนค่าตารางที่มีคอลัมน์เดียว ซึ่งประกอบด้วยค่าที่ไม่ซ้ำกันจากคอลัมน์ที่ระบุ โดยไม่รวม Blank Row ที่เกิดจาก Invalid Relationship ความแตกต่างหลักจาก VALUES คือ DISTINCT จะซ่อน Data Quality Issues ในขณะที่ VALUES จะเตือนให้เห็น

EXCEPT

EXCEPT คืนตารางของแถวที่อยู่ใน LeftTable แต่ไม่อยู่ใน RightTable เหมาะกับการหาสิ่งที่ขาดหาย เช่น สินค้าที่ไม่เคยขาย ลูกค้าที่ไม่มีธุรกรรม

GENERATESERIES

GENERATESERIES สร้างตารางคอลัมน์เดียวที่เป็นลำดับตัวเลขจาก StartValue ถึง EndValue ด้วย increment ที่กำหนดได้ เหมาะกับตารางช่วย parameter table หรือสร้างชุดตัวเลขสำหรับ what-if analysis

GROUPBY

GROUPBY สร้างตารางสรุปโดยจัดกลุ่มตามคอลัมน์ที่กำหนด และเพิ่มคอลัมน์คำนวณแบบกลุ่มต่อกลุ่มได้ โดยใช้ CURRENTGROUP() เข้าถึงแถวภายในกลุ่ม เหมาะกับการคำนวณซ้อนหรือคำนวณจากคอลัมน์ชั่วคราว (local columns)

IGNORE

IGNORE ใช้ภายใน SUMMARIZECOLUMNS เพื่อบอกว่า expression/measure นี้ต้องถูก “ละเว้น” ตอนตัดสินว่าแถวไหนเป็น non-blank ทำให้แถวในผลลัพธ์ไม่ถูกตัดทิ้งเพียงเพราะ measure ที่เลือกละเว้นเป็น BLANK

INTERSECT

INTERSECT คืนตารางของแถวที่อยู่ในทั้ง LeftTable และ RightTable เหมาะกับการหาสิ่งที่ซ้ำกัน/ร่วมกันระหว่างสองชุดข้อมูล โดยรักษาเอาแถวที่ซ้ำกันไว้ด้วย

NATURALINNERJOIN

NATURALINNERJOIN ทำ inner join ระหว่าง LeftTable และ RightTable โดยใช้คอลัมน์ชื่อเดียวกันเป็นคีย์การจับคู่ คืนผลลัพธ์เฉพาะแถวที่จับคู่ได้ทั้งสองตาราง และมักใช้ร่วมกับ SELECTCOLUMNS เพื่อจัดชื่อคอลัมน์ให้ตรงกัน

NATURALJOINUSAGE

NATURALJOINUSAGE ทำให้ table expression ถูกเพิ่มเข้าไปในตัวกรอง (filter context) แบบ natural join โดยจับคู่ตามคอลัมน์ชื่อเดียวกัน เป็นฟังก์ชันที่ออกแบบสำหรับการใช้งานขั้นสูงในโมเดลแบบประกอบ (composite models) และ SUMMARIZECOLUMNS

NATURALLEFTOUTERJOIN

NATURALLEFTOUTERJOIN ทำ left outer join ระหว่าง LeftTable และ RightTable โดยใช้คอลัมน์ชื่อเดียวกันเป็นคีย์ เก็บทุกแถวของตารางซ้ายไว้ทั้งหมด และเติมคอลัมน์จากตารางขวาเมื่อจับคู่ได้ (ไม่จับคู่จะเป็น BLANK)

SUBSTITUTEWITHINDEX

คืนตารางที่เป็นผลแบบ semi-join ระหว่าง 2 ตาราง พร้อมแทนคอลัมน์ร่วมด้วยดัชนี 0-based ซึ่งคำนวณจากลำดับแถวของตารางอ้างอิงหลังจัดเรียง

SUMMARIZE

SUMMARIZE สร้างตารางสรุปโดยจัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนด คล้าย GROUP BY ใน SQL หรือ Pivot Table ใน Excel คืนค่าตารางที่มีหนึ่งแถวต่อหนึ่ง unique combination ของคอลัมน์ที่เลือก สามารถอ้างถึงคอลัมน์จาก related table ได้โดยตรงโดยไม่ต้องใช้ RELATED มักใช้สร้าง virtual table ใน measure เพื่อทำ intermediate calculations ก่อนใช้ iterator functions อย่าง SUMX, AVERAGEX คำนวณต่อ ⚠️ Best Practice: ใช้ ADDCOLUMNS ครอบ SUMMARIZE แทนการใส่ extension columns ตรงๆ เพื่อ performance และ filter context control ที่ดีกว่า สำหรับ calculated table แนะนำใช้ SUMMARIZECOLUMNS แทนเนื่องจากมี performance ดีกว่าอย่างมาก

SUMMARIZECOLUMNS

SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที

UNION

UNION รวมหลายตารางให้เป็นตารางเดียวด้วยการต่อแถว โดยเก็บแถวซ้ำไว้ทั้งหมด เหมาะกับการรวมชุดข้อมูลที่มีโครงสร้างคอลัมน์สอดคล้องกัน

Filter (1)
CALCULATETABLE

CALCULATETABLE evaluate table expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน แล้วคืนค่าเป็น table (ตาราง) ซึ่งแตกต่างจาก CALCULATE ที่คืนค่าเป็น scalar value รองรับ filter arguments 3 รูปแบบ: Boolean expression, table expression, และ filter modifier functions (REMOVEFILTERS, ALL, KEEPFILTERS, USERELATIONSHIP, CROSSFILTER) มีพฤติกรรมเหมือน CALCULATE ในทุกแง่มุมของการจัดการ filter context รวมถึง context transition แต่เหมาะสำหรับการสร้าง intermediate table ที่ถูกกรองแล้วส่งต่อให้ iterator functions หรือใช้ใน calculated table มักมี performance ดีกว่า FILTER ใน simple filtering scenarios เพราะ DAX engine สามารถทำ cardinality estimation และ optimization ได้ดีกว่า

Comments

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