IFERROR ใช้ดักจับข้อผิดพลาดในนิพจน์: ถ้า Value เกิด error จะคืนค่า ValueIfError แทน ถ้าไม่เกิด error จะคืนค่าของ Value เดิม เหมาะสำหรับการแปลงชนิดข้อมูล การหารที่อาจเป็นศูนย์ หรือ measure ที่ไม่เสถียร
=IFERROR(<Value>, <ValueIfError>)
=IFERROR(<Value>, <ValueIfError>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Value | Expression | Yes | นิพจน์หรือ measure ที่ต้องการเช็ค ถ้าเกิด error จะไปไกล่เกลี่ย | |
| ValueIfError | Expression | Yes | ค่าที่จะคืนถ้า Value เกิด error จำเป็นต้องเป็นชนิดข้อมูลเดียวกับ Value |
ถ้าข้อมูลแปลงไม่ได้ ให้คืน BLANK/0 แทน error
ลด error ที่ทำให้ visual แสดงผลผิดปกติ
บางครั้งอยากแตกแขนงเงื่อนไขมากกว่าแค่คืนค่าแทน
จำนวนปลอดภัย = IFERROR( VALUE(Products[ProductCode]), BLANK() )จำนวนปลอดภัย =
IFERROR(
VALUE(Products[ProductCode]),
BLANK()
)
ถ้า ProductCode เป็นตัวเลข ได้ค่าตัวเลข ถ้าแปลงไม่ได้ได้ BLANK
อัตราส่วน = IFERROR( DIVIDE(SUM(Sales[Amount]), SUM(Sales[Quantity])), 0 )อัตราส่วน =
IFERROR(
DIVIDE(SUM(Sales[Amount]), SUM(Sales[Quantity])),
0
)
คืนอัตราส่วน ถ้า Quantity เป็น 0 จะได้ 0 แทน error
ราคาจากโต๏ = IFERROR( LOOKUPVALUE(Prices[Price], Prices[ProductID], Sales[ProductID]), 0 )ราคาจากโต๏ =
IFERROR(
LOOKUPVALUE(Prices[Price], Prices[ProductID], Sales[ProductID]),
0
)
หากหาข้อมูลไม่เจอ ได้ 0 แทน error
สถานะคุณภาพ = IF( ISERROR(VALUE(Data[Score])), "ข้อมูลไม่สะอาด", "ข้อมูลปกติ" )สถานะคุณภาพ =
IF(
ISERROR(VALUE(Data[Score])),
"ข้อมูลไม่สะอาด",
"ข้อมูลปกติ"
)
คืนข้อความตามสถานะ ถ้าแปลงไม่ได้ได้ 'ข้อมูลไม่สะอาด'
ไม่ทั้งหมด Microsoft Docs บอกว่า IFERROR ‘ไม่สามารถดักจับ runtime error ทั้งหมด’ ขึ้นอยู่กับ execution plan ของ DAX engine บางข้อผิดพลาดแบบ block mode อาจกลับไป error ได้ ถ้าต้องการการป้องกันที่มั่นคง ให้แก้ที่ต้นเหตุของข้อมูลก่อน
สำหรับการหาร: ใช้ DIVIDE ก่อน เพราะออกแบบเพื่อจัดการหารด้วยศูนย์และอ่านง่ายกว่า แต่ IFERROR ใช้ได้กับ error ประเภทอื่น เช่น VALUE() VALUE() หรือ LOOKUPVALUE ที่อาจขึ้น error
IFERROR มีมาตั้งแต่ DAX 2010 ยังคง active แต่ recommended approach ในปัจจุบันคือ: 1) แก้ข้อมูล 2) ใช้ DIVIDE สำหรับหาร 3) เช็ค logic ก่อนทำ IFERROR
ไม่ได้ IFERROR ไม่สนับสนุนใน DirectQuery mode สำหรับ calculated columns และ RLS rules ต้องใช้ alternative เช่น structure data ให้สะอาดก่อนนำเข้า Power BI
IFERROR เป็นฟังก์ชัน DAX ที่ใช้ “ดักจับ error” และคืนค่าทดแทน มันทำงานในทั้ง measure และ calculated column
ที่สำคัญคือ IFERROR จะตรวจเช็ค expression ด้านซ้ายก่อน ถ้าเกิด error ก็คืน expression ด้านขวา ถ้าไม่เกิดอะไร ก็คืนผลลัพธ์เดิม
ส่วนตัวผม คิดว่า IFERROR เป็น “ตัวจม” ที่นิยม แต่บ้างครั้งมันกลบปัญหาข้อมูล ถ้าคุณเห็นการขึ้น error บ่อยๆ ควรแก้ที่ต้นเหตุก่อน (เช่นทำความสะอาดข้อมูล) แล้วใช้ IFERROR เป็นชั้นป้องกัน “เพื่องาน” ไม่ใช่ “เพื่อตกแต่ง” 😎