共用方式為


適當使用錯誤函式

身為數據建模師,當您撰寫可能會在評估時引發錯誤的 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])