COALESCE คืนค่าแรกที่ไม่เป็น BLANK() จากหลายอาร์กิวเมนต์ เหมาะกับการกำหนดค่าเริ่มต้น (fallback) เช่น ใช้ค่า 0 เมื่อ Measure เป็น BLANK หรือเลือกค่าจากหลายแหล่งตามลำดับความสำคัญ
=COALESCE(<expression1>, <expression2>[, <expression3>, ...])
=COALESCE(<expression1>, <expression2>[, <expression3>, ...])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| expression1 | scalar | Yes | นิพจน์ตัวแรกที่ต้องการตรวจสอบ ถ้าไม่เป็น BLANK() จะถูกคืนทันที | |
| expression2 | scalar | Yes | นิพจน์สำรอง ถ้า expression1 เป็น BLANK() จะประเมินและเลือกตัวนี้แทน | |
| expression3 | scalar | Optional | ไม่มีนิพจน์สำรองเพิ่มเติม | นิพจน์สำรองเพิ่มเติม (ถ้ามี) สามารถใส่ได้หลายตัวตามต้องการ |
ใช้เมื่ออยากให้ตาราง/การ์ดแสดง 0 แทนช่องว่าง เพื่ออ่านง่ายและนำไปคำนวณต่อได้
เช่น ใช้ค่า Actual ก่อน ถ้าไม่มีค่อยใช้ Budget และถ้ายังไม่มีให้เป็น 0
Sales (Zero) = COALESCE([Total Sales], 0)=Sales (Zero) =
COALESCE([Total Sales], 0)
ถ้า [Total Sales] เป็น BLANK() จะได้ 0
Value = COALESCE([Actual], [Budget], 0)Value =
COALESCE([Actual], [Budget], 0)
คืนค่าแรกที่หาได้ตามลำดับ
Selected Label = COALESCE(SELECTEDVALUE(Product[Category]), "(หลายค่า)")Selected Label =
COALESCE(SELECTEDVALUE(Product[Category]), "(หลายค่า)")
คืนชื่อ Category เมื่อมีค่าเดียว มิฉะนั้นคืน "(หลายค่า)"
Manager Name = COALESCE( RELATED(Employee[Manager]), RELATED(Department[DefaultManager]), "(ไม่มีผู้จัดการ)" )Manager Name =
COALESCE(
RELATED(Employee[Manager]),
RELATED(Department[DefaultManager]),
"(ไม่มีผู้จัดการ)"
)
คืนชื่อผู้จัดการจากตาราง Employee หรือ Department หรือข้อความสำรอง
Total All Regions = SUMX( ALL(Sales[Region]), COALESCE([Regional Sales], 0) )Total All Regions =
SUMX(
ALL(Sales[Region]),
COALESCE([Regional Sales], 0)
)
รวมยอดขายทั้งหมด แต่ใช้ 0 แทน BLANK
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 ใช้สำหรับเลือก “ค่าแรกที่ไม่เป็น BLANK()” จากรายการอาร์กิวเมนต์ที่ส่งเข้าไป หากประเมินอาร์กิวเมนต์ทั้งหมดแล้วกลับมาเป็น BLANK() ฟังก์ชันจะคืน BLANK()
ที่เจ๋งคือ COALESCE ช่วยให้ DAX code อ่านง่ายกว่า nested IF เมื่อต้องตั้งค่าหลายระดับ (fallback chain) เช่น “ใช้ Actual ถ้ามี ไม่มีก็ใช้ Budget ไม่มีก็ใช้ 0”
ส่วนตัวผม COALESCE ยังมีประโยชน์เพื่อลดปัญหาช่องว่างในรายงาน เพราะ BLANK ในตาราง/การ์ดอาจดูไม่มีข้อมูล แต่บ่อยครั้งแค่ค่าไม่ถูกคำนวณ ดังนั้นการแสดง 0 หรือข้อความแทน BLANK จึงทำให้รายงานชัดเจนมากขึ้น