【问题标题】:IF performance on DAX formulaDAX 公式的 IF 表现
【发布时间】:2023-03-29 05:00:02
【问题描述】:

我陷入了简单的性能问题。 我有一个 RunningBalance 公式。我对这个公式没有任何问题。它给了我余额的最后一个非空值。 (我在行上有余额。)

然后我尝试使用此公式编写另一个公式。 目标很简单。新公式在 时不会显示任何内容(BLANK())

我试过了

RunningBalance:=CALCULATE (
    SUM ( DebitsAndCredits[balance]  );
    LASTNONBLANK (
        'Date'[Day];
        CALCULATE ( SUM (DebitsAndCredits[balance] ) )
    )
)

Newformula:=CALCULATE ( IF ( [RunningBalance] <= 0; BLANK (); [RunningBalance] ) )

我写了这个简单的公式。但是当我在行上使用 DocumentNumber 时它非常慢。

我怎样才能使这个公式更快?

【问题讨论】:

    标签: performance if-statement dax ssas-tabular


    【解决方案1】:

    无变量

    我会稍微改变要求并尝试将 IF 更改为:

    Newformula:=
    MAX(0, [RunningBalance])
    

    使用变量

    可能的增强功能如下:

    RunningBalance:=
    VAR _V1 = SUM (DebitsAndCredits[balance] )
    RETURN
    CALCULATE (
        SUM ( DebitsAndCredits[balance]  );
        LASTNONBLANK (
            'Date'[Day];
            _V1)
        )
    )
    

    和,

    Newformula:=
    VAR _V1 =  [RunningBalance]
    RETURN
    CALCULATE ( IF ( _V1 <= 0; BLANK (); _V1 ) )
    

    我还会检查以下表达式是否为您提供正确的结果:

    RunningBalance:=
    VAR _V1 = SUM (DebitsAndCredits[balance] )
    RETURN
    CALCULATE (
        _V1;
        LASTNONBLANK (
            'Date'[Day];
            _V1)
        )
    )
    

    否则,我会调查使用 LASTNONBLANK() 的需求,也许会找到不同的实现。

    【讨论】:

    • 非常感谢您的回答,但由于我的分析服务器版本,我无法使用 VAR 功能。 :(
    • SQL Server 2012 AS 表格版。我正在使用 VStudio 2010 来设计它。它给出了 Query (78, 57) Parser: The syntax for '_V1' is wrong.当我尝试添加您的公式时出错
    • 哎呀。没有 VAR 的 DAX 很痛苦。
    • @CemÜney 我更新了我的答案。请检查 MAX(0, [RunningBalance])
    • "传递给 MAX 函数的参数过多。函数的最大参数计数为 1。"哎呀
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多