Thep Excel

CONTAINS – ตรวจสอบว่ามีแถวที่ตรงกับเงื่อนไขในตาราง

CONTAINS ค้นหาแถวในตารางและคืนค่า TRUE/FALSE เมื่อหาเจอค่าที่ตรงกับเงื่อนไขที่กำหนด เจ๋งเพราะมันเร็วกว่า COUNTROWS + FILTER มาก

=CONTAINS(<table>, <columnName>, <value>[, <columnName>, <value>]...)

By ThepExcel AI Agent
14 December 2025

Function Metrics


Popularity
6/10

Difficulty
4/10

Usefulness
6/10

Syntax & Arguments

=CONTAINS(<table>, <columnName>, <value>[, <columnName>, <value>]...)

Argument Type Required Default Description
table table Yes ตารางใดๆ ที่ส่งกลับโดยนิพจน์ DAX ซึ่งมีข้อมูลที่ต้องการค้นหา อาจเป็นตาราง source หรือ related table ก็ได้
columnName text Yes ชื่อคอลัมน์ที่มีอยู่จริงในตารางที่กำหนด ไม่สามารถเป็นนิพจน์ได้ ถ้าคอลัมน์อยู่ในตาราง related ต้องมีชื่อเต็มรูปแบบเช่น RelatedTable[ColumnName]
value scalar Yes นิพจน์ DAX ที่ส่งกลับค่า scalar เดี่ยว ซึ่งจะใช้ค้นหาในคอลัมน์ที่ระบุ สามารถเป็นตัวเลข ข้อความ วันที่ หรือค่า logical ได้
columnName, value (additional pairs) scalar Optional สามารถเพิ่มคู่ columnName และ value ได้หลายคู่ เมื่อต้องตรวจสอบหลายคอลัมน์พร้อมกัน (เหมือน AND logic) ทุกเงื่อนไขต้องเป็นจริงเพื่อให้ CONTAINS คืน TRUE

How it works

สร้างความสัมพันธ์เสมือน (Virtual Relationships)

ใช้ CONTAINS เพื่อตรวจสอบว่าลูกค้าในตารางหนึ่งมีสัญญาในตารางอื่นหรือไม่ โดยไม่ต้องสร้างความสัมพันธ์ทั่วไป

ตรวจสอบการมีอยู่ของแถว

ตรวจสอบว่าการรวมกันของผลิตภัณฑ์และลูกค้าที่เฉพาะเจาะจงมีการขายจริงหรือไม่ ในการสร้างมาตรการที่ขึ้นอยู่กับการมีอยู่ของข้อมูล

ตัวกรองข้อมูลขั้นสูง

กรองแถวเพื่อแสดงเฉพาะชุดข้อมูลที่มีอยู่ในตารางแหล่งข้อมูล เช่น แสดงเฉพาะโครงการที่มีการลงนามจริงกับลูกค้า

Examples

ตัวอย่างที่ 1: ตรวจสอบว่ามีการขายสินค้าเฉพาะหรือไม่
Product Exists = CONTAINS( InternetSales, [ProductKey], 214 )
ค้นหาในตาราง InternetSales เพื่อตรวจสอบว่ามีแถวใดที่มี ProductKey = 214 หรือไม่ ถ้าหาเจอ TRUE ถ้าไม่เจอ FALSE นี่คือการใช้งาน CONTAINS ที่ง่ายที่สุด
DAX Formula:

Product Exists = CONTAINS(
    InternetSales,
    [ProductKey],
    214
)

Result:

TRUE หรือ FALSE

ตัวอย่างที่ 2: ตรวจสอบ combination (AND logic)
Customer Product Pair = CONTAINS( InternetSales, [ProductKey], 214, [CustomerKey], 11185 )
ตรวจสอบว่ามีการขายสินค้า 214 ให้ลูกค้า 11185 พร้อมกันหรือไม่ ทั้งสองเงื่อนไข ProductKey = 214 AND CustomerKey = 11185 ต้องเป็นจริงในแถวเดียวกัน
DAX Formula:

Customer Product Pair = CONTAINS(
    InternetSales,
    [ProductKey],
    214,
    [CustomerKey],
    11185
)

Result:

TRUE หรือ FALSE

ตัวอย่างที่ 3: ใช้กับคอลัมน์จากตาราง related
Is Active Product = IF( CONTAINS( Products, Products[ProductKey], [ProductKey] ), "Active", "Inactive" )
ใช้ CONTAINS ตรวจสอบว่า ProductKey ปัจจุบัน (จากตาราง Sales ที่กำลังคำนวณ) มีอยู่ในตาราง Products หรือไม่ ถ้ามีแสดง "Active" ถ้าไม่มี "Inactive" วิธีนี้เหมือนการ VLOOKUP แบบ "ชัวร์หรือเปล่า"
DAX Formula:

Is Active Product = IF(
    CONTAINS(
        Products,
        Products[ProductKey],
        [ProductKey]
    ),
    "Active",
    "Inactive"
)

Result:

"Active" หรือ "Inactive"

ตัวอย่างที่ 4: ตรวจสอบหลายค่าจากตาราง related
Valid Sale = CONTAINS( SalesRules, SalesRules[ProductID], RELATED(Products[ProductID]), SalesRules[RegionID], [RegionID] )
ตรวจสอบว่าชุดข้อมูล ProductID (ผ่าน RELATED) และ RegionID ปัจจุบันนั้นมีอยู่ในตาราง SalesRules หรือไม่ วิธีนี้ดีสำหรับการ validate ว่าข้อมูลเป็นไปตามกฎการขายหรือไม่
DAX Formula:

Valid Sale = CONTAINS(
    SalesRules,
    SalesRules[ProductID],
    RELATED(Products[ProductID]),
    SalesRules[RegionID],
    [RegionID]
)

Result:

TRUE หรือ FALSE

FAQs

ความแตกต่างระหว่าง CONTAINS กับ CONTAINSROW คืออะไร?

CONTAINS ต้องระบุชื่อคอลัมน์อย่างชัดเจนทีละตัว ส่วน CONTAINSROW ใช้กับตาราง inline (ที่สร้างเอง) และค่าต้องตรงกันตามลำดับของคอลัมน์ CONTAINS โครงสร้างชัดเจนกว่า แต่ CONTAINSROW ดีกว่าเมื่อต้องจัดการกับข้อมูลที่คืนจาก expression

CONTAINS รองรับ DirectQuery หรือไม่?

CONTAINS รองรับ DirectQuery ใน Measures และ Calculated Columns ปกติ แต่ห้ามใช้กับคอลัมน์ที่คำนวณ (Computed Columns) หรือ RLS (Row-Level Security) เพราะ DirectQuery ไม่สามารถประเมิน custom expression ได้

สามารถใช้ CONTAINS กับตาราง related ได้หรือไม่?

ได้ครับ แต่คอลัมน์ต้องมีชื่อเต็มรูปแบบ เช่น Products[CategoryID] และตารางต้องมี relationship ที่ชัดเจนกับตาราง source ไม่ใช่ว่า relationship ไม่อยู่ก็ใช้ได้ มันต้องมี relationship ที่ดีทีปรึกษา

ถ้าค่าเป็น BLANK จะเกิดอะไรขึ้น?

CONTAINS จะค้นหา BLANK เหมือนค่าอื่นๆ ถ้าคอลัมน์มี BLANK และค่าค้นหาเป็น BLANK ก็จะหาเจอและคืน TRUE การจัดการ BLANK นี้ดีสำหรับการตรวจสอบว่าข้อมูล incomplete หรือไม่

CONTAINS มีประสิทธิภาพดีกว่า COUNTROWS + FILTER หรือไม่?

ใช่ CONTAINS เร็วกว่ามากเพราะ DAX engine เพิ่มประสิทธิภาพให้มัน แต่ถ้าต้องการค้นหา expression ที่ซับซ้อน (เช่น SUM > 1000) ต้องใช้ COUNTROWS + FILTER แทน CONTAINS ทำเฉพาะคอลัมน์ธรรมชาติได้เท่านั้น

Resources & Related

Additional Notes

CONTAINS คือตัวค้นหาแบบเร็วเหล่มสำหรับตรวจสอบว่าค่าเฉพาะนั้นมีอยู่ในตาราง DAX มันลักษณ์เหมือนเป็นการ JOIN สองตารางแบบเสมือน เพราะมันไม่ต้องสร้าง relationship จริงๆ แต่ยังเช็ค constraint ได้ตามต้องการ

ที่เจ๋งคือ CONTAINS เหมาะสำหรับตรวจสอบ combination ของค่า เช่น “มีการขายสินค้า 214 ให้ลูกค้า 11185 หรือเปล่า?” มันจะตอบแบบ TRUE/FALSE ตรงๆ ไม่ต้องนั่งนับแถวแบบ COUNTROWS ก่อน ซึ่งจะเร็วขึ้นเยอะ อย่างไรก็ตาม CONTAINS ใช้ได้แค่กับคอลัมน์ที่มีจริง ไม่ได้มีความเยื่อยนวลแบบ FILTER ที่รองรับนิพจน์ที่ซับซ้อนได้

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

Leave a Reply

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