DAX 实战 | VAR 函数应用避坑
Hello各位小伙伴们好呀!今天我们来讲讲如何规避变量VAR的错误用法。
我们在书写DAX公式的时候经常会用到变量VAR,它可以优化公式的性能,增强代码的可读性。有时候使用CALCULATE嵌套变量时,不能运行出正确的结果,而这可能是一种常见的VAR错误用法导致的。
让我们一起来看看示例,在之后的工作中绕开这个隐藏陷阱吧~
首先,我们需要了解一下VAR的特点:
VAR计算的结果是不变的量,因此不能使用VAR命名的变量作为函数中为值类型的参数,但可以使用在筛选类型的参数上。
让我们结合例子来理解这个特点。
示例一:
比如下面这个例子就是不成立的,公式用了CALCULATE+VAR变量来计算环比。
代码如下:
Sales QuantityYOY%_01 =
VAR _Sales =SUM('Sales'[销售数量])
RETURN
DIVIDE ( _Sales
,
CALCULATE(
_Sales ,
SAMEPERIODLASTYEAR('Dim_Date'[Date])
)
)
图1
如图1所示,度量Sales Quantity YOY%_01结果都显示100%,我们来找一下原因。
测试计算上年销量的公式,代码如下:
Sales Quantity _LastYear_01 =
VAR _Sales =SUM('Sales'[销售数量])
RETURN
CALCULATE(
_Sales ,
SAMEPERIODLASTYEAR('Dim_Date'[Date])
)
图2
如图2所示,使用CALCULATE+VAR计算Sales Quantity _LastYear_01时,CALCULATE的筛选条件没有生效。
这就是最容易犯错的地方,VAR定义的变量指的是不变的量。它会对聚合的值进行锁定,变量已经变成一个固定值,CALCULATE的筛选上下文会失效。所以CALCULATE的第一个参数不支持使用VAR指定的变量,想要在CALCULATE中正确的使用第一个参数,需要使用现有的度量值,或者重新编写该参数的计算公式。
我们可以这样修改公式,代码如下:
Sales QuantityYOY%_02 =
VAR _Sales =SUM('Sales'[销售数量])
RETURN
DIVIDE(_Sales
,
CALCULATE(
SUM('Sales'[销售数量]) ,
SAMEPERIODLASTYEAR('Dim_Date'[Date])
)
)
示例二:计算各地区的累计销量
VAR不能用作CALCULATE 的第一个参数,但是可以使用在CALCULATE的第二个参数上。CALCULATE中的第二参筛选条件可以是常量也可以是变量,常量不需要嵌套FILTER,变量需要嵌套。
代码如下:
YTD Sales Quantity =
VAR _Endtime = MAX ('Dim_Date'[Date] )
VAR _AreaID =SELECTEDVALUE( 'Dim_Area'[地区ID])
RETURN
CALCULATE (
[Sales Quantity],
FILTER (
ALL ( 'Sales' ),
'Sales'[日期] <= _Endtime && Sales[地区ID] = _AreaID))
结果如图3所示。
图3
以上就是今天的内容,使用VAR变量可以帮我们实现很多特殊的业务需求,掌握它的特点,就可以避免它的错误用法。你学会了吗?
本期内容就是这些,小伙伴们下期再见!
- PowerPivot工坊原创文章,转载请注明出处!
如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。
长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~
Power Pivot工坊
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)