CONTAINSROW ตรวจสอบว่ามีแถวที่ค่าคอลัมน์ตรงกันหมดหรือไม่ ถ้าเจอจะคืนค่า TRUE ไม่มีจะคืน FALSE
=CONTAINSROW(<table>, <value> [, <value> [, ... ] ])
=CONTAINSROW(<table>, <value> [, <value> [, ... ] ])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | Table | Yes | ตารางที่ต้องการเช็ค สามารถเป็นตาราง inline เช่น {“Red”, “Blue”} หรือตาราง DAX เช่น SUMMARIZE() VALUES() ได้ | |
| value | Scalar | Yes | ค่าที่ต้องการเช็คว่าตรงกันหรือไม่ จำนวนค่าต้องเท่ากับจำนวนคอลัมน์ในตาราง เรียงตามลำดับคอลัมน์ สามารถใส่หลายค่าได้ |
Has Valid Color = CONTAINSROW( { "Red", "Blue", "Yellow" }, "Red" )Has Valid Color = CONTAINSROW( { "Red", "Blue", "Yellow" }, "Red" )
TRUE
Has Product-Store Pair = VAR Pairs = SUMMARIZE(Sales, Sales[ProductID], Sales[StoreID]) RETURN CONTAINSROW(Pairs, 101, 5)Has Product-Store Pair =
VAR Pairs = SUMMARIZE(Sales, Sales[ProductID], Sales[StoreID])
RETURN CONTAINSROW(Pairs, 101, 5)
TRUE หรือ FALSE
Valid Products = FILTER( ALL(Product[Name]), CONTAINSROW( VALUES(Product[Category]), Product[Category] ) )Valid Products =
FILTER(
ALL(Product[Name]),
CONTAINSROW(
VALUES(Product[Category]),
Product[Category]
)
)
รายชื่อสินค้าที่มี Category ขึ้นทะเบียน
Invalid Stores = FILTER( ALL(Store[StoreID]), NOT CONTAINSROW( VALUES(Sales[StoreID]), Store[StoreID] ) )Invalid Stores =
FILTER(
ALL(Store[StoreID]),
NOT CONTAINSROW(
VALUES(Sales[StoreID]),
Store[StoreID]
)
)
รายชื่อสาขาที่ไม่มีการขายบันทึก
ตัวจริงแล้ว IN operator ทำงานเหมือน CONTAINSROW เลย ผมค่อนข้างมองว่า IN เป็น syntax ที่สะดวกกว่า เขียน Product[Color] IN {“Red”, “Blue”} ง่ายกว่า CONTAINSROW({“Red”, “Blue”}, Product[Color]) แต่ผลลัพธ์เหมือนเดิม
ต้องส่งให้เท่ากับจำนวนคอลัมน์ในตาราง เช่นตารางมี 2 คอลัมน์ต้องส่ง 2 ค่า ตาราง 3 คอลัมน์ต้องส่ง 3 ค่า เรียงตามลำดับคอลัมน์นะ ถ้าจำนวนไม่ตรง DAX จะขึ้น error
ผม highlight ตรงนี้เพราะสำคัญ CONTAINSROW ใช้ strict comparison หมายความว่า BLANK ไม่เท่ากับ 0 ตรงกันข้ามกับ = operator แบบปกติ ถ้าคอลัมน์มี BLANK และคุณส่ง 0 มา CONTAINSROW จะคืน FALSE เพราะมันถือว่าไม่ตรงกัน
ผมใช้ CONTAINSROW เวลาต้องตรวจสอบความสมบูรณ์ข้อมูล (data integrity) เช่น Product-Store mapping complete ไหม Customer สั่งซื้อครบทั้งประเทศไหม หรือต้อง lookup หลายคอลัมน์พร้อมกัน ถ้าเช็คแค่คอลัมน์เดียว CONTAINS หรือ IN ก็พอ
CONTAINSROW คือฟังก์ชันสำหรับเช็คว่ามีแถวใดในตารางที่ค่าคอลัมน์ทั้งหมดตรงกับที่ระบุหรือไม่ มันสำคัญเวลาต้องการทำ lookup แบบหลายคอลัมน์พร้อมกัน
ที่เจ๋งคือ CONTAINSROW ทำให้การเช็คค่าหลายคอลัมน์พร้อมกันง่ายขึ้น เทียบเสมือนว่าคุณมีรายชื่อคู่ (ProductID, StoreID) และต้องการรู้ว่ามีคู่ (101, 5) อยู่ในรายชื่อนั้นหรือไม่ ถ้าตัวเลขตรงครบ เงื่อนไขที่มีก็ให้ TRUE ส่วนตัวผมใช้ CONTAINSROW เวลาต้องทำ master-detail validation หรือ check data integrity ระหว่างตาราง