有人可以检查我对变量的理论理解是否正确吗?
假设我有一个包含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 ,并与经理讨论如何浪费大量时间。因此,你可以说我的工作取决于此。
即使变量包含表,也应将其视为常量。在你的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
因此,一个很好的经验法则是可变变量:-可用于创建过滤后的表,然后可将其用于在return语句中进行迭代(以便创建CALCULATE语句的Filter部分)-无法用于替换Expression以后应用哪个过滤器,因为即使使用CALCULATE,过滤器也无法工作?@sergiom
正确,变量也可以用作计算表达式中的过滤器参数。
因此,如果我对它的理解正确,那么我可以编写一个计算方法,其中我首先计算一个给出过滤表的变量(使用FILTER),然后在同一计算中编写一个第二变量,该变量也使用FILTER,使用的是第1个var的结果而不是Table的结果。然后写一个return语句,在这里我可以写一个对Var2产生的表进行迭代的表达式?
是的。也许有更有效的解决方案,但它可以工作
谢谢,我想我现在已经明白了(嗯,也许还不明白,但是我现在有一条规则,我可以从脑海中学习,希望理解会随着实践而发展)