Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 在度量代码中间定义命名变量的DAX var_Powerbi_Dax - Fatal编程技术网

Powerbi 在度量代码中间定义命名变量的DAX var

Powerbi 在度量代码中间定义命名变量的DAX var,powerbi,dax,Powerbi,Dax,有人向我介绍了一种对函数的奇异利用。到目前为止,我在度量的开头遇到了VAR,正好在等号之后。请参阅下面的代码: Expected Result = SUMX ( VALUES ( Unique_Manager[Manager] ), VAR SumBrand = CALCULATE ( SUM ( Budget_Brand[BudgetBrand] ) ) VAR SumProduct = CALCULATE ( SUM ( Budget_Product[BudgetPr

有人向我介绍了一种对函数的奇异利用。到目前为止,我在度量的开头遇到了VAR,正好在等号之后。请参阅下面的代码:

Expected Result =
SUMX (
    VALUES ( Unique_Manager[Manager] ),
    VAR SumBrand = CALCULATE ( SUM ( Budget_Brand[BudgetBrand] ) )
    VAR SumProduct = CALCULATE ( SUM ( Budget_Product[BudgetProduct] ) )
    RETURN
        IF ( ISBLANK ( SumProduct ), SumBrand, SumProduct )
)
在这里,VAR深深地嵌套在度量代码中。不用说,这是VAR的一个奇妙特性。我一直在尝试在度量中使用该特性,但运气不佳。例如,这项工作:

Measure_good = CALCULATE( 
    SUM(table[Amount])
)
虽然这不起作用:

Measure_bad = CALCULATE( 
    VAR inside_measure = SUM(table[Amount])
)

以这种不寻常的方式使用VAR的规则是什么?

VAR语句需要匹配的
返回值。您可以一个接一个地声明多个变量,但必须使用
RETURN
命令将变量传递回主计算,然后可以在IF语句或其他任何语句中使用该变量进行计算

我还没有对此进行测试,但是您的度量值应该是这样的(尽管如果公式的所有剩余部分都返回变量,那么使用VAR没有多大意义)


当您通过VAR语句使用变量时,必须始终包含一个RETURN语句,以告知DAX您将使用这些变量并返回一个值。在上一个示例中,您没有包含RETURN语句,因此将得到一个错误。在第一个示例中,您有一个RETURN语句,因此没有错误。在第二个示例中,您没有使用变量。

我在文档中找到了相关信息:

作为参数传递给VAR的表达式可以包含另一个VAR 声明

引用变量时:

  • 度量值不能引用在度量值外部定义的变量 表达式,但可以引用中定义的函数范围变量 表情

  • 变量可以指度量

  • 变量可以引用以前定义的变量

  • 无法通过引用表变量中的列 TableName[ColumnName]语法


我一直尝试使用
RETURN
outside
CALCULATE
结束括号,但未成功。你的办法行得通。谢谢。当然,它会在计算之外失败。您需要考虑VAR声明的范围。如果这有助于解决您的问题,请按照(1)中的说明标记答案。是,您必须在变量之后使用RETURN。(2)否,您不必使用以前声明的命名变量作为回报。我已经测试过了。不,当然你不需要实际使用你声明的任何变量。但是,正如您现在知道的,您必须包含一个RETURN语句来告诉DAX您现在正在返回一个值。
Measure_bad = CALCULATE( 
    VAR inside_measure = SUM(table[Amount])
    RETURN
    inside_measure
)