| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| expression1 | scalar | นิพจน์ตัวแรกที่ต้องการตรวจสอบ ถ้าไม่เป็น BLANK() จะถูกคืนทันที | |
| expression2 | scalar | นิพจน์สำรอง ถ้า expression1 เป็น BLANK() จะประเมินและเลือกตัวนี้แทน | |
| [expression3]ไม่บังคับ | scalar | ไม่มีนิพจน์สำรองเพิ่มเติม | นิพจน์สำรองเพิ่มเติม (ถ้ามี) สามารถใส่ได้หลายตัวตามต้องการ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
COALESCE ใช้สำหรับเลือก “ค่าแรกที่ไม่เป็น BLANK()” จากรายการอาร์กิวเมนต์ที่ส่งเข้าไป หากประเมินอาร์กิวเมนต์ทั้งหมดแล้วกลับมาเป็น BLANK() ฟังก์ชันจะคืน BLANK()
ที่เจ๋งคือ COALESCE ช่วยให้ DAX code อ่านง่ายกว่า nested IF เมื่อต้องตั้งค่าหลายระดับ (fallback chain) เช่น “ใช้ Actual ถ้ามี ไม่มีก็ใช้ Budget ไม่มีก็ใช้ 0”
ส่วนตัวผม COALESCE ยังมีประโยชน์เพื่อลดปัญหาช่องว่างในรายงาน เพราะ BLANK ในตาราง/การ์ดอาจดูไม่มีข้อมูล แต่บ่อยครั้งแค่ค่าไม่ถูกคำนวณ ดังนั้นการแสดง 0 หรือข้อความแทน BLANK จึงทำให้รายงานชัดเจนมากขึ้น
ใช้เมื่ออยากให้ตาราง/การ์ดแสดง 0 แทนช่องว่าง เพื่ออ่านง่ายและนำไปคำนวณต่อได้
เช่น ใช้ค่า Actual ก่อน ถ้าไม่มีค่อยใช้ Budget และถ้ายังไม่มีให้เป็น 0
เหมาะกับการแสดงผลในตารางหรือการ์ด เพื่อไม่ให้มีช่องว่าง เมื่อไม่มีข้อมูลในช่วงเวลาหรือกลุ่มที่เลือก ยังอ่านง่ายขึ้นด้วย
ถ้ามีค่า Actual จะใช้ Actual ทันที ถ้าไม่มี (BLANK) ค่อยใช้ Budget และถ้า Budget เป็น BLANK ด้วยจึงใช้ 0 เป็นค่าเริ่มต้น (fallback)
SELECTEDVALUE คืน BLANK เมื่อมีการเลือกหลายค่า COALESCE จึงช่วยให้สามารถตั้งข้อความสำรองได้อย่างสะอาด
ใช้ RELATED เพื่อดึงค่าจากตารางที่เชื่อมโยง ถ้าลิงก์แรกไม่มีข้อมูลจะไปใช้วิธีที่สอง นี่คือ context transition – COALESCE ทำงานได้ดีเพราะ RELATED อาจคืน BLANK
กับ SUMX และ ALL เมื่อมี Region ที่ไม่มียอดขาย [Regional Sales] จะเป็น BLANK COALESCE 0 ช่วยให้การรวมค่านับขาดน้อยลง
COALESCE เขียนสั้นและชัดเจนกว่าเมื่อต้อง fallback หลายระดับ เช่น =COALESCE(A,B,C) vs =IF(ISBLANK(A),IF(ISBLANK(B),C,B),A) ส่วน IF เหมาะกับตรรกะที่ซับซ้อนกว่าหรือเงื่อนไขที่ไม่ใช่ BLANK
คืนค่าแบบ scalar ตามชนิดของนิพจน์ที่เป็น non-BLANK อาร์กิวเมนต์ต้องเข้ากันได้ (compatible) ถ้ามีชนิดต่างกัน DAX จะพยายามแปลงค่าให้ตรงกัน
COALESCE คืน BLANK() ทั้งหมด ดังนั้นถ้าต้องการค่าเริ่มต้นแน่นอน ให้ใส่ค่านั้นเป็นอาร์กิวเมนต์สุดท้าย
ใช่ COALESCE ประเมินอาร์กิวเมนต์ในบริบท (context) เดียวกับที่เรียก ถ้าเขียนใน Measure COALESCE จะใช้ filter context ปัจจุบัน ส่วนถ้า COALESCE อ้างอิง CALCULATE มันจะ transition context ตามปกติ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ COALESCE จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
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 อย่างเข้มงวด
IFERROR ใช้ดักจับข้อผิดพลาดในนิพจน์: ถ้า Value เกิด error จะคืนค่า ValueIfError แทน ถ้าไม่เกิด error จะคืนค่าของ Value เดิม เหมาะสำหรับการแปลงชนิดข้อมูล การหารที่อาจเป็นศูนย์ หรือ measure ที่ไม่เสถียร
BLANK คืนค่าว่างเปล่า (Empty Value) ในDAX ซึ่งแตกต่างจาก 0 หรือ "" โดยใช้สำหรับระบุว่าไม่มีข้อมูล มักใช้ใน IF เพื่อซ่อนผลลัพธ์ที่ไม่ต้องการ
RELATED คืนค่า scalar value (ค่าเดี่ยว) จากคอลัมน์ในตารางที่มีความสัมพันธ์แบบ many-to-one โดยอาศัย relationship ที่กำหนดไว้ในโมเดล ฟังก์ชันนี้ต้องการ row context และสามารถ traverse relationship chain ข้ามหลายขั้นได้ตราบใดที่ทุก relationship อยู่ในทิศทางเดียวกัน
SELECTEDVALUE ตรวจสอบว่า Filter Context ลดลงเหลือเพียงค่าเดียวแล้ว ถ้าใช่ให้คืนค่านั้น ถ้าไม่ใช่ให้คืนค่าอื่นแทน
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่