Thep Excel

INTERSECT – หาส่วนร่วมของสองตาราง

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

=INTERSECT(<LeftTable>, <RightTable>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
5/10

Syntax & Arguments

=INTERSECT(<LeftTable>, <RightTable>)

Argument Type Required Default Description
LeftTable table Yes ตารางฝั่งซ้าย (ผลลัพธ์จะเก็บชื่อคอลัมน์และ lineage จากตารางนี้)
RightTable table Yes ตารางฝั่งขวา (ใช้เพื่อเทียบว่าแถวใดอยู่ในตารางนี้ด้วย)

How it works

หาสินค้าที่อยู่ในทั้งยอดขายและคืนสินค้า

เช่น เทียบ ProductID จากสองตาราง

หาลูกค้าที่อยู่ในทั้งสองชุดข้อมูล

เช่น ลูกค้าที่อยู่ในทั้งแคมเปญ A และ B

Examples

หาลูกค้าที่อยู่ในทั้งสองโปรแกรม
Customers in Both Programs = VAR ProgACustomers = VALUES( ProgramA[CustomerID] ) VAR ProgBCustomers = VALUES( ProgramB[CustomerID] ) RETURN INTERSECT( ProgACust…
ใช้ VALUES เพื่อสร้างชุดลูกค้าจากแต่ละโปรแกรม แล้ว INTERSECT หาส่วนร่วม ผลลัพธ์คือลูกค้าที่เป็น overlap ระหว่างสองระบบ
DAX Formula:

Customers in Both Programs =
VAR ProgACustomers = VALUES( ProgramA[CustomerID] )
VAR ProgBCustomers = VALUES( ProgramB[CustomerID] )
RETURN
  INTERSECT( ProgACustomers, ProgBCustomers )

Result:

ตารางของ CustomerID ที่ปรากฏในทั้ง ProgramA และ ProgramB

หาสินค้าที่มีการขายและคืนกลับ
Products Sold and Returned = VAR SoldProducts = VALUES( Sales[ProductID] ) VAR ReturnedProducts = VALUES( Returns[ProductID] ) RETURN INTERSECT( SoldProducts, R…
INTERSECT ช่วยหาสินค้าที่ "ปรากฏในทั้งสองตาราง" เป็นวิธีที่เร็วกว่าการใช้ FILTER ที่ซ้อน
DAX Formula:

Products Sold and Returned =
VAR SoldProducts = VALUES( Sales[ProductID] )
VAR ReturnedProducts = VALUES( Returns[ProductID] )
RETURN
  INTERSECT( SoldProducts, ReturnedProducts )

Result:

ตารางของ ProductID ที่มีการขายและมีการคืนกลับ

ตัวอย่างเปรียบเทียบกับ EXCEPT
Customers Only in Program A = VAR ProgACustomers = VALUES( ProgramA[CustomerID] ) VAR ProgBCustomers = VALUES( ProgramB[CustomerID] ) RETURN EXCEPT( ProgACustom…
INTERSECT หาส่วนร่วม แต่ EXCEPT หาส่วนที่อยู่ในชุดแรกแต่ไม่อยู่ในชุดที่สอง ใช้เมื่อต้องการหา "ส่วนแตกต่าง" แทน
DAX Formula:

Customers Only in Program A =
VAR ProgACustomers = VALUES( ProgramA[CustomerID] )
VAR ProgBCustomers = VALUES( ProgramB[CustomerID] )
RETURN
  EXCEPT( ProgACustomers, ProgBCustomers )

Result:

ตารางของลูกค้าที่อยู่ใน Program A แต่ไม่อยู่ใน Program B

เปรียบเทียบกับ UNION
All Customers from Both Programs = VAR ProgACustomers = VALUES( ProgramA[CustomerID] ) VAR ProgBCustomers = VALUES( ProgramB[CustomerID] ) RETURN UNION( ProgACu…
UNION รวม "ทั้งหมด" จากสองตาราง ส่วน INTERSECT หาแต่ "ส่วนร่วม" เลือกใช้ตามความต้องการ
DAX Formula:

All Customers from Both Programs =
VAR ProgACustomers = VALUES( ProgramA[CustomerID] )
VAR ProgBCustomers = VALUES( ProgramB[CustomerID] )
RETURN
  UNION( ProgACustomers, ProgBCustomers )

Result:

ตารางของลูกค้าทั้งหมดจากทั้งสองโปรแกรม (รวมกัน)

FAQs

INTERSECT แตกต่างจาก EXCEPT อย่างไร?

INTERSECT หาแถวที่อยู่ “ในทั้งสอง” ส่วน EXCEPT หาแถวที่อยู่ “ในแรกแต่ไม่อยู่ในที่สอง” ตัวอย่าง: ถ้า A = {1,2,3} และ B = {2,3,4} แล้ว INTERSECT(A,B) = {2,3} ส่วน EXCEPT(A,B) = {1}

INTERSECT ต่างจาก UNION อย่างไร?

UNION รวม “ทั้งหมด” จากสองตาราง (คล้ายการรวมเซต) ส่วน INTERSECT หาแต่ “ส่วนร่วม” (คล้ายจุดตัดเซต) UNION(A,B) = {1,2,3,4} ส่วน INTERSECT(A,B) = {2,3}

INTERSECT เป็น commutative ไหม? (มีความสมมาตร)

ไม่ครับ INTERSECT(A, B) อาจให้ผลต่างจาก INTERSECT(B, A) เพราะมันรักษาชื่อคอลัมน์และ lineage จาก LeftTable เท่านั้น ถ้าตาราง A มีแถวซ้ำ แล้ว INTERSECT(A, B) จะเก็บแถวซ้ำนั้นไว้ ส่วน INTERSECT(B, A) จะเก็บแถวซ้ำจาก B

INTERSECT รักษาแถวที่ซ้ำกันไหม?

ใช่ INTERSECT รักษา “แถวที่ซ้ำจาก LeftTable” ถ้า LeftTable มีแถว {A, A, B} และ RightTable มี {A, B, C} ผลลัพธ์คือ {A, A, B} ไม่ใช่ {A, B} ถ้าต้องการลบแถวซ้ำ ให้ใช้ DISTINCT ห่อ INTERSECT ไว้

ตารางสองฝั่งต้องมีโครงสร้างเหมือนกันไหม?

ควรมีคอลัมน์ที่สอดคล้องกัน (เทียบจำนวน ชนิด และลำดับ) เพราะ INTERSECT เทียบแถวตามตำแหน่งของคอลัมน์ไม่ใช่ชื่อ ถ้าต้องการเทียบเฉพาะบางคอลัมน์ ให้เตรียมตารางด้วย SELECTCOLUMNS ก่อน

INTERSECT ใช้ได้กับ DirectQuery ไหม?

ไม่ครับ INTERSECT ไม่ support DirectQuery mode โดยเฉพาะสำหรับ calculated column และ row-level security rules ต้องใช้ Import mode หรือ Dual mode

Resources & Related

Additional Notes

INTERSECT เป็นฟังก์ชันที่หา “ส่วนร่วม” ของสองตารางเหมือนการหาจุดตัดของเซตในคณิตศาสตร์ มันคืนแถวทั้งหมดที่ปรากฏในทั้ง LeftTable และ RightTable โดยรักษาแถวที่ซ้ำกันจาก LeftTable ไว้ด้วย

ที่เจ๋งคือ INTERSECT ไม่ใช่ commutative – ถ้าสลับตาราง ผลลัพธ์จะต่างออกไป เพราะมันรักษาชื่อคอลัมน์และ lineage จาก LeftTable ทำให้เหมาะกับการตรวจสอบ “ลูกค้าที่อยู่ในทั้งสองระบบ” หรือ “สินค้าที่มีการขายและคืนกลับ” ในข้อมูลจริง

ส่วนตัวผมใช้ INTERSECT เมื่อต้องการหา overlap ระหว่างสองชุดข้อมูล โดยเฉพาะสำหรับการวิเคราะห์ “สิ่งที่ร่วมกัน” ไม่ว่าจะเป็นลูกค้า สินค้า หรือการ์ด membership ผมมักจับคู่ INTERSECT กับ VALUES หรือ SELECTCOLUMNS เพื่อให้ได้ผลลัพธ์ที่ชัดเจนครับ

Leave a Reply

Your email address will not be published. Required fields are marked *