美文网首页PowerBI专栏
DAX优化-避免使用错误函数

DAX优化-避免使用错误函数

作者: PowerBI星球 | 来源:发表于2020-02-16 18:35 被阅读0次

在DAX中,拦截错误的函数是IFERROR,,它很简单也很好用,需要注意处理错误的函数可能会在代码中造成严重的性能问题。这并不是因为它们本身缓慢。问题主要是在于发生错误时,DAX 引擎无法在其代码中使用优化的路径。在大多数情况下,检查运算对象比检查错误(使用错误处理引擎)更有效。

例如,不要这样写: 

IFERROR (

   SQRT ( Test[Omega] ),

   BLANK ()

)

如下的写法是更好的:

IF (

   Test[Omega] >= 0,

   SQRT ( Test[Omega] ),

   BLANK ()

)

第二个表达式不需要检测错误,并且比前一个表达式更快。

避免 IFERROR 的另一个原因是,它无法拦截在更深层次的执行中所发生的错误。例如,以下代码拦截在 Table[Amount] 列的转换中发生的任何错误,用空白值来防止 Table [Amount] 列发生不包含数字的状况。正如前面讨论的,这样的执行代价很高,因为它对表中的每一行都进行了计算。

SUMX ( 

    Table, 

    IFERROR ( VALUE ( Table[Amount] ), BLANK () )

)

请注意,由于在 DAX 引擎中进行了优化,下面的代码不会拦截前面示例截获的相同错误。如果 Table[Amount] 列在某一行中包含了不是数字的字符串,则整个表达式会生成一个不是被 IFERROR 拦截的错误。

IFERROR ( 

    SUMX ( 

        Table, 

        VALUE ( Table[Amount] )

    ), 

    BLANK () 

)

ISERROR 与 IFERROR 具有相同的行为。请务必谨慎使用它们,并且只拦截由 IFERROR / ISERROR 中 计算的表达式直接引起的错误,而不用于嵌套计算。

《DAX圣经》学习笔记


采悟 @ Power BI星球

相关文章

网友评论

    本文标题:DAX优化-避免使用错误函数

    本文链接:https://www.haomeiwen.com/subject/lpdmfhtx.html