早些时候

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

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

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

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

语法

EARLIER(<column>, <number>)  

参数

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

下一个评估级别由 1 表示;两个级别由 2 表示,依此表示。

如果省略默认值为 1。

返回值

外部评估传递的 number 行的当前值(从 column开始)。

异常

错误说明

言论

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

  • EARLIER 的性能可能很慢,因为从理论上讲,它可能需要执行一些接近总行数(在列中)的相同数目(具体取决于表达式的语法)的操作。 例如,如果列中有 10 行,可能需要大约 100 个操作:如果有 100 行,则可以执行接近 10,000 个操作。

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

备注

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

为了说明使用 EARLIER,必须构建一个计算排名值的方案,然后在其他计算中使用该排名值。

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

此处显示了最后一个表,包括排名列。

ProductSubcategoryKey EnglishProductSubcategoryName TotalSubcategorySales SubcategoryRanking
18 Bib-Shorts $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 $8,847.08 35
29 清洁工 $16,882.62 32
8 Cranksets $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 Panniers 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 函数
筛选器函数