Warm tip: This article is reproduced from serverfault.com, please click

powerbi-DAX:请检查我是否正确理解DAX中Variabes的使用

(powerbi - DAX: please check if I understood the use of Variabes in DAX correctly)

发布于 2020-11-29 09:11:20

有人可以检查我对变量的理论理解是否正确吗?

假设我有一个包含2列的表,即Condition1和Condition2。我要计算Condition1 = 4和Condition2 = Black的行。

假设我编写了一个称为Black的度量,它创建了一个Table,其中所有行的Condition2 =“ Black”。例如:

Black:= FILTER (Table, Condition2 = "Black")

然后,我使用变量编写组合的代码:

Black4_version1 = 
var B = [Black]
return = CALCULATE(
COUNTROWS(B),
Condition1 = 4)

然后,此代码将无法工作,因为DAX认为变量B是单个数字(因为它正在调用度量,并且默认情况下度量被视为单个值?),即使我创建了应该创建表的度量。

但是,如果我在变量本身中创建表,那么DAX会知道它是一个表,然后它将起作用吗?

Black4_Version2 = 
var B = FILTER (Table, Condition2 = "Black")
return = CALCULATE(
COUNTROWS(B),
Condition1 = 4)

我之所以这样询问,是因为我想100%确保我已理解此处给出的答案:DAX:请解释为什么使用变量进行此度量行不通,因为我一直在使用变量,所以我需要重新检查我已建立的所有 dashboard ,并与经理讨论如何浪费大量时间。因此,你可以说我的工作取决于此。

Questioner
Lya
Viewed
0
sergiom 2020-11-29 18:27:49

即使变量包含表,也应将其视为常量。在你的Black4_Version2衡量标准中,这CALCULATE()不会改变COUNTROWS(B)结果,因为它是对常量表中的行进行计数,并且不会进行任何过滤。

Black4_Version2 =
VAR B =
    FILTER(
        Table,
        Condition2 = "Black"
    )
RETURN
    CALCULATE(
        COUNTROWS( B ),
        Condition1 = 4
    )

但是你可以遍历常量表,因此FILTER可以正常工作

Black4_Version3 =
VAR B =
    FILTER(
        Table,
        Condition2 = "Black"
    )
RETURN
    COUNTROWS(
        FILTER(
            B,
            Condition1 = 4
        )
    )

PS我使用了答案中使用的伪DAX sintax,因为它代替Condition1 = 4了类似的列引用Table[Column1] = 4 should be used