在DAX公式中,变量是我们经常会使用的一个技巧,方便我们对复杂的公式能够显得的更清楚些,但是变量是一个稳定值,也就是变量的计算的值是固定的,对筛选上下文的影响会忽略。
我们来看一个案例:
表1
姓名 | 学科 | 成绩 |
---|---|---|
张三 | 数学 | 100 |
李四 | 语文 | 90 |
王五 | 英语 | 80 |
1. 我们设置一个度量值为总分。
总分:=sum('表1'[成绩])
2. 引用度量进行计算:
Calculate([总分],'表1'[姓名]="张三")
返回结果100。
3. 引用变量进行计算:
Var zf= sum('表1'[成绩])
Return Calculate(zf,'表1'[姓名]="张三")
返回结果270。
这里就存在一个var赋值后的结果可以忽略筛选条件的影响。
所以我们很多时候会利用这个特性来进行计算,大部分场合下可以替代earlier和earliest函数的特性。
我们看一个之前讲解过的累计求和的问题。
1. 添加列写法
2. 度量值写法
累计_度量值:=Calculate(Sum('表2'[金额]),
Filter(All('表2'[时间]),
'表2'[时间]<=Max('表2'[时间])
)
)
3. 万能变量Var写法
累计_var_大于开始小于结束 =
var kssj=Calculate(Min('表2'[时间]),All('表2'[时间])) //开始时间
var jssj=Max('表2'[时间]) //结束时间
return
Calculate(Sum([金额]),Filter(All('表2'[时间]),
'表2'[时间]>=kssj && '表2'[时间]<=jssj
)
)
解释:
因为如果结束值单独只写Min('表2'[时间])的话,我们得到的结果是>=min的最小值和<=max的值只能是一个,也就是当前值。
我们只需要改变开始时间就可以把DAX自带的几个智能时间函数做一个统一的写法格式。
例如:
TotalYtd/ DatesYtd:
kssj= StartOfYear('表2'[时间])
TotalQtd/ DatesQtd:
kssj = StartOfQuarter('表2'[时间])
TotalMtd/ DatesMtd:
kssj = StartOfMonth('表2'[时间])
累计至今:
开始时间=Calculate(Min('表2'[时间]),All('表2'[时间]))
我们可以考虑下,如果是星期累计,我们需要使用什么样的方法来实现?
模拟操作文件下载:http://gofile.me/4KHV7/kXpjlJ2pG
如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。