共用方式為


適當使用 error 函式

身為數據模型師,當您撰寫可能會引發評估timeerror的 DAX 表示式時,可以考慮採用兩個實用的 DAX 函式。

  • ISERROR 函式會採用單一表示式,and 會傳回表示式 TRUEif 該運算式會產生 error。
  • IFERROR 函式,其接受兩個表達式。 如果 first 表示式產生 error,則會傳回 second 表達式的 value。 在 fact 中,更優化地在 IF 函式內嵌 ISERROR 函式。

不過,雖然這些函式有助於 and 有助於撰寫容易理解的表達式,但它們也可以大幅降低計算的效能。 發生原因是因為這些函式會增加需要的儲存體引擎掃描數目。

大部分評估time 錯誤是由於非預期的 BLANK or 零 values,or 無效的数据類型轉換。

建議

最好避免使用 ISERRORandIFERROR 函式。 相反地,在開發模型時,針對 and 表達式撰寫應用防禦策略。 策略可以包括:

  • 確保質量數據載入模型中: 使用 Power 查詢轉換移除 orsubstitute 無效 or 遺漏 values,and 設定正確的數據類型。 當發生錯誤,例如無效的資料轉換時,也可以使用 Power 查詢轉換來 filter 資料列。

    資料品質也可以透過將模型資料行 Is Nullable 屬性設定為關閉 (這會在遇到 BLANK 時讓資料重新整理失敗) 來控制。 If 發生此失敗時,因為成功重新整理而載入的數據會保留在數據表中。

  • 使用 IF 函式:IF 函式的邏輯測試表達式可以用來判斷是否會產生 error 結果。 請注意,與 ISERRORandIFERROR 函式類似,此函式可能會導致額外的儲存引擎掃描,但由於不需要提出任何 error,執行效能可能會優於它們。

  • 使用 error容錯函式: 某些 DAX 函式會測試 and 補償 error 條件。 這些函式可讓您輸入替代結果來取代將會傳回的結果。 DIVIDE 函式就是其中一個範例。 如需此函式的其他指引,請閱讀 DAX:DIVIDE 函式與 divide 運算符 (/) 一文。

範例

下列 measure 表示式會測試是否會引發 error。 它會在此實例中傳回 BLANK(當您執行 not 提供 IF 函式時,value-if-false 表達式)。

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

這個 next 版本的 measure 表示式已藉由使用 IFERROR 函式來取代 IFandISERROR 函式來改善。

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

不過,這個最終版本的 measure 表達式會達到相同的結果,但更有效率地 and 優雅。

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