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工坊