EARLIER

适用于:计算列计算表度量值视觉对象计算

返回所述列的外部计算传递中指定列的当前值。

对于要将某个值用作输入并基于该输入生成计算的嵌套计算而言,EARLIER 非常有用。 在 Microsoft Excel 中,只能在当前行的上下文内执行此类计算;但是,在 DAX 中,可以存储输入的值,然后使用整个表中的数据进行计算。

EARLIER 主要用于计算的列的上下文。

语法

EARLIER(<column>, <number>)  

parameters

术语 定义
解析为列的列或表达式。
num (可选)外部计算传递的正数。

下一个外部计算级别由 1 表示;两个外部级别由 2 表示,依此类推。

省略时,默认值为 1。

返回值

外部计算传递的数字所在列的当前行值

异常

错误说明

备注

  • 如果在表扫描开始之前存在行上下文,EARLIER 则成功。 否则它将返回错误。

  • EARLIER 的执行速度可能比较缓慢,因为从理论上讲,它可能需要执行大量操作,操作次数接近于总行数(列中)乘以相同数字(具体因表达式的语法而异)。 例如,如果列中有 10 行,则可能需要大约 100 次操作;如果有 100 行,则可能会执行接近 10,000 次操作。

  • 在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

注意

实际上,VertiPaq 内存中分析引擎会执行优化以减少实际的计算数量,但在创建涉及递归的公式时应谨慎使用。

示例

为了说明 EARLIER 的用法,需要构建一个方案来计算排名值,然后在其他计算中使用此排名值。

下面的示例基于此简单的表 ProductSubcategory,显示了每个 ProductSubcategory 的总销售额

此处显示包含排名列的最终表。

ProductSubcategoryKey EnglishProductSubcategoryName TotalSubcategorySales SubcategoryRanking
18 骑行背带短裤 156,167.88 美元 18
26 自行车车架 $220,720.70 14
27 单车存放架 $35,628.69 30
28 瓶子和笼子 $59,342.43 24
5 底托架 $48,643.47 27
6 刹车装置 $62,113.16 23
19 上限 $47,934.54 28
7 Chains $8,847.08 35
29 清洁剂 $16,882.62 32
8 牙盘 $191,522.09 15
9 换挡装置 $64,965.33 22
30 挡泥板 $41,974.10 29
10 前叉 $74,727.66 21
20 手套 $228,353.58 12
4 把手 $163,257.06 17
11 耳机 $57,659.99 25
31 头盔 $451,192.31 9
32 水袋背包 $96,893.78 20
21 运动衫 $699,429.78 7
33 36
34 $15,059.47 33
1 山地自行车 $34,305,864.29 2
12 山地自行车车架 $4,511,170.68 4
35 挂包 36
13 脚踏板 $140,422.20 19
36 打气筒 $12,695.18 34
2 公路自行车 $40,551,696.34 1
14 公路自行车车架 $3,636,398.71 5
15 鞍座 $52,526.47 26
22 短裤 $385,707.80 10
23 袜子 $28,337.85 31
24 紧身衣 $189,179.37 16
37 轮胎和内胎 $224,832.81 13
3 观光自行车 $13,334,864.18 3
16 观光自行车车架 $1,545,344.02 6
25 背心 $240,990.04 11
17 车轮 $648,240.04 8

创建排名值

获取行中给定值的排名值的一种方法是在同一表中对行数值大于(或小于)所比较的行进行计数。 此方法针对表中的最大值返回空白或零值,而相等的值将有相同的排名值,并且下一个值(在相等的值之后)将具有非连续的排名值。 请看以下示例。

使用以下公式创建了一个新的计算列 SubCategorySalesRanking

= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1  

以下步骤更详细地介绍了计算方法。

  1. EARLIER 函数获取表中当前行的 TotalSubcategorySales 值。 在此情况下,由于进程正在启动,所以获取的是表中的第一行

  2. EARLIER([TotalSubcategorySales]) 的计算结果是 $156,167.88,即外部循环中的当前行

  3. FILTER 函数现在返回一个表,其中所有行所具有的 TotalSubcategorySales 值均大于 $156,167.88(这是 EARLIER 的当前值)

  4. COUNTROWS 函数对已筛选表的行进行计数,并将此值分配到当前行中新的计算列,并且加 1。 需要加 1 来防止顶部排名值变为空白。

  5. 接着计算列公式会移到下一行,并重复步骤 1 到 4。 这些步骤将一直重复,直至到达表的末尾。

EARLIER 函数将始终在当前表操作之前获取列值。 如果需要在此之前获取循环中的值,请将第二个参数设为 2。

EARLIEST 函数
筛选器函数