Thep Excel

COALESCEคืนค่าแรกที่ไม่เป็น BLANK()

COALESCE คืนค่าแรกที่ไม่เป็น BLANK() จากหลายอาร์กิวเมนต์ เหมาะกับการกำหนดค่าเริ่มต้น (fallback) เช่น ใช้ค่า 0 เมื่อ Measure เป็น BLANK หรือเลือกค่าจากหลายแหล่งตามลำดับความสำคัญ

fx
=COALESCE(<expression1>, <expression2>[, <expression3>, …])

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
expression1 scalar นิพจน์ตัวแรกที่ต้องการตรวจสอบ ถ้าไม่เป็น BLANK() จะถูกคืนทันที
expression2 scalar นิพจน์สำรอง ถ้า expression1 เป็น BLANK() จะประเมินและเลือกตัวนี้แทน
[expression3]ไม่บังคับ scalar ไม่มีนิพจน์สำรองเพิ่มเติม นิพจน์สำรองเพิ่มเติม (ถ้ามี) สามารถใส่ได้หลายตัวตามต้องการ

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

COALESCE ใช้สำหรับเลือก “ค่าแรกที่ไม่เป็น BLANK()” จากรายการอาร์กิวเมนต์ที่ส่งเข้าไป หากประเมินอาร์กิวเมนต์ทั้งหมดแล้วกลับมาเป็น BLANK() ฟังก์ชันจะคืน BLANK()

ที่เจ๋งคือ COALESCE ช่วยให้ DAX code อ่านง่ายกว่า nested IF เมื่อต้องตั้งค่าหลายระดับ (fallback chain) เช่น “ใช้ Actual ถ้ามี ไม่มีก็ใช้ Budget ไม่มีก็ใช้ 0”

ส่วนตัวผม COALESCE ยังมีประโยชน์เพื่อลดปัญหาช่องว่างในรายงาน เพราะ BLANK ในตาราง/การ์ดอาจดูไม่มีข้อมูล แต่บ่อยครั้งแค่ค่าไม่ถูกคำนวณ ดังนั้นการแสดง 0 หรือข้อความแทน BLANK จึงทำให้รายงานชัดเจนมากขึ้น

How it works

แทนค่า BLANK ด้วย 0

ใช้เมื่ออยากให้ตาราง/การ์ดแสดง 0 แทนช่องว่าง เพื่ออ่านง่ายและนำไปคำนวณต่อได้

เลือกค่าจากหลายแหล่งตามลำดับความสำคัญ

เช่น ใช้ค่า Actual ก่อน ถ้าไม่มีค่อยใช้ Budget และถ้ายังไม่มีให้เป็น 0

Examples

ตัวอย่างที่ 1: แทน BLANK ด้วย 0Sales (Zero) = COALESCE([Total Sales], 0)

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

fx
=Sales (Zero) =
COALESCE([Total Sales], 0)

ผลลัพธ์ถ้า [Total Sales] เป็น BLANK() จะได้ 0
ตัวอย่างที่ 2: เลือกค่าตามลำดับ Actual → Budget → 0Value = COALESCE([Actual], [Budget], 0)

ถ้ามีค่า Actual จะใช้ Actual ทันที ถ้าไม่มี (BLANK) ค่อยใช้ Budget และถ้า Budget เป็น BLANK ด้วยจึงใช้ 0 เป็นค่าเริ่มต้น (fallback)

fx
Value =
COALESCE([Actual], [Budget], 0)

ผลลัพธ์คืนค่าแรกที่หาได้ตามลำดับ
ตัวอย่างที่ 3: ทำข้อความ fallback กับ SELECTEDVALUESelected Label = COALESCE(SELECTEDVALUE(Product[Category]), "(หลายค่า)")

SELECTEDVALUE คืน BLANK เมื่อมีการเลือกหลายค่า COALESCE จึงช่วยให้สามารถตั้งข้อความสำรองได้อย่างสะอาด

fx
Selected Label =
COALESCE(SELECTEDVALUE(Product[Category]), "(หลายค่า)")

ผลลัพธ์คืนชื่อ Category เมื่อมีค่าเดียว มิฉะนั้นคืน "(หลายค่า)"
ตัวอย่างที่ 4: ใช้กับเงื่อนไข Multiple CriteriaManager Name = COALESCE( RELATED(Employee[Manager]), RELATED(Department[DefaultManager]), "(ไม่มีผู้จัดการ)" )

ใช้ RELATED เพื่อดึงค่าจากตารางที่เชื่อมโยง ถ้าลิงก์แรกไม่มีข้อมูลจะไปใช้วิธีที่สอง นี่คือ context transition – COALESCE ทำงานได้ดีเพราะ RELATED อาจคืน BLANK

fx
Manager Name =
COALESCE(
RELATED(Employee[Manager]),
RELATED(Department[DefaultManager]),
"(ไม่มีผู้จัดการ)"
)

ผลลัพธ์คืนชื่อผู้จัดการจากตาราง Employee หรือ Department หรือข้อความสำรอง
ตัวอย่างที่ 5: ทำให้การรวมตัวเลขง่ายขึ้นTotal All Regions = SUMX( ALL(Sales[Region]), COALESCE([Regional Sales], 0) )

กับ SUMX และ ALL เมื่อมี Region ที่ไม่มียอดขาย [Regional Sales] จะเป็น BLANK COALESCE 0 ช่วยให้การรวมค่านับขาดน้อยลง

fx
Total All Regions =
SUMX(
ALL(Sales[Region]),
COALESCE([Regional Sales], 0)
)

ผลลัพธ์รวมยอดขายทั้งหมด แต่ใช้ 0 แทน BLANK

FAQs

COALESCE ต่างจาก IF ที่เช็ค BLANK อย่างไร?+

COALESCE เขียนสั้นและชัดเจนกว่าเมื่อต้อง fallback หลายระดับ เช่น =COALESCE(A,B,C) vs =IF(ISBLANK(A),IF(ISBLANK(B),C,B),A) ส่วน IF เหมาะกับตรรกะที่ซับซ้อนกว่าหรือเงื่อนไขที่ไม่ใช่ BLANK

COALESCE คืนค่าแบบไหนได้ไหม (ตัวเลข/ข้อความ/วันที่)?+

คืนค่าแบบ scalar ตามชนิดของนิพจน์ที่เป็น non-BLANK อาร์กิวเมนต์ต้องเข้ากันได้ (compatible) ถ้ามีชนิดต่างกัน DAX จะพยายามแปลงค่าให้ตรงกัน

ถ้าอาร์กิวเมนต์ทั้งหมดเป็น BLANK จะเกิดอะไร?+

COALESCE คืน BLANK() ทั้งหมด ดังนั้นถ้าต้องการค่าเริ่มต้นแน่นอน ให้ใส่ค่านั้นเป็นอาร์กิวเมนต์สุดท้าย

COALESCE มี filter context ไหม?+

ใช่ COALESCE ประเมินอาร์กิวเมนต์ในบริบท (context) เดียวกับที่เรียก ถ้าเขียนใน Measure COALESCE จะใช้ filter context ปัจจุบัน ส่วนถ้า COALESCE อ้างอิง CALCULATE มันจะ transition context ตามปกติ

Resources & Related

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

ฟังก์ชันนี้COALESCELogical
Logical (2)
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 อย่างเข้มงวด

IFERROR

IFERROR ใช้ดักจับข้อผิดพลาดในนิพจน์: ถ้า Value เกิด error จะคืนค่า ValueIfError แทน ถ้าไม่เกิด error จะคืนค่าของ Value เดิม เหมาะสำหรับการแปลงชนิดข้อมูล การหารที่อาจเป็นศูนย์ หรือ measure ที่ไม่เสถียร

Other (1)
BLANK

BLANK คืนค่าว่างเปล่า (Empty Value) ในDAX ซึ่งแตกต่างจาก 0 หรือ "" โดยใช้สำหรับระบุว่าไม่มีข้อมูล มักใช้ใน IF เพื่อซ่อนผลลัพธ์ที่ไม่ต้องการ

Relationship (1)
RELATED

RELATED คืนค่า scalar value (ค่าเดี่ยว) จากคอลัมน์ในตารางที่มีความสัมพันธ์แบบ many-to-one โดยอาศัย relationship ที่กำหนดไว้ในโมเดล ฟังก์ชันนี้ต้องการ row context และสามารถ traverse relationship chain ข้ามหลายขั้นได้ตราบใดที่ทุก relationship อยู่ในทิศทางเดียวกัน

Filter (1)
SELECTEDVALUE

SELECTEDVALUE ตรวจสอบว่า Filter Context ลดลงเหลือเพียงค่าเดียวแล้ว ถ้าใช่ให้คืนค่านั้น ถ้าไม่ใช่ให้คืนค่าอื่นแทน

Comments

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