美文网首页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