更新 DAX 中的变量值

Updating the values of variables in DAX

我需要在 dax 的一个开关中更改变量的值:

switch( true(),
    
    condition1,

    var test1 = 2
    var test2 = 3

    ,condition 2,

    var test1 = 4
    var test2 = 5

    ,
    var test1 = 7
    var test2 = 6       
)

我需要这样做,因为我必须根据条件更改大量变量,而且我不想为每个变量都设置一个开关。

我已经用 switch 尝试过这种方法,它在没有变量的情况下也能工作。 这就像dax不允许你在第一次赋值后改变变量的值。


编辑

你好,下面是我想要实现的例子:

Value Daily Form = 




SWITCH( true(),

// if both are selected
(ISFILTERED(tblAAA[AAA_name]) && ISFILTERED(tblBBB[BBB_name])),


    var Target = sum(F_Daily_AAA_BBB[target])
    var TotalPayments = sum(F_Daily_AAA_BBB[vlr_total_payment])


// if AAA is selected
, (ISFILTERED(tblAAA[AAA_name]) && not(ISFILTERED(tblBBB[BBB_name]))),



    var Target = sum(F_Daily_AAA[target])
    var TotalPayments = sum(F_Daily_AAA[vlr_total_payment])



// if BBB is selected
, (not(ISFILTERED(tblAAA[AAA_name])) && ISFILTERED(tblBBB[BBB_name])),


    var Target = sum(F_Daily_BBB[target])
    var TotalPayments = sum(F_Daily_BBB[vlr_total_payment])


// none is selected
,



    var Target = sum(F_Daily_OR[target])
    var TotalPayments = sum(F_Daily_OR[vlr_total_payment])
    
)


var result =  
    SWITCH(FIRSTNONBLANK(tblKPIs[Group_Name], tblKPIs[Group_Name]),

    "Target (€)", IF(Target > 0, FORMAT(Target,  "€ #,##"), if(SELECTEDVALUE('Calendar'[isWorkingDay]) = 1, "€ 0", BLANK())), 
    "Total Payments (€)", IF(TotalPayments > 0, FORMAT(TotalPayments,  "€ #,##"), IF(SELECTEDVALUE('Calendar'[isWorkingDay]) = 1, "€ 0", BLANK())), 
    
)
return result    

一开始我要修改的代码是:

Value Daily Form = 







    var Target = sum(F_Daily_OR[target])
    var TotalPayments = sum(F_Daily_OR[vlr_total_payment])
    



var result =  
    SWITCH(FIRSTNONBLANK(tblKPIs[Group_Name], tblKPIs[Group_Name]),

    "Target (€)", IF(Target > 0, FORMAT(Target,  "€ #,##"), if(SELECTEDVALUE('Calendar'[isWorkingDay]) = 1, "€ 0", BLANK())), 
    "Total Payments (€)", IF(TotalPayments > 0, FORMAT(TotalPayments,  "€ #,##"), IF(SELECTEDVALUE('Calendar'[isWorkingDay]) = 1, "€ 0", BLANK())), 
    
)
return result    

唯一的区别是这里有 75 个变量,而不是 2 个变量, 而且我不想对它们中的每一个进行切换,因为这会使代码变得面条化。

我还必须修改大约 50 个充满变量的指标,所以我需要一个像那个开关一样的快速复制粘贴解决方案,它在代码没有变量的其他情况下有效。

感谢您抽出宝贵时间帮助我。

确实如此,因为DAX中的变量实际上是常量。变量是不可变的。您可以将值存储在变量中,但以后不能更改它。

这是文档中 DAX 变量的定义:

Stores the result of an expression as a named variable, which can then be passed as an argument to other measure expressions. Once resultant values have been calculated for a variable expression, those values do not change, even if the variable is referenced in another expression.

documentation 中查找更多信息。

你到底想通过这个达到什么目的? 为每个条件创建单独的度量,然后使用切换条件创建另一个度量对您不起作用吗?