Thep Excel

ANDตรวจสอบเงื่อนไขตรรกะในDAX

ตรวจสอบว่าเงื่อนไขตรรกะทั้งหมดเป็นจริงหรือไม่ และคืนค่า TRUE เมื่อทุกเงื่อนไขเป็น TRUE

fx
=AND(<logical1>, <logical2>)

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
logical1 Boolean ค่าหรือนิพจน์ตรรกะตัวแรกที่ต้องการตรวจสอบ (TRUE หรือ FALSE)
logical2 Boolean ค่าหรือนิพจน์ตรรกะตัวที่สองที่ต้องการตรวจสอบ (TRUE หรือ FALSE)

Additional Notes

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

ฟังก์ชันนี้สามารถรับอาร์กิวเมนต์ได้เพียง 2 ตัวเท่านั้น แต่ DAX มีตัวดำเนินการ && ที่ให้ความยืดหยุ่นและประสิทธิภาพดีกว่า โดยเชื่อมเงื่อนไขได้หลายตัวในสูตรเดียว

ส่วนตัวผมคิดว่า AND() ตอนนี้มีความสำคัญลดลงแล้ว เพราะ && ทำงานเหมือนกันแต่อ่านง่ายกว่า ดีกว่าไป หากคุณเห็นโค้ด AND() ในที่ใดก็ได้ ลอง refactor เป็น && ดู จะทำให้โค้ดเป็นสมัยใหม่มากขึ้น และง่ายต่อการบำรุงรักษา

How it works

ตรวจสอบเงื่อนไขพร้อมกัน

ตรวจสอบว่าเงื่อนไขหลายตัวเป็นจริงพร้อมกันหรือไม่ เช่น ยอดขายเกินเป้าและมีกำไรที่ดี

กรองข้อมูลตามหลายเงื่อนไข

สร้างเงื่อนไขที่ซับซ้อนในการกรองข้อมูล โดยต้องผ่านทุกเงื่อนไขที่กำหนด

ควบคุมการแสดงผล

ใช้ร่วมกับ IF เพื่อควบคุมการแสดงผลตามหลายเงื่อนไข เช่น แสดงผลเฉพาะรายการที่ตรงเงื่อนไขทั้งหมด

Examples

ค่าตรรกะพื้นฐานAND(TRUE, TRUE)

เมื่อทั้งสองค่าเป็น TRUE จะได้ผลลัพธ์เป็น TRUE เท่านั้น

fx
=AND(TRUE, TRUE)

ผลลัพธ์TRUE
เงื่อนไขเบื้องต้นเมื่อมีค่าเป็น FALSEAND(TRUE, FALSE)

เมื่อมีเงื่อนไขใดค่าหนึ่งเป็น FALSE ผลลัพธ์จะเป็น FALSE ทันที และ DAX จะไม่ประเมินค่าเงื่อนไขอื่นต่อไป (Short-circuit evaluation)

fx
=AND(TRUE, FALSE)

ผลลัพธ์FALSE
ตัวดำเนินการ && (แนะนำสำหรับหลายเงื่อนไข)[Total Sales] > 1000000 && [Total Quantity] > 100 && [Year] = 2024

ตัวดำเนินการ && มีความยืดหยุ่นกว่า AND() เพราะเชื่อมเงื่อนไขได้หลายตัว โค้ดสั้นกว่า และอ่านง่ายกว่า ให้ประสิทธิภาพที่ดีกว่าเมื่อตรวจสอบเงื่อนไข 3 ตัวขึ้นไป

fx
[Total Sales] > 1000000 && [Total Quantity] > 100 && [Year] = 2024

ผลลัพธ์TRUE (เมื่อทั้งสามเงื่อนไขเป็นจริง)
ใช้ร่วมกับ IF ในหน่วยวัดPerformance Status = IF([Total Sales] > 1000000 && [Total Quantity] > 100, "Excellent", "Needs Improvement")

ตัวอย่างนี้แสดงการใช้ AND logic ร่วมกับ IF เพื่อสร้างหน่วยวัด (Measure) ที่ประเมินประสิทธิภาพ โดยตรวจสอบว่ายอดขายมากกว่า 1,000,000 และปริมาณสินค้ามากกว่า 100 หน่วยพร้อมกัน

fx
Performance Status = IF([Total Sales] > 1000000 && [Total Quantity] > 100, "Excellent", "Needs Improvement")

ผลลัพธ์"Excellent" (เมื่อทั้งสองเงื่อนไขเป็นจริง) หรือ "Needs Improvement"
การนับแถวที่ตรงตามเงื่อนไขหลายประการQualified Orders = COUNTROWS(FILTER(Orders, Orders[Amount] > 5000 && Orders[Status] = "Delivered" && Orders[Days Taken] < 7))

ใช้ && ภายใน FILTER เพื่อตัดคำสั่งซื้อที่ตรงตามเงื่อนไขทั้งสามข้อ ตัวอย่างนี้แสดงกรณีที่ต้องตรวจสอบหลายเงื่อนไขพร้อมกัน ส่วนตัวผมชอบวิธีนี้เพราะชัดเจน อ่านง่าย และเป็นปฏิบัติที่ดี

fx
Qualified Orders = COUNTROWS(FILTER(Orders, Orders[Amount] > 5000 && Orders[Status] = "Delivered" && Orders[Days Taken] < 7))

ผลลัพธ์จำนวนคำสั่งซื้อที่มียอดเงินมากกว่า 5,000 พร้อมสถานะเป็น Delivered และใช้เวลาส่งน้อยกว่า 7 วัน

FAQs

ทำไมถึงแนะนำให้ใช้ && แทน AND()?+

AND() รับได้แค่ 2 อาร์กิวเมนต์ ดังนั้นถ้าต้องตรวจสอบเงื่อนไข 3 ตัวขึ้นไป จะต้องซ้อนกัน และ(และ(…)) ซึ่งอ่านยาก && ทำได้ง่ายกว่า: A && B && C นอกจากนี้ && ยังมีประสิทธิภาพดีกว่า

ต้องใส่วงเล็บเมื่อใช้ทั้ง && และ || ไหม?+

ควรใส่วงเล็บเพื่อความชัดเจน และช่วยป้องกันการตีความลำดับความสำคัญผิด เช่น (A && B) || (C && D) จะชัดเจนกว่า A && B || C && D

AND() กับ && ให้ผลลัพธ์เหมือนกันไหม?+

ใช่ ทั้งสองให้ผลลัพธ์ตรรกะเหมือนกัน แต่ && มีความยืดหยุ่นมากกว่า อ่านง่ายกว่า และเชื่อมเงื่อนไขได้หลายตัว

Short-circuit evaluation คืออะไร?+

เมื่อ DAX พบเงื่อนไขแรกที่เป็น FALSE จะหยุดประเมินเงื่อนไขถัดไป และคืนค่า FALSE ทันที ช่วยประหยัด CPU และเร่งความเร็วสูตร

Resources & Related

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

ฟังก์ชันนี้ANDLogical
Logical (4)
IF

IF เป็นฟังก์ชันตรรกะพื้นฐานที่สำคัญที่สุดใน DAX ใช้สำหรับตรวจสอบเงื่อนไข (logical test) แล้วคืนค่าที่แตกต่างกันตามผลลัพธ์ว่าเป็นจริง (TRUE) หรือเท็จ (FALSE) สามารถใช้ได้ทั้งในบริบท calculated column, measure, calculated table และ visual calculation ซึ่งทำให้มีความยืดหยุ่นสูง คืนค่าเป็น scalar value ได้ทุกประเภท ไม่ว่าจะเป็นตัวเลข ข้อความ วันที่ หรือค่า boolean ถ้าไม่ระบุค่าสำหรับกรณีเท็จ (value_if_false) จะคืน BLANK() โดยอัตโนมัติ มีคุณสมบัติพิเศษคือ lazy evaluation behavior ที่ประมวลผลเฉพาะเส้นทาง (branch) ที่ถูกเลือกเท่านั้น ทำให้มีประสิทธิภาพในการทำงานที่ดี แตกต่างจาก Excel IF อย่างชัดเจนตรงที่ใช้รูปแบบอ้างอิงแบบ Table[Column] ทำงานภายใต้ filter context และแยกความแตกต่างระหว่าง BLANK กับ 0 อย่างเข้มงวด

NOT

NOT ใช้กลับค่าตรรกะของนิพจน์ (TRUE ↔ FALSE) เหมาะกับการเขียนเงื่อนไขแบบปฏิเสธ และนิยมใช้ร่วมกับ IF/AND/OR เพื่อสร้างตรรกะที่อ่านชัดเจน

OR

OR ตรวจสอบเงื่อนไขตรรกะ 2 ตัว และคืน TRUE เมื่อมีเงื่อนไขใดเงื่อนไขหนึ่งเป็น TRUE เหมาะกับการทำเงื่อนไขแบบ "อย่างน้อยหนึ่งข้อ" และนิยมเขียนด้วยตัวดำเนินการ || ในงานจริง

SWITCH

SWITCH เป็นฟังก์ชันตรรมชาติสำหรับจัดการหลายกรณี ช่วยให้หลีกเลี่ยง IF ซ้อนหลายชั้น และสามารถใช้รูปแบบ SWITCH(TRUE()) ได้ สำหรับเงื่อนไขแบบช่วง (>=, <=) หรือเงื่อนไขซับซ้อน

Filter (2)
CALCULATE

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

FILTER

FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน

Comments

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