DAX:概述EARLIEST和EARLIER函数

发布时间 2023-05-04 18:42:07作者: 悦光阴

EARLIER函数用于访问外层行上下文,即使用外层行上下文,而不是最内层的行上下文检索列的值。

EARLIER(<column>, <number>) 
EARLIEST(<column>) 

注意:EARLIER函数接受第二个参数,默认值是1,表示要跳过的层数,可以跳过2层或多层行上下文。EARLIEST函数直接访问最外层的行上下文。

自从变量出现之后,EARLIER函数的所有功能都可以通过变量来实现。

举个例子,创建计算列,对产品的价格进行排序:

方法1:使用EARLIER函数实现Dense Rank,DAX的实现思路:

  • 计算列会创建最外层的行上下文,FILTER函数是迭代函数,会创建一个行上下文,这是内层行上下文。
  • 由于外层的行上下文不会筛选数据,因此,VALUES('Product'[UnitPrice])得到的是整个表的UnitPrice。
  • EARLIER('Product'[UnitPrice])访问外层行上下文,得到当前行的UnitPrice。
  • FILTER函数过滤,得到比当前行的UnitPrice大的所有数据行,计算其行数就得到当前行的UnitPrice的排名。
'Product'[UnitPriceRankDense] =
    COUNTROWS( FILTER( VALUES('Product'[UnitPrice]),'Product'[UnitPrice] > EARLIER('Product'[UnitPrice]))
        )

方法2:使用变量实现等价的Dense Rank:

'Product'[UnitPriceRankDense] =

VAR PriceOfCurrentProduct = 'Product'[UnitPrice]
VAR HigherPrices =  FILTER( VALUES('Product'[UnitPrice]), 'Product'[UnitPrice] > PriceOfCurrentProduct )
RETURN COUNTROWS(HigherPrices) + 1

 

 

参考文档: