| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| logical1 | Boolean | ค่าหรือนิพจน์ตรรกะตัวแรกที่ต้องการตรวจสอบ (TRUE หรือ FALSE) |
| logical2 | Boolean | ค่าหรือนิพจน์ตรรกะตัวที่สองที่ต้องการตรวจสอบ (TRUE หรือ FALSE) |
ฟังก์ชัน AND ใช้ตรวจสอบว่าเงื่อนไขตรรกะทั้งหมดเป็นจริงหรือไม่ โดยจะคืนค่า TRUE ก็ต่อเมื่อทุกอาร์กิวเมนต์มีค่าเป็น TRUE เท่านั้น หากมีเงื่อนไขใดเป็น FALSE จะได้ผลลัพธ์เป็น FALSE ทันที
ฟังก์ชันนี้สามารถรับอาร์กิวเมนต์ได้เพียง 2 ตัวเท่านั้น แต่ DAX มีตัวดำเนินการ && ที่ให้ความยืดหยุ่นและประสิทธิภาพดีกว่า โดยเชื่อมเงื่อนไขได้หลายตัวในสูตรเดียว
ส่วนตัวผมคิดว่า AND() ตอนนี้มีความสำคัญลดลงแล้ว เพราะ && ทำงานเหมือนกันแต่อ่านง่ายกว่า ดีกว่าไป หากคุณเห็นโค้ด AND() ในที่ใดก็ได้ ลอง refactor เป็น && ดู จะทำให้โค้ดเป็นสมัยใหม่มากขึ้น และง่ายต่อการบำรุงรักษา
ตรวจสอบว่าเงื่อนไขหลายตัวเป็นจริงพร้อมกันหรือไม่ เช่น ยอดขายเกินเป้าและมีกำไรที่ดี
สร้างเงื่อนไขที่ซับซ้อนในการกรองข้อมูล โดยต้องผ่านทุกเงื่อนไขที่กำหนด
ใช้ร่วมกับ IF เพื่อควบคุมการแสดงผลตามหลายเงื่อนไข เช่น แสดงผลเฉพาะรายการที่ตรงเงื่อนไขทั้งหมด
เมื่อทั้งสองค่าเป็น TRUE จะได้ผลลัพธ์เป็น TRUE เท่านั้น
เมื่อมีเงื่อนไขใดค่าหนึ่งเป็น FALSE ผลลัพธ์จะเป็น FALSE ทันที และ DAX จะไม่ประเมินค่าเงื่อนไขอื่นต่อไป (Short-circuit evaluation)
ตัวดำเนินการ && มีความยืดหยุ่นกว่า AND() เพราะเชื่อมเงื่อนไขได้หลายตัว โค้ดสั้นกว่า และอ่านง่ายกว่า ให้ประสิทธิภาพที่ดีกว่าเมื่อตรวจสอบเงื่อนไข 3 ตัวขึ้นไป
ตัวอย่างนี้แสดงการใช้ AND logic ร่วมกับ IF เพื่อสร้างหน่วยวัด (Measure) ที่ประเมินประสิทธิภาพ โดยตรวจสอบว่ายอดขายมากกว่า 1,000,000 และปริมาณสินค้ามากกว่า 100 หน่วยพร้อมกัน
ใช้ && ภายใน FILTER เพื่อตัดคำสั่งซื้อที่ตรงตามเงื่อนไขทั้งสามข้อ ตัวอย่างนี้แสดงกรณีที่ต้องตรวจสอบหลายเงื่อนไขพร้อมกัน ส่วนตัวผมชอบวิธีนี้เพราะชัดเจน อ่านง่าย และเป็นปฏิบัติที่ดี
AND() รับได้แค่ 2 อาร์กิวเมนต์ ดังนั้นถ้าต้องตรวจสอบเงื่อนไข 3 ตัวขึ้นไป จะต้องซ้อนกัน และ(และ(…)) ซึ่งอ่านยาก && ทำได้ง่ายกว่า: A && B && C นอกจากนี้ && ยังมีประสิทธิภาพดีกว่า
ควรใส่วงเล็บเพื่อความชัดเจน และช่วยป้องกันการตีความลำดับความสำคัญผิด เช่น (A && B) || (C && D) จะชัดเจนกว่า A && B || C && D
ใช่ ทั้งสองให้ผลลัพธ์ตรรกะเหมือนกัน แต่ && มีความยืดหยุ่นมากกว่า อ่านง่ายกว่า และเชื่อมเงื่อนไขได้หลายตัว
เมื่อ DAX พบเงื่อนไขแรกที่เป็น FALSE จะหยุดประเมินเงื่อนไขถัดไป และคืนค่า FALSE ทันที ช่วยประหยัด CPU และเร่งความเร็วสูตร
ฟังก์ชันที่ผู้เขียนโยงไว้กับ AND จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
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 ใช้กลับค่าตรรกะของนิพจน์ (TRUE ↔ FALSE) เหมาะกับการเขียนเงื่อนไขแบบปฏิเสธ และนิยมใช้ร่วมกับ IF/AND/OR เพื่อสร้างตรรกะที่อ่านชัดเจน
OR ตรวจสอบเงื่อนไขตรรกะ 2 ตัว และคืน TRUE เมื่อมีเงื่อนไขใดเงื่อนไขหนึ่งเป็น TRUE เหมาะกับการทำเงื่อนไขแบบ "อย่างน้อยหนึ่งข้อ" และนิยมเขียนด้วยตัวดำเนินการ || ในงานจริง
SWITCH เป็นฟังก์ชันตรรมชาติสำหรับจัดการหลายกรณี ช่วยให้หลีกเลี่ยง IF ซ้อนหลายชั้น และสามารถใช้รูปแบบ SWITCH(TRUE()) ได้ สำหรับเงื่อนไขแบบช่วง (>=, <=) หรือเงื่อนไขซับซ้อน
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 ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่