使用IF和AND函数进行DAX

时间:2018-07-18 07:10:18

标签: powerbi dax

我正在尝试创建带有值和预测的趋势表。预测需要从当前月份开始。我正在使用此dax函数:

Spend Forecast =
IF (
    OR (
        DIVIDE (
            CALCULATE (
                SUM ( refv_Spend_Cap[Spend_2019] ),
                FILTER ( refv_Spend_Cap, refv_Spend_Cap[Split] = "Spend Actual" )
            ),
            1000000
        )
            < 1,
        DIVIDE (
            CALCULATE (
                SUM ( refv_Spend_Cap[Spend_2019] ),
                FILTER ( refv_Spend_Cap, refv_Spend_Cap[Ind_Monthend] = "x" )
            ),
            1000000
        )
            < 1
    ),
    DIVIDE (
        CALCULATE (
            SUM ( refv_Spend_Cap[Spend_2019] ),
            FILTER ( refv_Spend_Cap, refv_Spend_Cap[Split] = "Spend Forecast" )
        ),
        1000000
    ),
    ""
)

该公式正在计算以检查是否满足这两个条件:  如果没有值,则填充预测;如果ind monthend ='x',则应填充该预测;如果不满足这两个条件,则应将其留空。 查询上没有语法错误,但出现此错误:

  

True / False表达式未指定列。每个对/错   用作表过滤器表达式的表达式必须完全引用   一栏

我哪里出错了?

1 个答案:

答案 0 :(得分:2)

很难理解这么长的公式。最好的做法是将它们分解为多种度量。例如,您的代码可以按以下方式重新编写:

创建基本指标:

Total Spend = SUM ( refv_Spend_Cap[Spend_2019] ) / 1000000

现在重新使用基本度量来创建3个条件度量。无需在此处使用FILTER:

Spend Actual = CALCULATE ( [Total Spend], refv_Spend_Cap[Split] = "Spend Actual" )

Spend X = CALCULATE ( [Total Spend], refv_Spend_Cap[Ind_Monthend] = "x" )

Spend Forecast = CALCULATE ( [Total Spend], refv_Spend_Cap[Split] = "Spend Forecast" )

那么最终结果就是:

Forecast = IF ( [Spend Actual] < 1 || [Spend X] < 1, [Spend Forecast], "")

了解正在发生的事情非常容易,并且更容易调试。由于(通常)重复使用的度量仅被缓存和计算一次,因此您还将获得性能提升。

请尝试使用此代码,如果它仍然给您带来问题,请描述新错误,我们将帮助您解决。

顺便说一句,有一个流行的免费工具可以格式化您的DAX代码: Dax Formatter