適當使用錯誤函式
身為數據建模師,當您撰寫可能會在評估時引發錯誤的 DAX 表示式時,您可以考慮使用兩個很有幫助的 DAX 函式。
- ISERROR 函式會接受單一表達式,並在該表達式產生錯誤時傳回 TRUE。
- IFERROR 函式,其接受兩個表達式。 如果第一個表達式產生錯誤,則會傳回第二個表達式的值。 事實上,這是在 IF 函式內巢狀 ISERROR 函式的一個更優化的實現。
不過,雖然這些函式很有説明,而且有助於撰寫容易理解的表達式,但它們也可以大幅降低計算的效能。 發生原因是因為這些函式會增加需要的儲存體引擎掃描數目。
大部分的評估時間錯誤是由於非預期的空白或零值,或無效的資料型別轉換所造成。
建議
最好避免使用 ISERROR 和 IFERROR 函式。 相反地,在開發模型和撰寫表達式時套用防禦策略。 策略可以包括:
確保質量數據載入模型中: 使用Power Query轉換來移除或取代無效或遺漏的值,以及設定正確的數據類型。 Power Query 轉換也可以用來篩選錯誤時的數據列,例如無效的數據轉換。
資料品質也可以透過將模型資料行 Is Nullable 屬性設定為關閉 (這會在遇到 BLANK 時讓資料重新整理失敗) 來控制。 如果發生此失敗,由於成功重新整理而載入的數據將會保留在數據表中。
使用 IF 函式:IF 函式邏輯測試表達式可以判斷是否會發生錯誤結果。 請注意,如同 ISERROR 和 IFERROR 函式,此函式可能會導致額外的儲存引擎掃描,但執行效能可能會優於它們,因為不需要引發錯誤。
使用容錯函式: 部分 DAX 函式會測試並補償錯誤狀況。 這些函式可讓您輸入替代結果來取代將會傳回的結果。 DIVIDE 函式就是其中一個範例。 如需此函式的其他指引,請閱讀 DAX:DIVIDE 函式與除法運算符 (/) 一文。
範例
下列量值表示式會測試是否要引發錯誤。 它會在此實例中傳回 BLANK(這種情況出現在您沒有為 IF 函式提供一個"假時值"的表達式時)。
Profit Margin
= IF(ISERROR([Profit] / [Sales]))
這個下一版的量值表達式已藉由使用 IFERROR 函式來取代 IF 和 ISERROR 函式來改善。
Profit Margin
= IFERROR([Profit] / [Sales], BLANK())
不過,此量值表達式的最後一個版本可達成相同的結果,但更有效率且更優雅。
Profit Margin
= DIVIDE([Profit], [Sales])
相關內容
- 學習路徑:在Power BI Desktop 中使用 DAX
- 有任何問題嗎? 試試詢問 Power BI 社群論壇
- 有任何建議嗎? 提供點子來改善 Power BI