最近白茶有点私事,停更了许久。忙完了,可以静心的学习DAX。继续研究圣经。最开始的时候,偶尔曾经看到一篇文章就是专门介绍VAR函数的,但是当时看的懵懵懂懂。如今再看,添加了很多的明悟。
在白茶的理解,VAR函数最主要的作用有两点:优化代码和定义常量。
优化代码:
咱来举个例子看看,白茶之前有一期曾经专门介绍过《动态坐标》,当时就用了很多的VAR写法。
这个就是当时使用的一组代码,用它说事:
IF写法动态坐标 =
VAR BC3 =
TREATAS ( VALUES ( '名称与城市维度'[具体内容] ), '产品表'[产品名称] )
VAR BC4 =
TREATAS ( VALUES ( '名称与城市维度'[具体内容] ), '门店表'[城市] )
RETURN
IF (
SELECTEDVALUE ( '名称与城市维度'[名称与城市维度] ) = "商品名称",
CALCULATE ( [销售金额], BC3 ),
IF (
SELECTEDVALUE ( '名称与城市维度'[名称与城市维度] ) = "城市",
CALCULATE ( [销售金额], BC4 ),
BLANK ()
)
)
这段代码看起来非常的冗长,但是实际上这是已经优化后的结果了。接下来白茶修改一下,不论这个代码是否可行,就是单纯的不使用VAR,那么它的写法就是下面这样:
IF写法动态坐标 =
IF (
SELECTEDVALUE ( '名称与城市维度'[名称与城市维度] ) = "商品名称",
CALCULATE ( [销售金额], TREATAS ( VALUES ( '名称与城市维度'[具体内容] ), '产品表'[产品名称] ) ),
IF (
SELECTEDVALUE ( '名称与城市维度'[名称与城市维度] ) = "城市",
CALCULATE ( [销售金额], TREATAS ( VALUES ( '名称与城市维度'[具体内容] ), '门店表'[城市] ) ),
BLANK ()
)
)
姑且不论能否得出正确的结果,就是这段代码本身会变得不好理解。第一种写法,我们能清楚的知道定义的两个VAR分别代表着什么。但是一但拆开放入到CALCULATE中,会显得特别懵,而且很容易出现写法上的错误。
就好像我们小时候解答应用题:
已经求出来∠A=30°了,那么后续所有的操作就都可以使用∠A直接带入,而不用将之前求∠A的繁琐过程写进去。
定义常量:
还是举个例子,之前的《帕累托分析法的BUG》曾经使用过的一组累计代码。
用这个代码说事:
VAR累计求和 =
VAR HQ = [客户占比]
RETURN
CALCULATE ( [客户占比], FILTER ( ALL ( '示例' ), [客户占比] >= HQ ) )
这里的VAR HQ是起什么作用?将原本属于变量的客户占比,在相对应的情境下,定义为可以被比较的常量,这样的话可以在FILTER函数的内部筛选整个表进行迭代,[客户占比]与[客户占比]这一项,自己对比排序,一旦符合大于等于的条件,就累计。
当然,VAR是表达式代码,不能说用来定义整个数据模型的变量,这是需要注意的地方。
小伙伴们❤GET了么?
白茶会不定期的分享一些函数卡片
(文件在知识星球[PowerBI丨需求圈])
这里是白茶,一个PowerBI的初学者。
下面这个知识星球是针对有实际需求的小伙伴,有需要的请加入下面的知识星球。