Thep Excel

IFERRORคืนค่าแทนเมื่อเกิดข้อผิดพลาด

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

fx
=IFERROR(<Value>, <ValueIfError>)

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
Value Expression นิพจน์หรือ measure ที่ต้องการเช็ค ถ้าเกิด error จะไปไกล่เกลี่ย
ValueIfError Expression ค่าที่จะคืนถ้า Value เกิด error จำเป็นต้องเป็นชนิดข้อมูลเดียวกับ Value

Additional Notes

IFERROR เป็นฟังก์ชัน DAX ที่ใช้ “ดักจับ error” และคืนค่าทดแทน มันทำงานในทั้ง measure และ calculated column

ที่สำคัญคือ IFERROR จะตรวจเช็ค expression ด้านซ้ายก่อน ถ้าเกิด error ก็คืน expression ด้านขวา ถ้าไม่เกิดอะไร ก็คืนผลลัพธ์เดิม

ส่วนตัวผม คิดว่า IFERROR เป็น “ตัวจม” ที่นิยม แต่บ้างครั้งมันกลบปัญหาข้อมูล ถ้าคุณเห็นการขึ้น error บ่อยๆ ควรแก้ที่ต้นเหตุก่อน (เช่นทำความสะอาดข้อมูล) แล้วใช้ IFERROR เป็นชั้นป้องกัน “เพื่องาน” ไม่ใช่ “เพื่อตกแต่ง” 😎

How it works

แปลงข้อความเป็นตัวเลขแบบปลอดภัย

ถ้าข้อมูลแปลงไม่ได้ ให้คืน BLANK/0 แทน error

แสดง 0 แทน error ในรายงาน

ลด error ที่ทำให้ visual แสดงผลผิดปกติ

ใช้คู่กับ ISERROR เพื่อควบคุมตรรกะเอง

บางครั้งอยากแตกแขนงเงื่อนไขมากกว่าแค่คืนค่าแทน

Examples

ตัวอย่างที่ 1: ดักจับข้อผิดพลาดการแปลงข้อความเป็นตัวเลขจำนวนปลอดภัย = IFERROR( VALUE(Products[ProductCode]), BLANK() )

VALUE() อาจเกิด error เมื่อข้อความไม่ใช่ตัวเลข เช่น 'CODE-123' IFERROR ดักจับและคืน BLANK แทน ทำให้ report ไม่ขึ้น error แดง

fx
จำนวนปลอดภัย =
IFERROR(
VALUE(Products[ProductCode]),
BLANK()
)

ผลลัพธ์ถ้า ProductCode เป็นตัวเลข ได้ค่าตัวเลข ถ้าแปลงไม่ได้ได้ BLANK
ตัวอย่างที่ 2: ใช้กับ DIVIDE – ปลอดภัยกว่าอัตราส่วน = IFERROR( DIVIDE(SUM(Sales[Amount]), SUM(Sales[Quantity])), 0 )

แม้ DIVIDE มีการป้องกันหารด้วยศูนย์แล้ว แต่หากต้องการคืน 0 เมื่อ error สามารถใช้ IFERROR ครอบนอกได้

fx
อัตราส่วน =
IFERROR(
DIVIDE(SUM(Sales[Amount]), SUM(Sales[Quantity])),
0
)

ผลลัพธ์คืนอัตราส่วน ถ้า Quantity เป็น 0 จะได้ 0 แทน error
ตัวอย่างที่ 3: ป้องกัน error ในการค้นหาข้อมูล (LOOKUPVALUE)ราคาจากโต๏ = IFERROR( LOOKUPVALUE(Prices[Price], Prices[ProductID], Sales[ProductID]), 0 )

LOOKUPVALUE อาจเกิด error ถ้าค่าไม่พบหรือมีข้อมูลซ้ำ ป้องกันด้วย IFERROR เพื่อให้ report ทำงานต่อได้

fx
ราคาจากโต๏ =
IFERROR(
LOOKUPVALUE(Prices[Price], Prices[ProductID], Sales[ProductID]),
0
)

ผลลัพธ์หากหาข้อมูลไม่เจอ ได้ 0 แทน error
ตัวอย่างที่ 4: แยกพฤติกรรมข้อมูลด้วย IF + ISERRORสถานะคุณภาพ = IF( ISERROR(VALUE(Data[Score])), "ข้อมูลไม่สะอาด", "ข้อมูลปกติ" )

บางครั้งต้องการรู้ว่า error เกิดจากไหน ใช้ IF + ISERROR ให้สมมุติได้มากกว่า IFERROR เพียงอย่างเดียว

fx
สถานะคุณภาพ =
IF(
ISERROR(VALUE(Data[Score])),
"ข้อมูลไม่สะอาด",
"ข้อมูลปกติ"
)

ผลลัพธ์คืนข้อความตามสถานะ ถ้าแปลงไม่ได้ได้ 'ข้อมูลไม่สะอาด'

FAQs

IFERROR ดักจับ error ทั้งหมดได้หรือ?+

ไม่ทั้งหมด Microsoft Docs บอกว่า IFERROR 'ไม่สามารถดักจับ runtime error ทั้งหมด' ขึ้นอยู่กับ execution plan ของ DAX engine บางข้อผิดพลาดแบบ block mode อาจกลับไป error ได้ ถ้าต้องการการป้องกันที่มั่นคง ให้แก้ที่ต้นเหตุของข้อมูลก่อน

ควรใช้ IFERROR หรือ DIVIDE?+

สำหรับการหาร: ใช้ DIVIDE ก่อน เพราะออกแบบเพื่อจัดการหารด้วยศูนย์และอ่านง่ายกว่า แต่ IFERROR ใช้ได้กับ error ประเภทอื่น เช่น VALUE() VALUE() หรือ LOOKUPVALUE ที่อาจขึ้น error

IFERROR เสื่อมมาจากเมื่อไหร่?+

IFERROR มีมาตั้งแต่ DAX 2010 ยังคง active แต่ recommended approach ในปัจจุบันคือ: 1) แก้ข้อมูล 2) ใช้ DIVIDE สำหรับหาร 3) เช็ค logic ก่อนทำ IFERROR

IFERROR ใช้ได้กับ DirectQuery หรือไม่?+

ไม่ได้ IFERROR ไม่สนับสนุนใน DirectQuery mode สำหรับ calculated columns และ RLS rules ต้องใช้ alternative เช่น structure data ให้สะอาดก่อนนำเข้า Power BI

Resources & Related

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

ฟังก์ชันนี้IFERRORLogical
Logical (3)
COALESCE

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

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 อย่างเข้มงวด

IF.EAGER

IF.EAGER ทำงานเหมือน IF แต่ใช้แผน eager ที่อาจประเมินทั้ง value_if_true และ value_if_false ทำให้ควรระวังเรื่อง performance และกรณีที่อีกแขนงอาจเกิด error แม้เงื่อนไขจะไม่เลือกแขนงนั้น

Other (2)
BLANK

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

ERROR

ERROR ฟังก์ชันที่หยุดการคำนวณและแสดงข้อความข้อผิดพลาดที่กำหนดเอง ใช้สำหรับการตรวจสอบข้อมูล (Data Validation) และจัดการสถานการณ์ที่ข้อมูลไม่ครบถ้วน เช่น ค่า Inflation Rate ที่หายไป หรือค่าจำเป็นที่ไม่พบ แทนการส่งค่าที่ไม่ถูกต้องหรือว่าง

Text (1)
VALUE

VALUE แปลงข้อความที่แทนตัวเลขให้เป็นตัวเลข (decimal) เหมาะสำหรับข้อมูลนำเข้าที่ตัวเลขถูกเก็บเป็นข้อความหรือข้อมูลที่ไม่ทำความสะอาดอย่างถูกต้อง

Comments

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