แชร์ผ่าน


การใช้ฟังก์ชันข้อผิดพลาดที่เหมาะสม

ในฐานะผู้สร้างแบบจําลองข้อมูล เมื่อคุณเขียนนิพจน์ DAX ที่อาจทําให้เกิดข้อผิดพลาดในการประเมินระยะเวลา คุณสามารถพิจารณาการใช้ฟังก์ชัน DAX ที่เป็นประโยชน์สองอย่างได้

  • ฟังก์ชัน ISERROR ซึ่งจะรับนิพจน์เดียวและแสดงค่า TRUE หากนิพจน์ดังกล่าวมีข้อผิดพลาด
  • ฟังก์ชัน IFERROR ซึ่งจะรับสองนิพจน์ หากนิพจน์แรกมีข้อผิดพลาด ค่าสําหรับนิพจน์ที่สองจะถูกส่งกลับ อันที่จริงแล้วเป็นการปรับการซ้อนฟังก์ชัน ISERROR ภายใน ฟังก์ชัน IF ให้เหมาะสมยิ่งขึ้น

อย่างไรก็ตาม แม้ว่าฟังก์ชันเหล่านี้จะมีประโยชน์และสามารถมีส่วนร่วมในการเขียนนิพจน์ที่เข้าใจได้ง่าย แต่ฟังก์ชันเหล่านี้ยังสามารถลดประสิทธิภาพการคํานวณได้อย่างมาก ซึ่งอาจเกิดขึ้นเนื่องจากฟังก์ชันเหล่านี้เพิ่มจํานวนการสแกนกลไกจัดการที่เก็บข้อมูลที่จําเป็น

ข้อผิดพลาดในการประเมินระยะเวลาส่วนใหญ่เกิดจาก BLANK หรือค่าศูนย์ที่ไม่คาดคิด หรือการแปลงชนิดข้อมูลที่ไม่ถูกต้อง

การแนะนำ

เป็นการดีกว่าที่จะหลีกเลี่ยงการใช้ฟังก์ชัน ISERROR และ IFERROR ให้ใช้กลยุทธ์การป้องกันเมื่อทําการพัฒนาแบบจําลองและการเขียนนิพจน์แทน กลยุทธ์สามารถรวมถึง:

  • ตรวจสอบให้แน่ใจว่าโหลดข้อมูลคุณภาพลงในแบบจําลอง: ใช้การแปลง Power Query เพื่อลบหรือแทนที่ค่าที่ไม่ถูกต้องหรือที่ขาดหายไป และตั้งค่าประเภทข้อมูลที่ถูกต้อง นอกจากนี้ ยังสามารถใช้การแปลง Power Query เพื่อกรองแถวเมื่อเกิดข้อผิดพลาด เช่น การแปลงข้อมูลที่ไม่ถูกต้อง

    ยังสามารถควบคุมคุณภาพข้อมูลได้โดยการตั้งค่าคอลัมน์ แบบจําลองคุณสมบัติเป็นค่าว่างได้ เพื่อปิด ซึ่งจะล้มเหลวในการรีเฟรชข้อมูลหากมีช่องว่าง หากเกิดความล้มเหลวนี้ ข้อมูลที่โหลดเนื่องจากการรีเฟรชที่สําเร็จจะยังคงอยู่ในตาราง

  • การใช้ฟังก์ชัน IF: นิพจน์การทดสอบเชิงตรรกะของฟังก์ชัน IF สามารถกําหนดได้ว่าผลลัพธ์ของข้อผิดพลาดจะเกิดขึ้นหรือไม่ หมายเหตุ ฟังก์ชันนี้อาจส่งผลให้มีการสแกนกลไกจัดการที่เก็บข้อมูลเพิ่มเติม แต่มีแนวโน้มที่จะทํางานได้ดียิ่งขึ้นเนื่องจากไม่มีข้อผิดพลาดที่จําเป็นต้องเกิดขึ้น เช่นเดียวกับฟังก์ชัน ISERROR และ IFERROR

  • การใช้ฟังก์ชันที่ทนต่อข้อผิดพลาด: ฟังก์ชัน DAX บางฟังก์ชันจะทดสอบและชดเชยเงื่อนไขของข้อผิดพลาด ฟังก์ชันเหล่านี้ช่วยให้คุณสามารถใส่ผลลัพธ์สํารองที่จะถูกส่งกลับแทน ฟังก์ชัน DIVIDE คือตัวอย่างหนึ่งดังกล่าว สําหรับคําแนะนําเพิ่มเติมเกี่ยวกับฟังก์ชันนี้ ให้อ่าน DAX: บทความฟังก์ชันการแบ่งเทียบกับตัวดําเนินการหาร (/)

ตัวอย่าง

นิพจน์หน่วยวัดต่อไปนี้จะทดสอบว่ามีข้อผิดพลาดเกิดขึ้นหรือไม่ ซึ่งจะส่งกลับค่า BLANK ในอินสแตนซ์นี้ (ซึ่งเป็นกรณีที่คุณไม่ได้ระบุฟังก์ชัน IF ด้วยนิพจน์ค่าหากเป็นเท็จ)

Profit Margin
= IF(ISERROR([Profit] / [Sales]))

เวอร์ชันถัดไปนี้ของนิพจน์หน่วยวัดได้รับการปรับปรุงโดยใช้ฟังก์ชัน IFERROR แทนฟังก์ชัน IF และ ISERROR

Profit Margin
= IFERROR([Profit] / [Sales], BLANK())

อย่างไรก็ตาม เวอร์ชันสุดท้ายของนิพจน์หน่วยวัดนี้ได้ผลลัพธ์เดียวกัน แต่มีประสิทธิภาพและสละสลวดมากกว่า

Profit Margin
= DIVIDE([Profit], [Sales])