DAX:用自定义变量代替EARLIER函数

EARLIER函数是DAX中两个使用起来稍微绕脑的函数,它的功能是当表达式中出现嵌套行上下文场景时,通过在内层表达式中使用EARLIER函数,可以从当前行上下文中挑出,到外层行上下文去引用数据用于计算。
例如,当需要计算产品的累计销量时,就可以利用EARLIER函数。

在这里插入图片描述

Cum_Sales =
SUMX (
    FILTER (
        Customer,
        Customer[Customer] = EARLIER ( Customer[Customer] )
            && Customer[Date] <= EARLIER ( Customer[Date] )
    ),
    Customer[Total_Sales]
)

表达式Cum_Sales中包含两层嵌套上下文环境,内层是通过FILTER函数形成的子表单所规定的上下文环境,外层是计算列Cum_Sales本身所在的表单中的上下文环境。通过EARLER函数功能,将当前外层表单中的Customer列和Date作为条件,引入到了FILTER函数里面,用来作为生成子表单的筛选条件。从而可以获得产品销售量累加结果。

由于EARLER函数是在嵌套环境中进行使用,并且需要在不同层级当中跳跃式的获取数据,是的表达式的使用上稍显复杂。为了减少误用EARLER函数,可以通过使用自定义变量来代替EARLER函数,来获得同样的计算效果。

由于自定义变量本身有一个特点,即其计算结果仅仅与调用它的最外围表达式最初所在的上下文有关,不会受到调用它的函数内部修改的上下文关系所影响。因此在可以通过使用自定义变量来替换EARLIER函数和EARLIEST函数,使得表达式更加清晰易懂。

例如上面的公式可以用下面的自定义变量来替换。

Cum_Sales_VAR =
VAR Current_Customer = Customer[Customer]
VAR Current_Date = Customer[Date]
RETURN
    SUMX (
        FILTER (
            Customer,
            Customer[Customer] = Current_Customer
                && Customer[Date] <= Current_Date
        ),
        Customer[Total_Sales]

在这里插入图片描述

之所以自定义变量Current_Customer可以替换EARLIER ( Customer[Customer] )是因为,自定义变量是在调用它的最外层函数SUMX本身所在上下文环境中进行运算,而不是在FILTER函数内重新建立的上下文中运行。

例如,当Cum_Sales_VAR 表达式运行到Customer = Forth Coffee,Product = Computers,Date = 3/1/2017,Amount = 50,Total_Sales = 25000,Cum_Sales = 26500这一行时,自定义变量Current_Customer在当前上下文中获取Customer值,为Forth Coffee,而另外一个自定义变量Current_Date的值则为3/1/2017。这样,对于FILTER函数,其过滤条件就变成获取满足Customer[Customer] = Forth Coffee并且Customer[Date] <= 3/1/2017的子表单。这与之前使用EARLER来获取将当前外层表单中的Customer列和Date作为FILTER函数内使用的过滤条件效果相同,因此可以用自定义变量来代替表达式中的EAELER函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值