Thep Excel

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

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

=IFERROR(<Value>, <ValueIfError>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
7/10

Difficulty
3/10

Usefulness
7/10

Syntax & Arguments

=IFERROR(<Value>, <ValueIfError>)

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

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 แดง
DAX Formula:

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

Result:

ถ้า ProductCode เป็นตัวเลข ได้ค่าตัวเลข ถ้าแปลงไม่ได้ได้ BLANK

ตัวอย่างที่ 2: ใช้กับ DIVIDE – ปลอดภัยกว่า
อัตราส่วน = IFERROR( DIVIDE(SUM(Sales[Amount]), SUM(Sales[Quantity])), 0 )
แม้ DIVIDE มีการป้องกันหารด้วยศูนย์แล้ว แต่หากต้องการคืน 0 เมื่อ error สามารถใช้ IFERROR ครอบนอกได้
DAX Formula:

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

Result:

คืนอัตราส่วน ถ้า Quantity เป็น 0 จะได้ 0 แทน error

ตัวอย่างที่ 3: ป้องกัน error ในการค้นหาข้อมูล (LOOKUPVALUE)
ราคาจากโต๏ = IFERROR( LOOKUPVALUE(Prices[Price], Prices[ProductID], Sales[ProductID]), 0 )
LOOKUPVALUE อาจเกิด error ถ้าค่าไม่พบหรือมีข้อมูลซ้ำ ป้องกันด้วย IFERROR เพื่อให้ report ทำงานต่อได้
DAX Formula:

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

Result:

หากหาข้อมูลไม่เจอ ได้ 0 แทน error

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

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

Result:

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

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

Additional Notes

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *