| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Value | Expression | นิพจน์หรือ measure ที่ต้องการเช็ค ถ้าเกิด error จะไปไกล่เกลี่ย |
| ValueIfError | Expression | ค่าที่จะคืนถ้า Value เกิด error จำเป็นต้องเป็นชนิดข้อมูลเดียวกับ Value |
IFERROR เป็นฟังก์ชัน DAX ที่ใช้ “ดักจับ error” และคืนค่าทดแทน มันทำงานในทั้ง measure และ calculated column
ที่สำคัญคือ IFERROR จะตรวจเช็ค expression ด้านซ้ายก่อน ถ้าเกิด error ก็คืน expression ด้านขวา ถ้าไม่เกิดอะไร ก็คืนผลลัพธ์เดิม
ส่วนตัวผม คิดว่า IFERROR เป็น “ตัวจม” ที่นิยม แต่บ้างครั้งมันกลบปัญหาข้อมูล ถ้าคุณเห็นการขึ้น error บ่อยๆ ควรแก้ที่ต้นเหตุก่อน (เช่นทำความสะอาดข้อมูล) แล้วใช้ IFERROR เป็นชั้นป้องกัน “เพื่องาน” ไม่ใช่ “เพื่อตกแต่ง” 😎
ถ้าข้อมูลแปลงไม่ได้ ให้คืน BLANK/0 แทน error
ลด error ที่ทำให้ visual แสดงผลผิดปกติ
บางครั้งอยากแตกแขนงเงื่อนไขมากกว่าแค่คืนค่าแทน
VALUE() อาจเกิด error เมื่อข้อความไม่ใช่ตัวเลข เช่น 'CODE-123' IFERROR ดักจับและคืน BLANK แทน ทำให้ report ไม่ขึ้น error แดง
แม้ DIVIDE มีการป้องกันหารด้วยศูนย์แล้ว แต่หากต้องการคืน 0 เมื่อ error สามารถใช้ IFERROR ครอบนอกได้
LOOKUPVALUE อาจเกิด error ถ้าค่าไม่พบหรือมีข้อมูลซ้ำ ป้องกันด้วย IFERROR เพื่อให้ report ทำงานต่อได้
บางครั้งต้องการรู้ว่า error เกิดจากไหน ใช้ IF + ISERROR ให้สมมุติได้มากกว่า IFERROR เพียงอย่างเดียว
ไม่ทั้งหมด 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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
COALESCE คืนค่าแรกที่ไม่เป็น BLANK() จากหลายอาร์กิวเมนต์ เหมาะกับการกำหนดค่าเริ่มต้น (fallback) เช่น ใช้ค่า 0 เมื่อ Measure เป็น BLANK หรือเลือกค่าจากหลายแหล่งตามลำดับความสำคัญ
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 ที่อาจประเมินทั้ง value_if_true และ value_if_false ทำให้ควรระวังเรื่อง performance และกรณีที่อีกแขนงอาจเกิด error แม้เงื่อนไขจะไม่เลือกแขนงนั้น
BLANK คืนค่าว่างเปล่า (Empty Value) ในDAX ซึ่งแตกต่างจาก 0 หรือ "" โดยใช้สำหรับระบุว่าไม่มีข้อมูล มักใช้ใน IF เพื่อซ่อนผลลัพธ์ที่ไม่ต้องการ
ERROR ฟังก์ชันที่หยุดการคำนวณและแสดงข้อความข้อผิดพลาดที่กำหนดเอง ใช้สำหรับการตรวจสอบข้อมูล (Data Validation) และจัดการสถานการณ์ที่ข้อมูลไม่ครบถ้วน เช่น ค่า Inflation Rate ที่หายไป หรือค่าจำเป็นที่ไม่พบ แทนการส่งค่าที่ไม่ถูกต้องหรือว่าง
VALUE แปลงข้อความที่แทนตัวเลขให้เป็นตัวเลข (decimal) เหมาะสำหรับข้อมูลนำเข้าที่ตัวเลขถูกเก็บเป็นข้อความหรือข้อมูลที่ไม่ทำความสะอาดอย่างถูกต้อง
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่